最近在做生成生成微信小程序菊花二维码, 发现其中有一个坑, 在此记录。另外,深深鄙视某度上的搜索结果,都是瞎写的,没有一点实践精神的垃圾代码。
废话不多说,先来看看微信官方文档给的解释:
链接:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html#method-http
先来看看问题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;
}