公眾號接口
1. 公眾號消息會話
目前公眾號內(nèi)主要有這樣幾類消息服務的類型,分別用于不同的場景。
群發(fā)消息
公眾號可以以一定頻次(訂閱號為每天1次,服務號為每月4次),向用戶群發(fā)消息,包括文字消息、圖文消息、圖片、視頻、語音等。
被動回復消息
在用戶給公眾號發(fā)消息后,微信服務器會將消息發(fā)到開發(fā)者預先在開發(fā)者中心設置的服務器地址(開發(fā)者需要進行消息真實性驗證),公眾號可以在5秒內(nèi)做出回復,可以回復一個消息,也可以回復命令告訴微信服務器這條消息暫不回復。被動回復消息可以設置加密(在公眾平臺官網(wǎng)的開發(fā)者中心處設置,設置后,按照消息加解密文檔來進行處理。其他3種消息的調(diào)用因為是API調(diào)用而不是對請求的返回,所以不需要加解密)。
客服消息
在用戶給公眾號發(fā)消息后的48小時內(nèi),公眾號可以給用戶發(fā)送不限數(shù)量的消息,主要用于客服場景。用戶的行為會觸發(fā)事件推送,某些事件推送是支持公眾號據(jù)此發(fā)送客服消息的,詳見微信推送消息與事件說明文檔。
模板消息
在需要對用戶發(fā)送服務通知(如刷卡提醒、服務預約成功通知等)時,公眾號可以用特定內(nèi)容模板,主動向用戶發(fā)送消息。
2. 公眾號內(nèi)網(wǎng)頁
對于公眾號內(nèi)網(wǎng)頁,提供以下場景接口:
網(wǎng)頁授權(quán)獲取用戶基本信息
通過該接口,可以獲取用戶的基本信息
微信JS-SDK
是開發(fā)者在網(wǎng)頁上通過JavaScript代碼使用微信原生功能的工具包,開發(fā)者可以使用它在網(wǎng)頁上錄制和播放微信語音、監(jiān)聽微信分享、上傳手機本地圖片、拍照等許多能力。
3. 微信開發(fā)者文檔
微信開發(fā)者文檔網(wǎng)址 https://mp.weixin.qq.com/wiki/home/index.html接入微信公眾平臺
接入微信公眾平臺開發(fā),開發(fā)者需要按照如下步驟完成:
填寫服務器配置
驗證服務器地址的有效性
依據(jù)接口文檔實現(xiàn)業(yè)務邏輯
填寫服務器配置
登錄微信公眾平臺官網(wǎng)后,在公眾平臺后臺管理頁面 - 開發(fā)者中心頁,點擊“修改配置”按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發(fā)者用來接收微信消息和事件的接口URL。Token可由開發(fā)者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。EncodingAESKey由開發(fā)者手動填寫或隨機生成,將用作消息體加解密密鑰。
同時,開發(fā)者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交后都會立即生效,請開發(fā)者謹慎填寫及選擇。加解密方式的默認狀態(tài)為明文模式,選擇兼容模式和安全模式需要提前配置好相關加解密代碼,詳情請參考消息體簽名及加解密部分的文檔。
微信公眾號接口只支持80接口。
公眾平臺頁面
利用測試平臺
測試平臺登陸地址 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login配置阿里服務器nginx
在nginx添加以下配置
?
1
vi /etc/nginx/sites-available/default
添加以下配置實現(xiàn)80端口的轉(zhuǎn)發(fā)
?
1
2
3
location /weixin {
proxy_pass http://127.0.0.1:8000;
}
?
1
http://47.95.8.70/weixin
驗證服務器地址的有效性
開發(fā)者提交信息后,微信服務器將發(fā)送GET請求到填寫的服務器地址URL上,GET請求攜帶四個參數(shù):
開發(fā)者通過檢驗signature對請求進行校驗。若確認此次GET請求來自微信服務器,請原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。
校驗流程:
將token、timestamp、nonce三個參數(shù)進行字典序排序
將三個參數(shù)字符串拼接成一個字符串進行sha1加密
開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信
Python代碼實現(xiàn)(以Flask框架為例):
# -*- coding:utf-8 -*-from flask import Flask, request, make_responseimport hashlibimport xmltodictimport timeapp = Flask(__name__)WECHAT_TOKEN = "zhangbiao"@app.route('/weixin', methods=['GET', 'POST'])def wechat(): args = request.args print args signature = args.get('signature') timestamp = args.get('timestamp') nonce = args.get('nonce') echostr = args.get('echostr') # 1. 將token、timestamp、nonce三個參數(shù)進行字典序排序 temp = [WECHAT_TOKEN, timestamp, nonce] temp.sort() # 2. 將三個參數(shù)字符串拼接成一個字符串進行sha1加密 temp = "".join(temp) # sig是我們計算出來的簽名結(jié)果 sig = hashlib.sha1(temp).hexdigest() # 3. 開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信if sig == signature: # 根據(jù)請求方式.返回不同的內(nèi)容 ,如果是get方式,代表是驗證服務器有效性 # 如果POST方式,代表是微服務器轉(zhuǎn)發(fā)給我們的消息if request.method == "GET":return echostrelse:return 'errno', 403if __name__ == '__main__': app.run(host='0.0.0.0',port=8000)
運行上述的代碼后,再點擊提交,測試就會通過
公眾號接收與發(fā)送消息
驗證URL有效性成功后即接入生效,成為開發(fā)者。如果公眾號類型為服務號(訂閱號只能使用普通消息接口),可以在公眾平臺網(wǎng)站中申請認證,認證成功的服務號將獲得眾多接口權(quán)限,以滿足開發(fā)者需求。
此后用戶每次向公眾號發(fā)送消息、或者產(chǎn)生自定義菜單點擊事件時,開發(fā)者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件,然后開發(fā)者可以依據(jù)自身業(yè)務邏輯進行響應,例如回復消息等。
用戶向公眾號發(fā)送消息時,公眾號方收到的消息發(fā)送者是一個OpenID,是使用用戶微信號加密后的結(jié)果,每個用戶對每個公眾號有一個唯一的OpenID。
接收普通消息
當普通微信用戶向公眾賬號發(fā)消息時,微信服務器將POST消息的XML數(shù)據(jù)包到開發(fā)者填寫的URL上。
微信服務器在五秒內(nèi)收不到響應會斷掉連接,并且重新發(fā)起請求,總共重試三次。假如服務器無法保證在五秒內(nèi)處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發(fā)起重試。
各消息類型的推送使用XML數(shù)據(jù)包結(jié)構(gòu),如:
?
1
2
3
4
5
6
7
8
<xml>
<ToUserName><![CDATA[gh_866835093fea]]></ToUserName>
<FromUserName><![CDATA[ogdotwSc_MmEEsJs9-ABZ1QL_4r4]]></FromUserName>
<CreateTime>1478317060</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
<MsgId>6349323426230210995</MsgId>
</xml>
注意:<![CDATA 與 ]]> 括起來的數(shù)據(jù)不會被xml解析器解析。
xmltodict 模塊基本用法
xmltodict 是一個用來處理xml數(shù)據(jù)的很方便的模塊。包含兩個常用方法parse和unparse
1. parse
xmltodict.parse()方法可以將xml數(shù)據(jù)轉(zhuǎn)為python中的dict字典數(shù)據(jù):
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
>>> import xmltodict
>>> xml_str = """
... <xml>
... <ToUserName><![CDATA[gh_866835093fea]]></ToUserName>
... <FromUserName><![CDATA[ogdotwSc_MmEEsJs9-ABZ1QL_4r4]]></FromUserName>
... <CreateTime>1478317060</CreateTime>
... <MsgType><![CDATA[text]]></MsgType>
... <Content><![CDATA[你好]]></Content>
... <MsgId>6349323426230210995</MsgId>
... </xml>
... """
>>>
>>> xml_dict = xmltodict.parse(xml_str)
>>> type(xml_dict)
<class 'collections.OrderedDict'> # 類字典型,可以按照字典方法操作
>>>
>>> xml_dict
OrderedDict([(u'xml', OrderedDict([(u'ToUserName', u'gh_866835093fea'), (u'FromUserName', u'ogdotwSc_MmEEsJs9-ABZ1QL_4r4'), (u'CreateTime', u'1478317060'), (u'MsgType', u'text'), (u'Content', u'\u4f60\u597d'), (u'MsgId', u'6349323426230210995')]))])
>>>
>>> xml_dict['xml']
OrderedDict([(u'ToUserName', u'gh_866835093fea'), (u'FromUserName', u'ogdotwSc_MmEEsJs9-ABZ1QL_4r4'), (u'CreateTime', u'1478317060'), (u'MsgType', u'text'), (u'Content', u'\u4f60\u597d'), (u'MsgId', u'6349323426230210995')])
>>>
>>> for key, val in xml_dict['xml'].items():
... print key, "=", val
...
ToUserName = gh_866835093fea
FromUserName = ogdotwSc_MmEEsJs9-ABZ1QL_4r4
CreateTime = 1478317060
MsgType = text
Content = 你好
MsgId = 6349323426230210995
>>>
2. unparse
xmltodict.unparse()方法可以將字典轉(zhuǎn)換為xml字符串:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
xml_dict = {
"xml": {
"ToUserName" : "gh_866835093fea",
"FromUserName" : "ogdotwSc_MmEEsJs9-ABZ1QL_4r4",
"CreateTime" : "1478317060",
"MsgType" : "text",
"Content" : u"你好",
"MsgId" : "6349323426230210995",
}
}
>>> xml_str = xmltodict.unparse(xml_dict)
>>> print xml_str
<?xml version="1.0" encoding="utf-8"?>
<xml><FromUserName>ogdotwSc_MmEEsJs9-ABZ1QL_4r4</FromUserName><MsgId>6349323426230210995</MsgId><ToUserName>gh_866835093fea</ToUserName><Content>你好</Content><MsgType>text</MsgType><CreateTime>1478317060</CreateTime></xml>
>>>
>>> xml_str = xmltodict.unparse(xml_dict, pretty=True) # pretty表示友好輸出
>>> print xml_str
<?xml version="1.0" encoding="utf-8"?>
<xml>
<FromUserName>ogdotwSc_MmEEsJs9-ABZ1QL_4r4</FromUserName>
<MsgId>6349323426230210995</MsgId>
<ToUserName>gh_866835093fea</ToUserName>
<Content>你好</Content>
<MsgType>text</MsgType>
<CreateTime>1478317060</CreateTime>
</xml>
>>>
普通消息類別
文本消息
圖片消息
語音消息
視頻消息
小視頻消息
地理位置消息
鏈接消息
文本消息
?
1
2
3
4
5
6
7
8
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
被動回復消息
當用戶發(fā)送消息給公眾號時(或某些特定的用戶操作引發(fā)的事件推送時),會產(chǎn)生一個POST請求,開發(fā)者可以在響應包中返回特定XML結(jié)構(gòu),來對該消息進行響應(現(xiàn)支持回復文本、圖片、圖文、語音、視頻、音樂)。嚴格來說,發(fā)送被動響應消息其實并不是一種接口,而是對微信服務器發(fā)過來消息的一次回復。
假如服務器無法保證在五秒內(nèi)處理并回復,必須做出下述回復,這樣微信服務器才不會對此作任何處理,并且不會發(fā)起重試(這種情況下,可以使用客服消息接口進行異步回復),否則,將出現(xiàn)嚴重的錯誤提示。詳見下面說明:
(推薦方式)直接回復success
直接回復空串(指字節(jié)長度為0的空字符串,而不是XML結(jié)構(gòu)體中content字段的內(nèi)容為空)
一旦遇到以下情況,微信都會在公眾號會話中,向用戶下發(fā)系統(tǒng)提示“該公眾號暫時無法提供服務,請稍后再試”:
開發(fā)者在5秒內(nèi)未回復任何內(nèi)容
開發(fā)者回復了異常數(shù)據(jù),比如JSON數(shù)據(jù)等
回復的消息類型
文本消息
圖片消息
語音消息
視頻消息
音樂消息
圖文消息
回復文本消息
?
1
2
3
4
5
6
7
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
代碼實現(xiàn)
我們現(xiàn)在來實現(xiàn)一個針對文本消息的收發(fā)程序。實現(xiàn)的業(yè)務邏輯類似與“鸚鵡學舌”,粉絲發(fā)什么內(nèi)容,我們就傳回給粉絲什么內(nèi)容。
tasks.py
有趣的表情
QQ表情
實際是字符串轉(zhuǎn)義,如 /::D、/::P 等,仍屬于文本信息。
emoji
繪文字(日語:絵文字/えもじ emoji)是日本在無線通信中所使用的視覺情感符號,繪意指圖形,文字則是圖形的隱喻,可用來代表多種表情,如笑臉表示笑、蛋糕表示食物等。
在NTTDoCoMo的i-mode系統(tǒng)電話系統(tǒng)中,繪文字的尺寸是12x12 像素,在傳送時,一個圖形有2個字節(jié)。Unicode編碼為E63E到E757,而在Shift-JIS編碼則是從F89F到F9FC?;镜睦L文字共有176個符號,在C-HTML4.0的編程語言中,則另增添了76個情感符號。
最早由栗田穰崇(Shigetaka Kurita)創(chuàng)作,并在日本網(wǎng)絡及手機用戶中流行。
自蘋果公司發(fā)布的iOS 5輸入法中加入了emoji后,這種表情符號開始席卷全球,目前emoji已被大多數(shù)現(xiàn)代計算機系統(tǒng)所兼容的Unicode編碼采納,普遍應用于各種手機短信和社交網(wǎng)絡中。
本質(zhì)是Unicode字符,也屬于文本消息。
自定表情
微信的自定義表情不是文本,也不是圖片,而是一種不支持的格式,微信未提供處理此消息的接口。
接收其他普通消息
接收圖片消息
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[this is a url]]></PicUrl>
<MediaId><![CDATA[media_id]]></MediaId>
<MsgId>1234567890123456</MsgId>
</xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方賬號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgTypeimage
PicUrl圖片鏈接
MediaId圖片消息媒體id,可以調(diào)用多媒體文件下載接口拉取數(shù)據(jù)。
MsgId消息id,64位整型
接收視頻消息
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>
接收小視頻消息
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[shortvideo]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>
接收語音消息
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<MsgId>1234567890123456</MsgId>
</xml>
請注意,開通語音識別后,用戶每次發(fā)送語音給公眾號時,微信會在推送的語音消息XML數(shù)據(jù)包中,增加一個Recognition字段(注:由于客戶端緩存,開發(fā)者開啟或者關閉語音識別功能,對新關注者立刻生效,對已關注用戶需要24小時生效。開發(fā)者可以重新關注此賬號進行測試)。開啟語音識別后的語音XML數(shù)據(jù)包如下:
?
1
2
3
4
5
6
7
8
9
10
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<Format><![CDATA[Format]]></Format>
<Recognition><![CDATA[騰訊微信團隊]]></Recognition>
<MsgId>1234567890123456</MsgId>
</xml>
多出的字段中,F(xiàn)ormat為語音格式,一般為amr,Recognition為語音識別結(jié)果(把語音轉(zhuǎn)換成了文字),使用UTF8編碼。
回復其他普通消息
回復圖片消息
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[media_id]]></MediaId>
</Image>
</xml>
回復視頻消息
?
1
2
3
4
5
6
7
8
9
10
11
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<Video>
<MediaId><![CDATA[media_id]]></MediaId>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
</Video>
</xml>
回復用戶語音消息識別(代碼實現(xiàn))
?
1
把語音的消息轉(zhuǎn)換成文字返回
voice.py
關注/取消關注事件
用戶在關注與取消關注公眾號時,微信會把這個事件推送到開發(fā)者填寫的URL。
微信服務器在五秒內(nèi)收不到響應會斷掉連接,并且重新發(fā)起請求,總共重試三次。
假如服務器無法保證在五秒內(nèi)處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發(fā)起重試。
?
1
2
3
4
5
6
7
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>
關注成功后,返回感謝關注
focus.py
獲取接口調(diào)用憑據(jù)
access_token是公眾號的全局唯一票據(jù),公眾號調(diào)用各接口時都需使用access_token。開發(fā)者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。
接口說明
請求方法
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET參數(shù)說明
錯誤時微信會返回JSON數(shù)據(jù)包如下:
?
1
2
3
4
{
"errcode":40013,
"errmsg":"invalid appid"
}
代碼實現(xiàn)
gentate_token
帶參數(shù)的二維碼
為了滿足用戶渠道推廣分析和用戶賬號綁定等場景的需要,公眾平臺提供了生成帶參數(shù)二維碼的接口。使用該接口可以獲得多個帶不同場景值的二維碼,用戶掃描后,公眾號可以接收到事件推送。
目前有2種類型的二維碼:
臨時二維碼,是有過期時間的,最長可以設置為在二維碼生成后的30天(即2592000秒)后過期,但能夠生成較多數(shù)量。臨時二維碼主要用于賬號綁定等不要求二維碼永久保存的業(yè)務場景
永久二維碼,是無過期時間的,但數(shù)量較少(目前為最多10萬個)。永久二維碼主要用于適用于賬號綁定、用戶來源統(tǒng)計等場景。
獲取帶參數(shù)的二維碼的過程包括兩步,首先創(chuàng)建二維碼ticket,然后憑借ticket到指定URL換取二維碼。
創(chuàng)建二維碼ticket
每次創(chuàng)建二維碼ticket需要提供一個開發(fā)者自行設定的參數(shù)(scene_id),分別介紹臨時二維碼和永久二維碼的創(chuàng)建二維碼ticket過程。
臨時二維碼請求說明
?
1
2
3
4
http請求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST數(shù)據(jù)格式:json
POST數(shù)據(jù)例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
永久二維碼請求說明
?
1
2
3
4
5
6
http請求方式: POST
URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
POST數(shù)據(jù)格式:json
POST數(shù)據(jù)例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者也可以使用以下POST數(shù)據(jù)創(chuàng)建字符串形式的二維碼參數(shù):
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "123"}}}
返回說明
正確的Json返回結(jié)果:
?
1
{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}
錯誤的Json返回示例:
?
1
{"errcode":40013,"errmsg":"invalid appid"}
通過ticket換取二維碼
獲取二維碼ticket后,開發(fā)者可用ticket換取二維碼圖片。請注意,本接口無須登錄態(tài)即可調(diào)用。
請求說明
?
1
2
HTTP GET請求(請使用https協(xié)議)
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
代碼實例
get_qrcode.py
掃描帶參數(shù)二維碼
用戶掃描帶場景值二維碼時,可能推送以下兩種事件:
如果用戶還未關注公眾號,則用戶可以關注公眾號,關注后微信會將帶場景值關注事件推送給開發(fā)者。
如果用戶已經(jīng)關注公眾號,則微信會將帶場景值掃描事件推送給開發(fā)者。
1. 用戶未關注時,進行關注后的事件推送
推送XML數(shù)據(jù)包示例:
?
1
2
3
4
5
6
7
8
<xml><ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_123123]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方賬號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType消息類型,event
Event事件類型,subscribe
EventKey事件KEY值,qrscene_為前綴,后面為二維碼的參數(shù)值
Ticket二維碼的ticket,可用來換取二維碼圖片
2. 用戶已關注時的事件推送
推送XML數(shù)據(jù)包示例:
?
1
2
3
4
5
6
7
8
9
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[SCENE_VALUE]]></EventKey>
<Ticket><![CDATA[TICKET]]></Ticket>
</xml>
參數(shù)描述
ToUserName開發(fā)者微信號
FromUserName發(fā)送方賬號(一個OpenID)
CreateTime消息創(chuàng)建時間 (整型)
MsgType消息類型,event
Event事件類型,SCAN
EventKey事件KEY值,是一個32位無符號整數(shù),即創(chuàng)建二維碼時的二維碼scene_id
Ticket二維碼的ticket,可用來換取二維碼圖片
代碼
View Code
生成自定義菜單
Menu.py