微信公眾平台生成帶場景參數二維碼


最近公司需要做一個智能試衣鏡,微信導流是一個核心功能。就是用戶掃描試衣鏡上的二維碼進入我們的公眾號。為了唯一標識照片,需要動態生成二維碼,該試衣鏡后續的每張照片都會和一個二維碼綁定。用戶進入掃描二維碼進入我們的公眾號后,會攜帶二維碼的參數值,我們的微信公眾號后台程序就找到這些的照片,然后通過點擊圖片用戶認證過程來實現照片和用戶綁定。為了改善體驗,我們還使用AI識別用戶進入退出試衣鏡行為,一個用戶為一個session。同時增加用戶手勢識別等功能,以方便用戶更換衣服實時查看用戶試衣效果。

 

微信場景二維碼

為了滿足用戶渠道推廣分析的需要,微信公眾平台提供了動態生成帶參數二維碼的接口。用戶掃描后,公眾號后台程序可以接收到事件推送。

場景二維碼分別兩類:

二維碼:

有過期時間,最大為1800秒,但能夠生成較多數量

永久二維碼:

無過期時間,數量較少(目前參數只支持1--100000)。

兩種二維碼分別適用於帳號綁定、用戶來源統計等場景。考慮到照片數量繁多,我們使用臨時二維碼實現,永久綁定通過用戶微信認證綁定實現。

用戶掃描帶場景值二維碼時,后台服務器可接收到如下兩種事件:

如果用戶還未關注公眾號,掃碼后則用戶跳轉到關注也面,關注后微信會將帶場景值關注事件推送給開發者,此時開發者可主動推送剛剛的照片Url, 在URL請求用戶授權,進而將用戶信息和照片信息綁定,進而形成永久綁定。

如果用戶已經關注公眾號,在用戶掃描后會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。

獲取帶參數的二維碼的過程包括兩步:首先創建二維碼ticket,然后憑借ticket到指定URL換取二維碼,這些操作都需要通過后台服務器實現。

 

創建二維碼ticket
每次創建二維碼ticket需要提供一個開發者自行設定的參數(scene_id),分別介紹臨時二維碼和永久二維碼的創建二維碼ticket過程。

臨時二維碼請求說明
http請求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST數據格式:json
POST數據例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST數據創建字符串形式的二維碼參數:
{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
永久二維碼請求說明
http請求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST數據格式:json
POST數據例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST數據創建字符串形式的二維碼參數:
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
參數說明

參數 說明
expire_seconds 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天),此字段如果不填,則默認有效期為30秒。
action_name 二維碼類型,QR_SCENE為臨時的整型參數值,QR_STR_SCENE為臨時的字符串參數值,QR_LIMIT_SCENE為永久的整型參數值,QR_LIMIT_STR_SCENE為永久的字符串參數值
action_info 二維碼詳細信息
scene_id 場景值ID,臨時二維碼時為32位非0整型,永久二維碼時最大值為100000(目前參數只支持1--100000)
scene_str 場景值ID(字符串形式的ID),字符串類型,長度限制為1到64
返回說明

正確的Json返回結果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==","expire_seconds":60,"url":"http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI"}
參數 說明
ticket 獲取的二維碼ticket,憑借此ticket可以在有效時間內換取二維碼。
expire_seconds 該二維碼有效時間,以秒為單位。 最大不超過2592000(即30天)。
url 二維碼圖片解析后的地址,開發者可根據該地址自行生成需要的二維碼圖片

通過ticket換取二維碼

獲取二維碼ticket后,開發者可用ticket換取二維碼圖片。請注意,本接口無須登錄態即可調用。

請求說明

HTTP GET請求(請使用https協議)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
提醒:TICKET記得進行UrlEncode
返回說明

ticket正確情況下,http 返回碼是200,是一張圖片,可以直接展示或者下載。

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。

 

掃描場景二維碼事件

用戶掃描帶場景值二維碼時,可能推送以下兩種事件:

如果用戶還未關注公眾號,則用戶可以關注公眾號,關注后微信會將帶場景值關注事件推送給開發者。
如果用戶已經關注公眾號,則微信會將帶場景值掃描事件推送給開發者。
關注公眾號事件推送
當用戶在商品主頁中關注公眾號,微信會推送該事件到商戶填寫的URL。推送的內容包括關注用戶的基本信息、時間、關注場景及對應的碼信息。

推送XML示例

<xml>
<ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
<FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
<CreateTime>1433259128</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[scene|keystandard|keystr|extinfo]></EventKey>
</xml>
推送參數說明

參數 說明
ToUserName 商戶的公眾號原始id。
FromUserName 用戶的openid。
CreateTime 消息創建時間(整型)。
MsgType 消息類型,event。
Event 事件類型,subscribe為關注公眾號事件。
EventKey ”分割。①scene表示場景:scanbarcode為掃碼場景,scanimage為掃封面(圖像)場景。②keystandard表示商品編碼標准:barcode為條碼。③keystr表示商品編碼內容。④extinfo表示調用“獲取商品二維碼接口”時傳入的extinfo,為標識參數。

在獲取到該事件時可主動推送帶圖片縮略圖的消息,點擊進入我們的頁面或者小程序進一步綁定用戶獲取用戶信息

進入公眾號事件推送
當用戶從商品主頁進入公眾號會話時,微信會推送該事件到商戶填寫的URL。推送的內容包括用戶的基本信息、時間、關注場景及對應的條碼信息。

推送XML示例

<xml>
<ToUserName><![CDATA[gh_fbe8a958756e]]></ToUserName>
<FromUserName><![CDATA[otAzGjrS4AYCmeJM1GhEOcHXXTAo]]></FromUserName>
<CreateTime>1433259128</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[user_scan_product_enter_session]]></Event>
<KeyStandard><![CDATA[ena13]]></KeyStandard>
<KeyStr><![CDATA[6954767461373]]></KeyStr>
<ExtInfo><![CDATA[]]></ExtInfo>
</xml>
推送參數說明

參數 說明
ToUserName 商戶的公眾號原始id。
FromUserName 用戶的openid。
CreateTime 消息創建時間(整型)。
MsgType 消息類型,event。
Event 事件類型,user_scan_product_enter_session為進入公眾號事件。
KeyStandard 商品編碼標准。
KeyStr 商品編碼內容。
ExtInfo 調用“獲取商品二維碼接口”時傳入的extinfo,為標識參數。
后續流程和上面一樣

 

微信公眾號后台服務程序實現

推薦使用webot這個開源框架

新用戶關注事件處理代碼

 

已關注用戶掃描事件處理代碼

 

/**************************************************
* 本文來自CSDN博主"一點碼客",喜歡請頂部點擊關注
* 轉載請標明出處:http://blog.csdn.net/itchosen
***************************************************/
————————————————
版權聲明:本文為CSDN博主「一點碼客」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/itchosen/article/details/78738521


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM