如何获取小程序二维码

简介: 如何获取小程序二维码

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


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


/*
     * author:咔咔
     * wechat:fangkangfk
     * time:2018.9.13
     * 获取小程序二维码
     * */
/**
    * 获取 access_tonken
    * @param string $token_file 用来存储token的临时文件
    */
    private function _getToken($token_file='./access_token') {
        // 考虑过期问题,将获取的access_token存储到某个文件中
        $life_time = 7200;
        if (file_exists($token_file) && time()-filemtime($token_file)<$life_time) {
            // 存在有效的access_token
            return file_get_contents($token_file);
        }
        // 目标URL:        
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".Config::get('appid')."&secret=".Config::get('appsecret');
        //向该URL,发送GET请求
        $result = $this->request($url);
        if (!$result) {
            return false;
        }
        // 存在返回响应结果
        $result_obj = json_decode($result);
        // 写入
        file_put_contents($token_file, $result_obj->access_token);
        return $result_obj->access_token;
    }
/*
获取二维码
*/
public function getQrcode(){
        $userId = $this->request->param('user_id');
        $member_app_id = $this->request->param('appid');
        $token = $this->getToken($member_app_id);
        $url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=".$token;
        $data = [
            'path' =>"pages/network/network?userId=".$userId,
            'scene'=>'1001',
            'width'=>430,
            'auto_color'=>false,
        ];
        $data=json_encode($data);
        $res = $this->request($url,$data);
        $data='image/png;base64,'.base64_encode($res);
        $imageName = rand(1111,9999).'.png';
        if (strstr($data,",")){
            $image = explode(',',$data);
            $image = $image[1];
        }
        $path = "/attachs/uploads/".date("Ymd",time());
        if (!is_dir($path)){ //判断目录是否存在 不存在就创建
            mkdir($path,0777,true);
        }
        $imageSrc=  $path."/". $imageName;  //图片名字
        $r = file_put_contents(ROOT_PATH .$imageSrc, base64_decode($image));//返回的是字节数
        if (!$r) {
            // return json(['data'=>null,"code"=>1,"msg"=>"图片生成失败"]);
        }else{
            $send = ['code'=>200,'msg'=>'图片生成成功','path'=>'https://'.$_SERVER['HTTP_HOST'].$imageSrc];
            // return json(['data'=>1,"code"=>0,"msg"=>"图片生成成功"]);
        }
        $this->result($send,200,'获取二维码成功','json');
    }
    //发起请求
    public static function request($url, $data=array()){
        $ch = curl_init();//初始化
        //curl_setopt();//设置
        //设置
        curl_setopt($ch,CURLOPT_URL,$url);   //需要获取的 URL 地址
        curl_setopt($ch,CURLOPT_HEADER,0);          //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  //获取的信息以字符串返回,而不是直接输出
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
        //避免https 的ssl验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSLVERSION, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        if($data){
            curl_setopt($ch, CURLOPT_POST, 1);          //post请求
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
        }
        //执行
        $data = curl_exec($ch);//执行   不输出  内容返回给它
        //判断是否请求成功
        if(curl_errno($ch)){//错误码
            echo 'curl error: '.curl_error($ch);//错误信息
        }
        $response = curl_getinfo($ch);
        switch($response['http_code']){
            case 200:
                return $data;
                break;
            default:
                exit('程序异常');
        }
        curl_close($ch);//关闭
    }
    //发起请求
    public static function request($url, $data=array()){
        $ch = curl_init();//初始化
        //curl_setopt();//设置
        //设置
        curl_setopt($ch,CURLOPT_URL,$url);   //需要获取的 URL 地址
        curl_setopt($ch,CURLOPT_HEADER,0);          //启用时会将头文件的信息作为数据流输出, 此处禁止输出头信息
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);  //获取的信息以字符串返回,而不是直接输出
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30); //连接超时时间
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
        //避免https 的ssl验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSLVERSION, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        if($data){
            curl_setopt($ch, CURLOPT_POST, 1);          //post请求
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//post参数
        }
        //执行
        $data = curl_exec($ch);//执行   不输出  内容返回给它
        //判断是否请求成功
        if(curl_errno($ch)){//错误码
            echo 'curl error: '.curl_error($ch);//错误信息
        }
        $response = curl_getinfo($ch);
        switch($response['http_code']){
            case 200:
                return $data;
                break;
            default:
                exit('程序异常');
        }
        curl_close($ch);//关闭
    }


image.png


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


var array = wx.base64ToArrayBuffer(data);
        var base64 = wx.arrayBufferToBase64(array); 
        that.setData({ kaka: "data:image/png;base64," + base64 });


上边的三段代码特别重要


saveImageToAlbum: function() {
      var user_id = wx.getStorageSync('user_id');
      var that = this;
      wxb.Post('/api/automatic.manage/getQrcode',{
        user_id: user_id
      },function(data){
        console.log(data)
        var array = wx.base64ToArrayBuffer(data);
        var base64 = wx.arrayBufferToBase64(array); 
        that.setData({ kaka: "data:image/png;base64," + base64 }); 
        // that.setData({
        //   qrcode: data.data
        // })
      });
    },







相关文章
|
小程序 开发者
微信小程序通过普通二维码扫码进入指定页面带参数
微信小程序通过普通二维码扫码进入指定页面带参数
|
小程序
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
433 0
|
小程序
微信小程序显示二维码
微信小程序显示二维码
173 0
|
小程序 前端开发 PHP
PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
232 0
|
3月前
|
小程序 JavaScript
小程序生成二维码
小程序生成二维码
40 9
|
2月前
|
小程序 前端开发 Java
java 生成小程序二维码
java 生成小程序二维码
18 0
|
5月前
|
小程序 数据挖掘 UED
餐饮店小程序开发定制桌边二维码点餐系统
随着技术不断进步,各行各业都在使用新工具来提高效率和服务质量。餐饮业也不例外。餐饮点餐小程序系统是基于微信公众平台开发的在线点餐方式。顾客可以通过手机微信扫描餐桌上的二维码,进入餐厅的点餐小程序,选择菜品、数量和口味,直接完成点餐。点餐系统会自动保存并发送给厨房,避免了传统手工点餐容易出错的问题。
|
5月前
|
前端开发 小程序
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
418 0
|
小程序 程序员 开发工具
小程序生成二维码海报的组件-wxa-plugin-canvas
小程序生成二维码海报的组件-wxa-plugin-canvas
105 0
|
7月前
|
小程序 JavaScript
微信小程序长按识别图片二维码功能
微信小程序长按识别图片二维码功能
411 0