如何获取小程序二维码

举报
原来是咔咔 发表于 2022/03/27 01:50:47 2022/03/27
【摘要】 首先我们先获取到token,拿到token后再去调获取二维码的接口 这里需要注意的是,返回的图片是一堆乱码,需要使用base65_encode来解密,输出成图片即可 /* * author:咔咔 * wechat:fangkangfk * time:2018.9.13 * 获取小程序二维码 ...

首先我们先获取到token,拿到token后再去调获取二维码的接口

这里需要注意的是,返回的图片是一堆乱码,需要使用base65_encode来解密,输出成图片即可


  
  1. /*
  2. * author:咔咔
  3. * wechat:fangkangfk
  4. * time:2018.9.13
  5. * 获取小程序二维码
  6. * */
  7. /**
  8. * 获取 access_tonken
  9. * @param string $token_file 用来存储token的临时文件
  10. */
  11. private function _getToken($token_file='./access_token') {
  12. // 考虑过期问题,将获取的access_token存储到某个文件中
  13. $life_time = 7200;
  14. if (file_exists($token_file) && time()-filemtime($token_file)<$life_time) {
  15. // 存在有效的access_token
  16. return file_get_contents($token_file);
  17. }
  18. // 目标URL:
  19. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".Config::get('appid')."&secret=".Config::get('appsecret');
  20. //向该URL,发送GET请求
  21. $result = $this->request($url);
  22. if (!$result) {
  23. return false;
  24. }
  25. // 存在返回响应结果
  26. $result_obj = json_decode($result);
  27. // 写入
  28. file_put_contents($token_file, $result_obj->access_token);
  29. return $result_obj->access_token;
  30. }
  31. /*
  32. 获取二维码
  33. */
  34. public function getQrcode(){
  35. $userId = $this->request->param('user_id');
  36. $member_app_id = $this->request->param('appid');
  37. $token = $this->getToken($member_app_id);
  38. $url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=".$token;
  39. $data = [
  40. 'path' =>"pages/network/network?userId=".$userId,
  41. 'scene'=>'1001',
  42. 'width'=>430,
  43. 'auto_color'=>false,
  44. ];
  45. $data=json_encode($data);
  46. $res = $this->request($url,$data);
  47. $data='image/png;base64,'.base64_encode($res);
  48. $imageName = rand(1111,9999).'.png';
  49. if (strstr($data,",")){
  50. $image = explode(',',$data);
  51. $image = $image[1];
  52. }
  53. $path = "/attachs/uploads/".date("Ymd",time());
  54. if (!is_dir($path)){ //判断目录是否存在 不存在就创建
  55. mkdir($path,0777,true);
  56. }
  57. $imageSrc= $path."/". $imageName; //图片名字
  58. $r = file_put_contents(ROOT_PATH .$imageSrc, base64_decode($image));//返回的是字节数
  59. if (!$r) {
  60. // return json(['data'=>null,"code"=>1,"msg"=>"图片生成失败"]);
  61. }else{
  62. $send = ['code'=>200,'msg'=>'图片生成成功','path'=>'https://'.$_SERVER['HTTP_HOST'].$imageSrc];
  63. // return json(['data'=>1,"code"=>0,"msg"=>"图片生成成功"]);
  64. }
  65. $this->result($send,200,'获取二维码成功','json');
  66. }
  67. //发起请求
  68. public static function request($url, $data=array()){
  69. $ch = curl_init();//初始化
  70. //curl_setopt();//设置
  71. //设置
  72. curl_setopt($ch,CURLOPT_URL,$url); //需要获取的 URL 地址
  73. curl_setopt($ch,CURLOPT_HEADER,0); //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
  74. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //获取的信息以字符串返回,而不是直接输出
  75. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
  76. curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  77. //避免https 的ssl验证
  78. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  79. curl_setopt($ch, CURLOPT_SSLVERSION, false);
  80. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  81. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  82. if($data){
  83. curl_setopt($ch, CURLOPT_POST, 1); //post请求
  84. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
  85. }
  86. //执行
  87. $data = curl_exec($ch);//执行 不输出 内容返回给它
  88. //判断是否请求成功
  89. if(curl_errno($ch)){//错误码
  90. echo 'curl error: '.curl_error($ch);//错误信息
  91. }
  92. $response = curl_getinfo($ch);
  93. switch($response['http_code']){
  94. case 200:
  95. return $data;
  96. break;
  97. default:
  98. exit('程序异常');
  99. }
  100. curl_close($ch);//关闭
  101. }
  102. //发起请求
  103. public static function request($url, $data=array()){
  104. $ch = curl_init();//初始化
  105. //curl_setopt();//设置
  106. //设置
  107. curl_setopt($ch,CURLOPT_URL,$url); //需要获取的 URL 地址
  108. curl_setopt($ch,CURLOPT_HEADER,0); //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
  109. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //获取的信息以字符串返回,而不是直接输出
  110. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
  111. curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  112. //避免https 的ssl验证
  113. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  114. curl_setopt($ch, CURLOPT_SSLVERSION, false);
  115. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  116. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  117. if($data){
  118. curl_setopt($ch, CURLOPT_POST, 1); //post请求
  119. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
  120. }
  121. //执行
  122. $data = curl_exec($ch);//执行 不输出 内容返回给它
  123. //判断是否请求成功
  124. if(curl_errno($ch)){//错误码
  125. echo 'curl error: '.curl_error($ch);//错误信息
  126. }
  127. $response = curl_getinfo($ch);
  128. switch($response['http_code']){
  129. case 200:
  130. return $data;
  131. break;
  132. default:
  133. exit('程序异常');
  134. }
  135. curl_close($ch);//关闭
  136. }

那么问题来了怎么将获取二维码显示在小程序界面呢!

        var array = wx.base64ToArrayBuffer(data);
        var base64 = wx.arrayBufferToBase64(array); 

        that.setData({ kaka: "data:image/png;base64," + base64 }); 

上边的三段代码特别重要


  
  1. saveImageToAlbum: function() {
  2. var user_id = wx.getStorageSync('user_id');
  3. var that = this;
  4. wxb.Post('/api/automatic.manage/getQrcode',{
  5. user_id: user_id
  6. },function(data){
  7. console.log(data)
  8. var array = wx.base64ToArrayBuffer(data);
  9. var base64 = wx.arrayBufferToBase64(array);
  10. that.setData({ kaka: "data:image/png;base64," + base64 });
  11. // that.setData({
  12. // qrcode: data.data
  13. // })
  14. });
  15. },

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/82688152

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。