公眾平台提供了生成帶參數二維碼的接口。使用該接口可以獲得多個帶不同場景值的二維碼,用戶掃描后,公眾號可以接收到事件推送。
目前有2種類型的二維碼:
1、臨時二維碼,是有過期時間的,最長可以設置為在二維碼生成后的30天(即2592000秒)后過期,但能夠生成較多數量。臨時二維碼主要用於帳號綁定等不要求二維碼永久保存的業務場景
2、永久二維碼,是無過期時間的,但數量較少(目前為最多10萬個)。永久二維碼主要用於適用於帳號綁定、用戶來源統計等場景。
用戶掃描帶場景值二維碼時,可能推送以下兩種事件:
如果用戶還未關注公眾號,則用戶可以關注公眾號,關注后微信會將帶場景值關注事件推送給開發者。
如果用戶已經關注公眾號,在用戶掃描后會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。
獲取帶參數的二維碼的過程包括兩步,首先創建二維碼ticket,然后憑借ticket到指定URL換取二維碼。
獲取帶參數的二維碼的過程包括兩步,首先創建二維碼ticket,然后憑借ticket到指定URL換取二維碼。
每次創建二維碼ticket需要提供一個開發者自行設定的參數(scene_id:整數)或者(scene_str:字符串)。
1、創建臨時二維碼ticket
接口:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
當參數為整數時,tmp_ticket_id.php
<?php @header('Content-type: text/plain;charset=UTF-8'); require_once("../Utils.php"); $data = '{ "expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": { "scene": { "scene_id": 100 } } }'; $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?" ."access_token=".Utils::get_access_token(); $result = Utils::https_request($url, $data); echo $result;返回:
{ "ticket": "gQHv8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyRW52QnMxeEZlcGkxLXFNNWhwMS0AAgQatrxZAwSAOgkA", "expire_seconds": 604800, "url": "http://weixin.qq.com/q/02EnvBs1xFepi1-qM5hp1-" }當參數為字符串時,tmp_ticket_str.php
<?php @header('Content-type: text/plain;charset=UTF-8'); require_once("../Utils.php"); $data = '{ "expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": { "scene": { "scene_str": "abcd" } } }'; $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?" ."access_token=".Utils::get_access_token(); $result = Utils::https_request($url, $data); echo $result;返回:
{ "ticket": "gQEN8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyNGZPSnRXeEZlcGkxLWhQNTFwYzEAAgQRubxZAwSAOgkA", "expire_seconds": 604800, "url": "http://weixin.qq.com/q/024fOJtWxFepi1-hP51pc1" }
2、創建永久二維碼ticket
當參數為數字時,never_ticket_id,php
<?php @header('Content-type: text/plain;charset=UTF-8'); require_once("../Utils.php"); $data = '{ "action_name": "QR_LIMIT_SCENE", "action_info": { "scene": { "scene_id": 111 } } }'; $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?" ."access_token=".Utils::get_access_token(); $result = Utils::https_request($url, $data); echo $result;
返回:
{ "ticket": "gQH88DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyYk44LXNGeEZlcGkxMDAwMHcwM2gAAgRiubxZAwQAAAAA", "url": "http://weixin.qq.com/q/02bN8-sFxFepi10000w03h" }
<?php @header('Content-type: text/plain;charset=UTF-8'); require_once("../Utils.php"); $data = '{ "action_name": "QR_LIMIT_STR_SCENE", "action_info": { "scene": { "scene_str": "haha" } } }'; $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?" ."access_token=".Utils::get_access_token(); $result = Utils::https_request($url, $data); echo $result;返回:
{ "ticket": "gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA", "url": "http://weixin.qq.com/q/02vhYzt3xFepi10000w07Q" }
3、通過ticket換取二維碼圖片
接口:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET,TICKET記得進行UrlEncode
該操作無需登錄或授權即可調用,也就是說可以直接在瀏覽器中打開該鏈接獲取圖片。
例如打開以上永久二維碼的id圖片:
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQH88DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyYk44LXNGeEZlcGkxMDAwMHcwM2gAAgRiubxZAwQAAAAA

打開以上永久二維碼str圖片
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA

4、掃碼
調用微信掃一掃功能,掃描上面的二維碼,如果已關注會發送以下XML數據給開發者,並跳轉到公眾號,開發者此時不能回復空字符串,否則會報錯。
<xml> <ToUserName> <![CDATA[gh_6b9aa8a6f1e2]]> </ToUserName> <FromUserName> <![CDATA[o4WmZ0h-4huBUVQUczx2ezaxIL9c]]> </FromUserName> <CreateTime>1505542211</CreateTime> <MsgType> <![CDATA[event]]> </MsgType> <Event> <![CDATA[SCAN]]> </Event> <EventKey> <![CDATA[haha]]> </EventKey> <Ticket> <![CDATA[gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA]]> </Ticket> </xml>如果用戶未關注,掃描后會彈出以下界面讓用戶關注

點擊關注后會推送給開發者如下消息,事件為subscribe關注事件,EventKey為qrscene_ +二維碼參數值。
<xml> <ToUserName> <![CDATA[gh_6b9aa8a6f1e2]]> </ToUserName> <FromUserName> <![CDATA[o4WmZ0h-4huBUVQUczx2ezaxIL9c]]> </FromUserName> <CreateTime>1505542651</CreateTime> <MsgType> <![CDATA[event]]> </MsgType> <Event> <![CDATA[subscribe]]> </Event> <EventKey> <![CDATA[qrscene_haha]]> </EventKey> <Ticket> <![CDATA[gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA]]> </Ticket> </xml>