基於微信公眾測試平台進行開發測試,並在網上找了很多資料再此聲明(如有占用代碼請聯系以備修改),由於比較雜不一一說明謝謝他們的努力。供有需要的人參考。
首先是實現微信的認證,登錄微信測試平台我們可以看到系統自動給了一個微信號,測試號信息:appID和appsecret。
在接口配置信息中,有URL和Token 二個文本框,我們分別在URL上寫上我們的服務器測試文件的地址,采用的是一般處理程序類似(http://yourdomain.com/valided.ashx).
Token的值我們可以自定義。
然后我們新建一個項目,新建valided.ashx文件用於驗證。
//在ProcessRequest方法里面寫上如下代碼: if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST") { //do something }else{ AuthWechat(); //采用GET方法判斷進入驗證方法 } ///認證微信 private void AuthWechat() { string token = "testweixin";//Token的值 string echoString = HttpContext.Current.Request.QueryString["echoStr"]; string signature = HttpContext.Current.Request.QueryString["signature"]; string timestamp = HttpContext.Current.Request.QueryString["timestamp"]; string nonce = HttpContext.Current.Request.QueryString["nonce"]; if (CheckSignature(token, signature, timestamp, nonce)) { if (!string.IsNullOrEmpty(echoString)) { HttpContext.Current.Response.Write(echoString); HttpContext.Current.Response.End(); } } } /// <summary> /// 對微信傳入參數進行封裝到數組,拼接字符串,進行加密操作 /// </summary> private bool CheckSignature(string token, string signature, string timestamp, string nonce) { string[] ArrTmp = { token, timestamp, nonce };//將參數放進數組 Array.Sort(ArrTmp);//對數組進行排序 string tmpStr = string.Join("", ArrTmp);//將數組進行拼接 ///對拼接后的字符串進行加密操作 // tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr=Membership.CreateUser(tmpStr, "SHA1").ToString(); //轉換成小寫形式 tmpStr = tmpStr.ToLower(); //比對成功返回 if (tmpStr == signature) { return true; } else { return false; } }
上圖中的相關參數說明:
描述 | |
---|---|
signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
參考官方文檔地址解析:驗證消息真實性
將上面的代碼保存后我們編譯下然后發布到服務器,在剛剛的測試號里面寫好發布對應的地址,點擊保存的時候系統會提示你是否配置成功,有時可能是網絡原因會提示配置失敗,建議多試幾次,如果沒有問題一般都會提示配置成功!這就實現了驗證和簽名。完成了重要的一步為其他接口的開發和實現奠定了基礎。