微信小程序生成二维码
第一步:首先我们需要去拿到Token值 第一步是一个比较常规的操作,未遇到大的问题。
第二步:拿着Token进行换取二维码(需要细心)
第三步:把返回的二维数组保存为图片。(问题点)
很关键的地方,腾讯用token换取二维码的方法有三组接口A,B,C
1. 接口A: 适用于需要的码数量较少的业务场景
接口地址:
https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
2.接口B:适用于需要的码数量极多的业务场景
接口地址:
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
3.接口C:适用于需要的码数量较少的业务场景
接口地址:
https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
本人使用的是B接口,遇到的问题是
1.二维码在真机测试的时候图片无法渲染出来,只限ios报的错误是Requestbegin就停止,
解决方案,把生成的二维码图片进行一个本地服务器保存.
2.scene值没有拿到
细心一点就没有问题,仔细看文档对scence的要求
scene | string | 是 |
最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:
,其它字符请自行编码为合法字符(因不支持
,中文无法使用
处理,请使用其他编码方式) |
3.把图片保存到本地
如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。如果是图片多好,返回的两个二进制内容
4.扫码打开小程序接参
我使用的方式是拼 参数+’,’+参数 ,前段接参的时候使用 .split(‘,’)
我的前段代码
var scene = decodeURIComponent(query.scene)
scene = scene.split(",");
console.log('扫码进入',scene[0], scene[1])
我的Php代码(thinkphp3.2)
//获取token缓存起来
public function DoctorAccessToken(){
$appId = 'xxxxxxxxxxxxx';
$secret = 'xxxxxxxxxxxxxxxxxxxxxxx';
//创建请求数据
$url_token="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$secret}";
$data_result = $this->curl_get_https($url_token);
$data_two = json_decode($data_result,TRUE);
$token = $data_two['access_token'];
$data = json_encode($data);
session('token2',$token['access_token']);
}
//拿到token获取二维码
public function getXcxCode(){
$token = session('token2');
if ($token) {
$accessToken= $token;
}else{
$accessToken = $this->getAccessToken();
}
$url="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={$accessToken}";
$data=[
'scene'=>'pid=1',
'page'=>'pages/sofa/sofa',
'width'=>430,
'auto_color'=>false,
];
$data=json_encode($data);
//拿到二维码
$result = $this->curl_post_https($url,$data);
//把二维码存到服务器端
$res = $this->UploadImageQrCode($result);
echo $res;
}
// 模拟post进行url请求
public function curl_post_https($url,$data){
$ch = curl_init();
$header = "Accept-Charset: utf-8";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return false;
}else{
return $tmpInfo;
}
}
图片二进制内容
保存为图片
// 图片上传
public function UploadImageQrCode($img){
$image = I('post.image');
$saveimgfile_1 = './Upload/ecode/'.$d;
$fileimgname = time()."-".rand(1000,9999).".png";
$filecachs = $saveimgfile_1."/".$fileimgname;
// $img=file_get_contents($image);
$fanhuistr = file_put_contents( $filecachs,$img);
return $fileimgname;
}
建议:二维生成之后保存成图片放在服务器,再给前端之后。
我的案例可以直接查看
版权声明:本文为weixin_41487694原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。