最近在做生成生成微信小程序菊花二維碼, 發現其中有一個坑, 在此記錄。另外,深深鄙視某度上的搜索結果,都是瞎寫的,沒有一點實踐精神的垃圾代碼。
廢話不多說,先來看看微信官方文檔給的解釋:
先來看看問題1, 網上大多數人,肯能都將access_token 拼在了post data 參數中了,導致出現錯誤。
問題2, line_color 是個object 類型, 也就是個對象 。 剛開始博主沒有意識到, 折騰了大概半小時,終於想明白是這裏出了問題, 如何解決?
$line_color = [
'r' => 0,
'g' => 0,
'b' => 0
];
$line_color = json_decode(json_encode($line_color));
嘿嘿, 這不就OK了麼。
以下上代碼, 獲取access_token 部分就不貼出來了。
/**
* 生成微信小程序分享二維碼
* Function getWxAcode
* @author mselect <[email protected]>
* @DateTime 2019/5/24
* @return array
* @param $fund_id 衆籌ID
*/
public function getWxAcode($path, $param){
$accessToken = $this->getAccessToken();
if(!$accessToken){
return ['code' => -1, 'msg' => '獲取access_token失敗'];
}else {
//生成二維碼
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $accessToken;
$color = [
'r' => 0,
'g' => 0,
'b' => 0,
];
$data = [
'scene' => 'param=' . $param ,
'page' => $path,
'width' => '200',
'auto_color' => false, //自動配置線條顏色,如果顏色依然是黑色,則說明不建議配置主色調,默認 false
'line_color' => json_decode(json_encode($color)), //auto_color 爲 false 時生效,使用 rgb 設置顏色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十進制表示
'is_hyaline' => true, //是否需要透明底色,爲 true 時,生成透明底色的小程序
];
//方式二
//$url2 = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" . $accessToken;
// $data2 = [
// 'path' => 'pages/ranktab/index/index',
// 'width' => 280
// ];
// $color = [
// 'r' => 0 ,
// 'g' => 0,
// 'b' => 0,
// ];
//方式三
// $url3 = "https://api.weixin.qq.com/wxa/getwxacode?access_token=$accessToken";
// $data3 = [
// 'path' => 'pages/ranktab/index/index?product_id=33',
// 'width' => 280,
// 'auto_color' => false,
// 'line_color' => json_decode(json_encode($color)),
// 'is_hyaline' => false,
// ];
$backData = curl_post($url, json_encode($data) );
return $backData;
}
}
function curl_post($url, $data=null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data))
{
$header = [
'Content-Type: application/json',
'Content-Length: ' . strlen($data)
];
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}