微信開發(準備工作簡版)
1.準備工作
1.1 首先需要一個url地址,用來接收相關的數據
1.2 註冊開發者賬號進行開發(可用公眾平臺測試賬號)
1.3 appid,第三方用戶唯一憑證(你的AppID)
1.4 secret,第三方用戶唯一憑證密鑰,即Appsecret
1.3 需要access_token,access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。access_token的存儲至少要保留512個字符空間。access_token的有效期為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。
2.獲取相關數據、配置、驗證狀態
2.1獲取
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的Appsecret 來獲取
2.2 驗證服務器地址的有效性(確保信息來源為微信服務器)
2.2.1將token、timestamp、nonce進行字典序排序
2.2.2將三個參數拼成一個字符串,並進行sha1加密
2.2.3開發者獲得加密後的字符串可與signature對比,進行驗證該請求來源於微信,如果驗證結果為相等,則請返回echostr字符串、
3.相關的下載地址
3.1多媒體文件下載地址
http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
1)ACCESS_TOKE:你獲取的access_token
2)MEDIA_ID:媒體文件ID
4.開始開發——用戶通過post請求發送XMl數據包到Url地址
通用XML參數:
參數 |
描述 |
ToUserName |
開發者微信號 |
FromUserName |
發送方帳號(一個OpenID) |
CreateTime |
消息創建時間 (整型) |
MsgType |
消息類型(text、image、voice) |
MsgId |
消息id,64位整型 |
4.1獲取文本信息
XML格式:
<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>
參數 |
描述 |
MsgType |
text |
Content |
為用戶所發送的消息 |
4.2獲取圖片信息
XML數據格式:
<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>
參數 |
描述 |
MsgType |
image |
PicUrl |
可根據該圖片地址查看該圖片 |
MediaId |
圖片消息媒體id,可以調用多媒體文件下載接口拉取數據。 |
4.3獲取語音消息
XML數據格式:
<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>
參數 |
描述 |
MsgType |
語音為voice |
MediaId |
語音消息媒體id,可以調用多媒體文件下載接口拉取數據。 |
Format |
語音格式,如amr,speex等 |
4.4獲取視頻消息
XML數據格式:
<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>
參數 |
描述 |
MsgType |
語音為video |
MediaId |
視頻消息媒體id,可以調用多媒體文件下載接口拉取數據。 |
ThumbMediaId |
視頻消息縮略圖的媒體id,可以調用多媒體文件下載接口拉取數據. |
4.5獲取小視頻的消息
XML數據格式:
<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>
參數 |
描述 |
MsgType |
小視頻為shortvideo, |
MediaId |
視頻消息媒體id,可以調用多媒體文件下載接口拉取數據。 |
ThumbMediaId |
視頻消息縮略圖的媒體id,可以調用多媒體文件下載接口拉取數據。 |
4.6獲取地理位置消息
XML數據格式:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>
參數 |
描述 |
MsgType |
location |
Location_X |
地理位置維度 |
Location_Y |
地理位置經度 |
Scale |
地圖縮放大小 |
Label |
地理位置信息 |
4.7獲取連接消息
XML數據格式:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[公眾平臺官網鏈接]]></Title>
<Description><![CDATA[公眾平臺官網鏈接]]></Description>
<Url><![CDATA[url]]></Url>
<MsgId>1234567890123456</MsgId>
</xml>
參數 |
描述 |
MsgType |
消息類型,link |
Title |
消息標題 |
Description |
消息描述 |
Url |
消息鏈接 |
5.消息排重(響應微信服務器)
微信在轉發消息到我們後臺服務的時候,如果5秒鐘之內沒有返回數據,微信就會立即重新轉發消息,如此三次。如果三次過後仍然沒有返回數據,則微信公眾號會出現“該公眾號暫時無法提供服務,請稍後再試的錯誤”,為了避免微信重復發起消息,也為了避免數據重復導致數據混亂,對微信轉發的消息進行排重處理:
1.新建類BaseMsg,有三個屬性分別是FromUser,MsgFlag,CreateTime。
2.創建個靜態列表_queue,用來存儲消息列表,列表的類型是List<BaseMsg>.
3.在處理微信消息體前,首先判斷列表是否實例化,如果沒有實例化則實例化,否則判斷列表的長度是否大於或等於50(這個可以自定義,用處就是微信並發的消息量),如果大於或等於50,則保留20秒內未響應的消息(5秒重試一次,總共重試3次,就是15秒,保險起見寫20秒)。
4.獲取當前消息體的消息類型,並根據_queue判斷當前消息是否已經請求了。如果是事件則返回空字符串。如果是普通消息則保存MsgFlag。
微信開發(準備工作簡版)