項目需求:微信公眾號需要生成帶參數的二維碼,以此記錄開發流程,方便下次使用:
微信公眾號生成帶參數的二維碼,又分為臨時二維碼與永久二維碼,臨時二維碼的時效性為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。