


.Net implémente l'interface de développement de la plate-forme publique WeChat ? réponse à l'information ?
Feb 24, 2017 pm 05:12 PMPour chaque requête POST, le développeur renvoie une structure XML spécifique dans le package de réponse (Get) pour répondre au message (prend désormais en charge le texte de réponse, les images, les graphiques, la voix, la vidéo, la musique). Veuillez noter que lorsque vous répondez à des messages multimédias tels que des images, vous devez au préalable télécharger des fichiers multimédias sur le serveur WeChat. Seuls les comptes de service certifiés sont pris en charge.
Aujourd'hui, je vais parler des trois suivants
1. Suivre la réponse
2. Réponse automatique
3. 1 , suivez la réponse, réponse automatique par défaut
La réponse dite de suivi est l'information que WeChat renvoie à l'utilisateur après avoir cliqué sur le bouton de suivi lorsque le compte officiel est trouvé. La méthode de mise en ?uvre spécifique
<.> Automatiquement La réponse par défaut est le message auquel le système répondra par défaut quel que soit le message que vous envoyez, s'il n'y a pas de traitement particulier. La réception et l'envoi d'informations depuis WeChat sont tous au format XML, qui sont spécifiquement expliqués dans les documents de développement. Parlons maintenant de la fa?on de mettre en ?uvre le traitement et la réponse des informations WeChat. 1. Enregistrez d'abord les informations de réponse prédéfinies dans la table de la base de donnéesla page wechatapi.aspx traite les informations suivantes
CREATE TABLE [dbo].[w_reply]( [reply_id] [int] IDENTITY(1,1) NOT NULL, [reply_text] [varchar](max) NULL, [reply_type] [varchar](50) NULL, [article_id] [int] NULL, [wechat_id] [int] NULL, [reply_fangshi] [int] NULL, CONSTRAINT [PK_w_reply] PRIMARY KEY CLUSTERED ( [reply_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO2. Recevez le message envoyé par WeChat Message
3. Message de réponse
#region 接收微信消息 /// <summary> /// 接收微信信息 /// </summary> private void RequestMsg() { //接收信息流 Stream requestStream = System.Web.HttpContext.Current.Request.InputStream; byte[] requestByte = new byte[requestStream.Length]; requestStream.Read(requestByte, 0, (int)requestStream.Length); //轉(zhuǎn)換成字符串 string requestStr = Encoding.UTF8.GetString(requestByte); if (!string.IsNullOrEmpty(requestStr)) { //封裝請求類到xml文件中 XmlDocument requestDocXml = new XmlDocument(); requestDocXml.LoadXml(requestStr); XmlElement rootElement = requestDocXml.DocumentElement; XmlNode MsgType = rootElement.SelectSingleNode("MsgType"); //將XML文件封裝到實體類requestXml中 RequestXml requestXml = new RequestXml(); requestXml.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;//開發(fā)者微信號 requestXml.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;//發(fā)送方微信號 requestXml.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;//消息發(fā)送信息 requestXml.MsgType = MsgType.InnerText; //獲取接收信息的類型 switch (requestXml.MsgType) { //接收普通信息 case "text"://文本信息 requestXml.Content = rootElement.SelectSingleNode("Content").InnerText; break; case "image"://圖片信息 requestXml.PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText; break; case "location"://地理位置信息 requestXml.Location_X = rootElement.SelectSingleNode("Location_X").InnerText; requestXml.Location_Y = rootElement.SelectSingleNode("Location_Y").InnerText; break; //接收事件推送 //大概包括有:關(guān)注/取消關(guān)注事件、掃描帶參數(shù)二維碼事件、上報地理位置事件、自定義菜單事件、點擊菜單拉取消息時的事件推送、點擊菜單跳轉(zhuǎn)鏈接時的事件推送 case "event": requestXml.Event = rootElement.SelectSingleNode("Event").InnerText; requestXml.EventKey = rootElement.SelectSingleNode("EventKey").InnerText; break; } string selday = "0"; int hh = selday == "0" ? 60 : int.Parse(selday) * 24 * 60; //將發(fā)送方和接收方寫入cookie中,后期使用 CookieHelper.WriteCookie("WeChatFrom", "ToUserName", requestXml.ToUserName, hh); CookieHelper.WriteCookie("WeChatFrom", "FromUserName", requestXml.FromUserName, hh); //回復消息 ResponseMsg(requestXml); } } #endregion 接收微信消息
temps de chargement de wechatapi.aspx
#region 回復消息(微信信息返回) /// <summary> /// 回復消息(微信信息返回) /// </summary> /// <param name="weixinXML"></param> private void ResponseMsg(RequestXml requestXml) { string resXml = ""; string WeChat_Key = Request.QueryString["key"]; try { DataTable dtWeChat = wechatdal.GetList("wechat_key='" + WeChat_Key + "'").Tables[0]; if (dtWeChat.Rows.Count > 0) { replyset.User_ID = dtWeChat.Rows[0]["user_id"].ToString(); replyset.WeChat_ID = dtWeChat.Rows[0]["wechat_id"].ToString(); replyset.WeChat_Type = dtWeChat.Rows[0]["wechat_type"].ToString(); replyset.WeChat_Name = dtWeChat.Rows[0]["wechat_name"].ToString(); switch (requestXml.MsgType) { //當收到文本信息的時候回復信息 case "text": resXml = replyset.GetKeyword(requestXml.FromUserName, requestXml.ToUserName, requestXml.Content); break; //當接收推送事件時回復的信息 case "event": switch (requestXml.Event) { //關(guān)注的時候回復信息 case "subscribe": resXml = replyset.GetSubscribe(requestXml.FromUserName, requestXml.ToUserName); break; //自定義菜單的時候回復信息 case "CLICK": resXml = replyset.GetMenuClick(requestXml.FromUserName, requestXml.ToUserName, requestXml.EventKey); break; } break; } } } catch (Exception ex) { Writebug("異常:" + ex.Message + "Struck:" + ex.StackTrace.ToString()); } //發(fā)送xml格式的信息到微信中 Response.Write(resXml); Response.End(); } #endregion 回復消息(微信信息返回)
reply.cs
protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod.ToLower() == "post") { RequestMsg(); } else { //微信通過get請求驗證api接口 CheckWeChat(); } }
2 . Réponse par mot-clé
public class replyset { public string hostUrl = "http://" + HttpContext.Current.Request.Url.Authority; //域名 public string upfileurl = "http://file.api.weixin.qq.com/cgi-bin/media/upload"; public string baiduImg = "http://api.map.baidu.com/staticimage?center={0},{1}&width=700&height=300&zoom=11"; public string User_ID = ""; public string WeChat_ID = ""; public string WeChat_Type = ""; public string WeChat_Name = ""; w_caidan_dal caidandal = new w_caidan_dal(); w_reply_dal replydal = new w_reply_dal(); w_article_dal articledal = new w_article_dal(); w_keyword_dal keyworddal = new w_keyword_dal(); w_vlimg_dal vlimgdal = new w_vlimg_dal(); w_vlimg_model vlimgmodel = new w_vlimg_model(); w_images_dal imagesdal = new w_images_dal(); common wxCommand = new common(); JsonOperate JsonOperate = new JsonOperate(); JavaScriptSerializer Jss = new JavaScriptSerializer(); public replyset() { } #region 關(guān)注回復 /// <summary> /// 關(guān)注的時候回復 /// </summary> /// <param name="FromUserName"></param> /// <param name="ToUserName"></param> /// <returns></returns> public string GetSubscribe(string FromUserName, string ToUserName) { string resXml = ""; string sqlWhere = !string.IsNullOrEmpty(WeChat_ID) ? "WeChat_ID=" + WeChat_ID + " and reply_fangshi=2" : ""; DataTable dtSubscribe = replydal.GetRandomList(sqlWhere, "1").Tables[0]; if (dtSubscribe.Rows.Count > 0) { string article_id = dtSubscribe.Rows[0]["article_id"].ToString(); string reply_type = dtSubscribe.Rows[0]["reply_type"].ToString(); string reply_text = dtSubscribe.Rows[0]["reply_text"].ToString(); if (reply_type == "text") { resXml = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + reply_text + "]]></Content><FuncFlag>0</FuncFlag></xml>"; } else { resXml = GetArticle(FromUserName, ToUserName, article_id, User_ID); } } return resXml; } #endregion 關(guān)注回復 #region 自動回復 /// <summary> /// 自動默認回復 /// </summary> /// <param name="FromUserName"></param> /// <param name="ToUserName"></param> /// <param name="WeChat_ID"></param> /// <param name="User_ID"></param> /// <returns></returns> public string GetDefault(string FromUserName, string ToUserName, string WeChat_ID, string User_ID) { string resXml = ""; string sqlWhere = !string.IsNullOrEmpty(WeChat_ID) ? "WeChat_ID=" + WeChat_ID + " and reply_fangshi=1" : ""; //獲取保存的默認回復設(shè)置信息 DataTable dtDefault = replydal.GetRandomList(sqlWhere, "1").Tables[0]; if (dtDefault.Rows.Count > 0) { string article_id = dtDefault.Rows[0]["article_id"].ToString(); string reply_type = dtDefault.Rows[0]["reply_type"].ToString(); string reply_text = dtDefault.Rows[0]["reply_text"].ToString(); //如果選擇的是文本 if (reply_type == "text") { resXml = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + reply_text + "]]></Content><FuncFlag>0</FuncFlag></xml>"; } else { //返回素材(圖文列表) resXml = GetArticle(FromUserName, ToUserName, article_id, User_ID); } } return resXml; } #endregion 默認回復 #region 關(guān)鍵字回復 /// <summary> /// 關(guān)鍵字回復 /// </summary> /// <param name="FromUserName"></param> /// <param name="ToUserName"></param> /// <param name="Content"></param> /// <returns></returns> public string GetKeyword(string FromUserName, string ToUserName, string Content) { string resXml = ""; string sqlWhere = "wechat_id=" + WeChat_ID + " and keyword_name='" + Content+"'"; DataTable dtKeyword = keyworddal.GetList(sqlWhere).Tables[0]; if (dtKeyword.Rows.Count > 0) { dtKeyword = keyworddal.GetRandomList(sqlWhere, "1").Tables[0]; if (dtKeyword.Rows.Count > 0) { string article_id = dtKeyword.Rows[0]["article_id"].ToString(); string keyword_type = dtKeyword.Rows[0]["keyword_type"].ToString(); string keyword_text = dtKeyword.Rows[0]["keyword_text"].ToString(); switch (keyword_type) { case "text": resXml = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + keyword_text + "]]></Content><FuncFlag>0</FuncFlag></xml>"; break; case "news": resXml = GetArticle(FromUserName, ToUserName, article_id, User_ID); break; } } } else { resXml = GetDefault(FromUserName, ToUserName, WeChat_ID, User_ID); } return resXml; } #endregion 關(guān)鍵字回復 #region 菜單單擊 /// <summary> /// 菜單點擊事件回復信息 /// </summary> /// <param name="FromUserName"></param> /// <param name="ToUserName"></param> /// <param name="EventKey"></param> /// <returns></returns> public string GetMenuClick(string FromUserName, string ToUserName, string EventKey) { string resXml = ""; string sqlWhere = "wechat_id=" + WeChat_ID + " and caidan_key='" + EventKey + "'"; WriteTxt(sqlWhere); try { DataTable dtMenu = caidandal.GetList(sqlWhere).Tables[0]; if (dtMenu.Rows.Count > 0) { string article_id = dtMenu.Rows[0]["article_id"].ToString(); string caidan_retype = dtMenu.Rows[0]["caidan_retype"].ToString(); string caidan_retext = dtMenu.Rows[0]["caidan_retext"].ToString(); switch (caidan_retype) { case "text": resXml = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[" + caidan_retext + "]]></Content><FuncFlag>0</FuncFlag></xml>"; break; case "news": resXml = GetArticle(FromUserName, ToUserName, article_id, User_ID); break; } } } catch (Exception ex) { WriteTxt("異常:" + ex.Message + "Struck:" + ex.StackTrace.ToString()); } return resXml; } #endregion 菜單單擊 #region 獲取素材 /// <summary> /// 獲取素材 /// </summary> /// <param name="FromUserName"></param> /// <param name="ToUserName"></param> /// <param name="Article_ID"></param> /// <param name="User_ID"></param> /// <returns></returns> public string GetArticle(string FromUserName, string ToUserName, string Article_ID, string User_ID) { string resXml = ""; DataTable dtArticle = articledal.GetList("article_id=" + Article_ID + " OR article_layid=" + Article_ID).Tables[0]; if (dtArticle.Rows.Count > 0) { resXml = "<xml><ToUserName><![CDATA[" + FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>" + dtArticle.Rows.Count + "</ArticleCount><Articles>"; foreach (DataRow Row in dtArticle.Rows) { string article_title = Row["article_title"].ToString(); string article_description = Row["article_description"].ToString(); string article_picurl = Row["article_picurl"].ToString(); string article_url = Row["article_url"].ToString(); string article_type = Row["article_type"].ToString(); switch (article_type) { case "Content": article_url = hostUrl + "/web/wechat/api/article.aspx?aid=" + Row["Article_ID"].ToString(); break; case "Href": article_url = Row["article_url"].ToString(); break; } if (string.IsNullOrEmpty(article_url)) { article_url = hostUrl + "/web/wechat/api/article.aspx?aid=" + Row["Article_ID"].ToString(); } article_url += (article_url.IndexOf("uid=") > -1 ? "" : (article_url.IndexOf("?") > -1 ? "&" : "?") + "uid=" + User_ID); article_url += (article_url.IndexOf("wxid=") > -1 ? "" : (article_url.IndexOf("?") > -1 ? "&" : "?") + "wxid=" + FromUserName); article_url += (article_url.IndexOf("wxref=") > -1 ? "" : (article_url.IndexOf("?") > -1 ? "&" : "?") + "wxref=mp.weixin.qq.com"); resXml += "<item><Title><![CDATA[" + article_title + "]]></Title><Description><![CDATA[" + article_description + "]]></Description><PicUrl><![CDATA[" + article_picurl + "]]></PicUrl><Url><![CDATA[" + article_url + "]]></Url></item>"; } resXml += "</Articles><FuncFlag>1</FuncFlag></xml>"; } return resXml; } #endregion 獲取圖文列表 #region 通用方法 /// <summary> /// unix時間轉(zhuǎn)換為datetime /// </summary> /// <param name="timeStamp"></param> /// <returns></returns> private DateTime UnixTimeToTime(string timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = long.Parse(timeStamp + "0000000"); TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); } /// <summary> /// datetime轉(zhuǎn)換為unixtime /// </summary> /// <param name="time"></param> /// <returns></returns> private int ConvertDateTimeInt(System.DateTime time) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); return (int)(time - startTime).TotalSeconds; } /// <summary> /// 記錄bug,以便調(diào)試 /// </summary> /// <returns></returns> public bool WriteTxt(string str) { try { FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("Log/wxbugLog.txt"), FileMode.Append); StreamWriter sw = new StreamWriter(fs); //開始寫入 sw.WriteLine(str); //清空緩沖區(qū) sw.Flush(); //關(guān)閉流 sw.Close(); fs.Close(); } catch (Exception) { return false; } return true; } #endregion 通用方法 } }La réponse par mot-clé est également très simple. Nous définissons d'abord les mots-clés correspondants et les informations renvoyées, puis retournons en fonction de l'existence ou non des mots-clés définis dans les informations re?ues. ??>1. Définir des mots-clés (pas plus de détails ici) 2. La réception de messages et la réponse aux messages sont également mentionnées auparavant. Ici, nous jugeons uniquement la réponse par mot-clé. ??>
Il existe de nombreuses autres réponses illustrées, des informations de réponse sur la numérisation du code QR, etc. Elles sont toutes similaires et les méthodes de traitement sont similaires. Vous pouvez le faire rapidement en vous référant aux documents de développement. Voici ce que je vais faire. Je n'en dis pas plus, je vais juste discuter de ce que je ne comprends pas.
Pour plus d'articles sur la mise en ?uvre .Net de l'interface de développement de plate-forme publique WeChat "réponse d'information", veuillez faire attention au site Web chinois PHP?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)