文章出處
文章列表
最近做對接微信閃開發票-微信發票名片,里面有個接收用戶提交抬頭接口是微信推送事件到公眾號后臺,該事件將發送至開發者填寫的URL(登錄公眾平臺進入【開發者中心設置】)。 開發者可通過事件推送完成數據統計、用戶身份識別等操作。
微信服務器在五秒內收不到響應會斷掉連接,并且重新發起請求,總共重試三次。關于重試的消息排重,推薦使用FromUserName + CreateTime 排重。假如服務器無法保證在五秒內處理并回復,可以直接回復空串,微信服務器不會對此作任何處理,并且不會發起重試。
作為一名微信公眾號開發者,別人進入你的微信公眾號,肯定會看見某些網頁,或者給你發某些信息,你需要實時自動回復,所以你需要一個24小時為用戶服務的服務器。我們所要填寫的url就是你提供的服務器的地址,前提是這個服務器的地址你要能夠訪問,且能夠控制。而token是用來驗證的。
/// <summary> /// 微信用戶提交發票抬頭-事件推送頁面 /// </summary> public class WechartTitleController : Controller { // GET: WechartTitle public void Index() { #region 驗證token string echoString = Request.QueryString["echoStr"]; string signature = Request.QueryString["signature"]; string timestamp = Request.QueryString["timestamp"]; string nonce = Request.QueryString["nonce"]; if (CheckSignature()) { if (!string.IsNullOrEmpty(echoString)) { Response.Write(echoString); } } #endregion } private bool CheckSignature() { string Token = "12345678"; string signature = Request.QueryString["signature"]; string timestamp = Request.QueryString["timestamp"]; string nonce = Request.QueryString["nonce"]; string[] ArrTmp = { Token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } } }
checkSignature是驗證簽名的,當開發者在公眾平臺提交URL和token時,微信服務器將發送GET請求到填寫的URL上,并且帶上四個參數:
參數描述
signature 微信加密簽名
timestamp 時間戳
nonce 隨機數
echostr 隨機字符串
開發者在自己的網頁內請公眾平臺的請求做簽名驗證,通過之后輸出echostr字段即可。至于具體的驗簽規則,可以看checkSignature的實現,這里不再贅述。
文章列表
全站熱搜