1.微信公眾號注冊
到微信公眾平台(https://mp.weixin.qq.com/)注冊公眾號。
公眾號有“服務號”,“訂閱號”,“企業號”三種類別,“服務號”主要面向企業和個人,“訂閱號”主要面向組織和個人。
申請完畢后,登陸公眾號,進入管理界面,公眾號對應的二維碼如下所示:
2.開發服務器配置
URL是開發者用來接收微信消息和事件的接口URL
Token可由開發者任意填寫,用作生成簽名
EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密秘鑰
3.驗證開發服務器地址有效性
開發者提交信息后,微信服務器將發送GET請求到開發服務器URL,GET請求有四個參數:
signature:微信加密簽名
signature結合了token,timestamp,nonce三個參數
timestamp:時間戳
nonce:隨機數
echostr:隨機字符串
開發者通過檢驗signature對請求進行檢驗,若檢驗成功,接入生效,否則接入失敗
加密/檢驗流程如下:
1)將token,timestamp,nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者獲得加密后的字符串雨signature對比
檢驗signature的C#示例代碼如下:
wxapi.ashx
<%@ WebHandler Language="C#" Class="wxapi" %> using System; using System.Web; using System.IO; using System.Text; using System.Web.Security; public class wxapi : IHttpHandler { public void ProcessRequest (HttpContext context) { string postString = string.Empty; Auth(); //微信接入的測試 } /// <summary> /// 成為開發者的第一步,驗證並相應服務器的數據 /// </summary> private void Auth() { string token = "weixin";//從配置文件獲取Token if (string.IsNullOrEmpty(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> public 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 = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } } public bool IsReusable { get { return false; } } }