综述:微信提供三中接口来请求二维码,即 A B C 三中接口,其区别不多说,直接看微信官方手册,网址https://developers.weixin.qq.com/miniprogram/dev/api/qrcode.html 经过仔细查看手册后,发现需要请求二维码,必须先请求access token,请求网址 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential 所传参数为,appid和appsecret,然后拿accesstoken去和需要二维码所传的参数去请求二维码
请求二维码步骤
方法一:在微信小程序js中请求代码如下,用真实的appid和appsecret替换下面的appid和appsecret直接congsole就可看见二维码的二进制形式,这时候二维码就请求出来了,
注意:在这块如果是开发工具填写了appid,则将打开开发工具右上角详情----->不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书 (勾选)但是微信小程序请求的二维码是二进制形式所以建议在后端去请求,因为请求的二维码是二进制形式,请求后,将请求二进制二维码直接保存成图片,详见方法二 我用的是php语言所以就做一个案例了
wx.request({
方法二:
1用php远程请求accesstoken,这里说点题外话进行点扩展
php远程请求有多种方式:如
(1)用file_get_contents 以get方式获取内容
(2)用fopen打开url,用get方式获取
(3)用file_get_contents 以post方式获取内容
(4)用fsockopen函数打开url,以get方式获取完整的数据,包括header和body,fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启
(5)用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
(6)使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展
这里我写一下第6中,通过curl方式请求微信小程序accesstoken,代码如下(可复制直接用)
$appid='***'; $appsecret='****';
//请求accesstoken接口 $url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret; $https=true; $method='get'; $data=null; //1.初始化url $ch = curl_init($url); //2.设置相关的参数 //字符串不直接输出,进行一个变量的存储 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //判断是否为https请求 if($https === true){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); } //判断是否为post请求 if($method == 'post'){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } //3.发送请求获取数据 $str = curl_exec($ch); //4.关闭连接 curl_close($ch);
2通过以上请求到的accesstoken来获取小程序二维码并保存,这里需要注意的是,以上的curl请求可以封装成函数在上面和这个时候调用,由于我是写给没有基础的伙伴们的,所以我就不封装了,你们在实际工作中去封装吧//获取请求到的结果讲上面获取的accresstoken进行解码成数组,然后获取accesstoken值
$arr = json_decode($str,true);
$access_token=$arr['access_token'];
//获取二维码,但是切记这里accesstoken不能用通过post传值,只能用get传值
$url='https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$access_token;
$data['scene']="uid=".$user_id;
$data['path']=$path;
$data['width']=$width;
$post_data=json_encode($data);
$https=true;
$method='post';
//1.初始化url
$ch = curl_init($url);
//2.设置相关的参数
//字符串不直接输出,进行一个变量的存储
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//判断是否为https请求
if($https === true){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
//判断是否为post请求
if($method == 'post'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
//3.发送请求
$str = curl_exec($ch);
//4.关闭连接 至此二维码的二进制值为$str
curl_close($ch);
3将二维码的二进制值保存为图片
//获取当前时间措
$time=time();
//指定文件保存路径
$file = "static/smallwechat$time.jpg";
//进行保存
$res=file_put_contents($file, $str);
//如果保存成功返回路径
if($res!=0){
return json_encode($file,JSON_UNESCAPED_UNICODE);
}
至此整个小程序二微码获取完成,希望对大家有帮助,谢谢阅览