词条信息

admin
超级管理员
版本创建者 发短消息   
简易百科旧版 >> 微信小程序之二维码获取 >> 历史版本

最新历史版本 :微信小程序之二维码获取 返回词条



综述:微信提供三中接口来请求二维码,即 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({

 // 获取token

 url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',

 data: {

 appid: '*****',

 secret: '*******'

 },

 success(res) {

 wx.request({

 // 调用接口C

 url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + res.data.access_token,

 method: 'POST',

 data: {

 "path": "pages/meiTuan/meiTuan",

 "width": 430

 },

 success(res) {

 console.log(res)

 // res是二进制流,后台获取后,直接保存为图片,然后将图片返回给前台

 }

 })

 }

 })

 },



方法二:用php远程请求accesstoken回目录


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);