微信公众号之获取带参数的二维码


项目需求:微信公众号需要生成带参数的二维码,以此记录开发流程,方便下次使用:

微信公众号生成带参数的二维码,又分为临时二维码与永久二维码,临时二维码的时效性为30天,永久二维码只能创建100000次

开发过程主要分为两步:每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),此参数用户识别用户设定的应用于不同场景

第一步:创建二维码需要的ticket(生成ticket之前需要通过获取官方的获取access_token接口先获取到access_token的值)

如果时临时二维码:给微信发送一个POST请求,一般通过curl的方式,请求url为:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

发送的data数据包为json格式 :{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者可以为字符串形式的二维码参数,json数据包为{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

 

如果时永久二维码:给微信发送一个POST请求,一般通过curl的方式,请求url为https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

发送的data数据包为json格式 :{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者可以为字符串形式的二维码参数,json数据包为{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

 

 通过封装curl函数方法如,httprequest方法,然后将url,data传入httprequest($url,$data),如果请求正确时,会返回:

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm 3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}

httprequest方式封装如下:

function httprequest($url,$data,$header=[]){

  $ch = curl_init();

  curl_setopt($ch,CURLOPT_URL,$url);

  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

  if(!empty($data)){ 

  curl_setopt($ch, CURLOPT_POST, true); 

  curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

  }

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  if (!empty($headers)) {

  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

  }

  $res = curl_exec($ch);

  curl_close($ch);

  return $res; 

  }

第二步:通过ticket去换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

请求说明

HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET 提醒:TICKET记得进行UrlEncode

返回说明

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。(如果是直接展示,需要设置头部图片输出信息Content-Type:image/jpg,image后面可以为jpg也可以为png,然后就可以直接在浏览器中直接输出)

HTTP头(示例)如下: Accept-Ranges:bytes Cache-control:max-age=604800 Connection:keep-alive Content-Length:28026 Content-Type:image/jpg Date:Wed, 16 Oct 2013 06:37:10 GMT Expires:Wed, 23 Oct 2013 14:37:10 +0800 Server:nginx/1.4.1

错误情况下(如ticket非法)返回HTTP错误码404。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM