项目需求:微信公众号需要生成带参数的二维码,以此记录开发流程,方便下次使用:
微信公众号生成带参数的二维码,又分为临时二维码与永久二维码,临时二维码的时效性为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。