getwxacodeunlimit 微信小程序生成二维码 thinkphp3.2

  • Post author:
  • Post category:php



微信小程序生成二维码

第一步:首先我们需要去拿到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个可见字符,只支持数字,大小写英文以及部分特殊字符:

!#$&'()*+,/:;=?@-._~

,其它字符请自行编码为合法字符(因不支持

%

,中文无法使用

urlencode

处理,请使用其他编码方式)

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 版权协议,转载请附上原文出处链接和本声明。