Cet article présente en détail le guide de l'interface de développement ASP.NET WeChat. Le développement de la plate-forme publique WeChat est relativement simple. Les amis intéressés peuvent s'y référer
Une fois que l'utilisateur de la plate-forme publique a soumis les informations, WeChat. le serveur enverra La requête GET va à l'URL renseignée et apporte quatre paramètres :
Le développeur vérifie la requête en vérifiant la signature (il existe des méthodes de vérification ci-dessous). S'il est confirmé que cette requête GET provient du serveur WeChat, veuillez renvoyer le contenu du paramètre echostr tel quel, alors l'accès prendra effet, sinon l'accès échouera.
signature combine le paramètre token renseigné par le développeur avec le paramètre timestamp et le paramètre nonce dans la requête.
Processus de cryptage/vérification :
1. Trier les trois paramètres token, timestamp et nonce par ordre lexicographique
2. Fusionnez les trois chaînes de paramètres en une seule chaîne pour le cryptage sha1
3 Le développeur peut comparer la chaîne cryptée avec la signature.
/// <summary> /// 验证签名 /// </summary> /// <param name="signature"></param> /// <param name="timestamp"></param> /// <param name="nonce"></param> /// <returns></returns> public static bool CheckSignature(String signature, String timestamp, String nonce) { String[] arr = new String[] { token, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典序排序 Array.Sort<String>(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.Length; i++) { content.Append(arr[i]); } String tmpStr = SHA1_Encrypt(content.ToString()); // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信 return tmpStr != null ? tmpStr.Equals(signature) : false; } /// <summary> /// 使用缺省密钥给字符串加密 /// </summary> /// <param name="Source_String"></param> /// <returns></returns> public static string SHA1_Encrypt(string Source_String) { byte[] StrRes = Encoding.Default.GetBytes(Source_String); HashAlgorithm iSHA = new SHA1CryptoServiceProvider(); StrRes = iSHA.ComputeHash(StrRes); StringBuilder EnText = new StringBuilder(); foreach (byte iByte in StrRes) { EnText.AppendFormat("{0:x2}", iByte); } return EnText.ToString(); }
Après l'accès, ce sera un message poussé comme d'habitude lorsqu'un WeChat L'utilisateur envoie un message à un compte public, le serveur WeChat POSTERA le message sur l'URL renseignée.
protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToUpper() == "GET") { // 微信加密签名 string signature = Request.QueryString["signature"]; // 时间戳 string timestamp = Request.QueryString["timestamp"]; // 随机数 string nonce = Request.QueryString["nonce"]; // 随机字符串 string echostr = Request.QueryString["echostr"]; if (WeixinServer.CheckSignature(signature, timestamp, nonce)) { Response.Write(echostr); } } else if (Request.HttpMethod.ToUpper() == "POST") { StreamReader stream = new StreamReader(Request.InputStream); string xml = stream.ReadToEnd(); processRequest(xml); } } /// <summary> /// 处理微信发来的请求 /// </summary> /// <param name="xml"></param> public void processRequest(String xml) { try { // xml请求解析 Hashtable requestHT = WeixinServer.ParseXml(xml); // 发送方帐号(open_id) string fromUserName = (string)requestHT["FromUserName"]; // 公众帐号 string toUserName = (string)requestHT["ToUserName"]; // 消息类型 string msgType = (string)requestHT["MsgType"]; //文字消息 if (msgType == ReqMsgType.Text) { // Response.Write(str); string content = (string)requestHT["Content"]; if(content=="1") { // Response.Write(str); Response.Write(GetNewsMessage(toUserName, fromUserName)); return; } if (content == "2") { Response.Write(GetUserBlogMessage(toUserName, fromUserName)); return; } if (content == "3") { Response.Write(GetGroupMessage(toUserName, fromUserName)); return; } if (content == "4") { Response.Write(GetWinePartyMessage(toUserName, fromUserName)); return; } Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); } else if (msgType == ReqMsgType.Event) { // 事件类型 String eventType = (string)requestHT["Event"]; // 订阅 if (eventType==ReqEventType.Subscribe) { Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,")); } // 取消订阅 else if (eventType==ReqEventType.Unsubscribe) { // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息 } // 自定义菜单点击事件 else if (eventType==ReqEventType.CLICK) { // TODO 自定义菜单权没有开放,暂不处理该类消息 } } else if (msgType == ReqMsgType.Location) { } } catch (Exception e) { } }<pre name="code" class="csharp"> protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToUpper() == "GET") { // 微信加密签名 string signature = Request.QueryString["signature"]; // 时间戳 string timestamp = Request.QueryString["timestamp"]; // 随机数 string nonce = Request.QueryString["nonce"]; // 随机字符串 string echostr = Request.QueryString["echostr"]; if (WeixinServer.CheckSignature(signature, timestamp, nonce)) { Response.Write(echostr); } } else if (Request.HttpMethod.ToUpper() == "POST") { StreamReader stream = new StreamReader(Request.InputStream); string xml = stream.ReadToEnd(); processRequest(xml); } } /// <summary> /// 处理微信发来的请求 /// </summary> /// <param name="xml"></param> public void processRequest(String xml) { try { // xml请求解析 Hashtable requestHT = WeixinServer.ParseXml(xml); // 发送方帐号(open_id) string fromUserName = (string)requestHT["FromUserName"]; // 公众帐号 string toUserName = (string)requestHT["ToUserName"]; // 消息类型 string msgType = (string)requestHT["MsgType"]; //文字消息 if (msgType == ReqMsgType.Text) { // Response.Write(str); string content = (string)requestHT["Content"]; if(content=="1") { // Response.Write(str); Response.Write(GetNewsMessage(toUserName, fromUserName)); return; } if (content == "2") { Response.Write(GetUserBlogMessage(toUserName, fromUserName)); return; } if (content == "3") { Response.Write(GetGroupMessage(toUserName, fromUserName)); return; } if (content == "4") { Response.Write(GetWinePartyMessage(toUserName, fromUserName)); return; } Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,")); } else if (msgType == ReqMsgType.Event) { // 事件类型 String eventType = (string)requestHT["Event"]; // 订阅 if (eventType==ReqEventType.Subscribe) { Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,")); } // 取消订阅 else if (eventType==ReqEventType.Unsubscribe) { // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息 } // 自定义菜单点击事件 else if (eventType==ReqEventType.CLICK) { // TODO 自定义菜单权没有开放,暂不处理该类消息 } } else if (msgType == ReqMsgType.Location) { } } catch (Exception e) { } }
Ce qui précède est une introduction au contenu pertinent du guide de l'interface de développement ASP.NET WeChat. J'espère que cela sera utile pour. l'étude de tout le monde.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!