Maison
Applet WeChat
Développement WeChat
Développement C# .net WeChat, certification de développement, attention aux messages déclencheurs, réponse automatique, réponse aux événements, menu personnalisé



Développement C# .net WeChat, certification de développement, attention aux messages déclencheurs, réponse automatique, réponse aux événements, menu personnalisé
Feb 13, 2017 pm 12:00 PMDevenez développeur
string[]?ArrTmp?=?{?"token",? Request["timestamp"],? Request["nonce"]?}; Array.Sort(ArrTmp);????? //字典排序string?tmpStr?=?string.Join("",?ArrTmp); tmpStr?=?FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr,?"SHA1"); tmpStr?=?tmpStr.ToLower();if?(tmpStr?!=?Request["signature"].ToLower()) { ???Response.Write(Request["echostr"]); }
Suivez les comptes, déclenchez des messages, réponse automatique, réponses aux événements
namespace ElegantWM.WebUI.Areas.WeiXin.Controllers { /// <summary> /// 微信公共服務(wù)類 /// </summary> public class RobotController : BaseController { /// <summary> /// 接收微信請(qǐng)求接口,認(rèn)證的接口 /// </summary> /// <returns></returns> public ContentResult Index() { string result = AnalyzeXmlFromWeiXin(); return Content(result); } /// <summary> /// 分析微信POST到本服務(wù)器的XML數(shù)據(jù) /// </summary> /// <param name="xmlStream"></param> /// <returns></returns> private string AnalyzeXmlFromWeiXin() { StreamReader reader = new StreamReader(Request.InputStream); string xml = reader.ReadToEnd(); //獲取MsgType log.Info(xml); string msgType = XmlHelper.ReadXmlStr(xml, "/xml/MsgType", ""); switch (msgType) { case "event"://如果是事件 return OnAttention(xml); case "text"://如果是文本消息 return OnReceiveTextMsg(xml); default: return "不被支持的關(guān)鍵字!"; } } /// <summary> /// 響應(yīng)文本消息 /// </summary> /// <param name="xml"></param> /// <returns></returns> private string OnReceiveTextMsg(string xml) { WxTextMsg msg = XmlEntityExchange<WxTextMsg>.ConvertXml2Entity(xml); //返回消息,互換收發(fā)用戶 string toUser = msg.FromUserName; msg.FromUserName = msg.ToUserName; msg.ToUserName = toUser; switch (msg.Content.Trim()) { case "?": msg.Content = HelpDocument(); break; case "?": msg.Content = HelpDocument(); break; case "1": msg.Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); break; case "2": msg.Content = Tools.HttpCrossDomain.Get("http://www.weather.com.cn/data/sk/101210301.html"); break; case "3": msg.Content = "來(lái)吧,想嘮點(diǎn)什么呢? [偷笑]"; break; case "你是男的女的": msg.Content = "姑娘一枚 [偷笑]"; break; default: msg.Content = "抱歉哦,我不認(rèn)識(shí)您輸入的命令。/害羞 /:,@-D"; break; } return XmlEntityExchange<WxTextMsg>.ConvertEntity2Xml(msg); } /// <summary> /// 獲取幫助菜單文檔 /// </summary> /// <returns></returns> private string HelpDocument() { StringBuilder sb = new StringBuilder(); sb.Append("HI,請(qǐng)回復(fù)數(shù)字,選擇服務(wù)").Append("\n\n"); sb.Append("1. 當(dāng)前時(shí)間").Append("\n"); sb.Append("2. 天氣信息").Append("\n"); sb.Append("3. 聊天嘮嗑").Append("\n"); sb.Append("n. 更多服務(wù)開發(fā)中...").Append("\n"); sb.Append("回復(fù)【?】顯示此幫助菜單"); return sb.ToString(); } /// <summary> /// 當(dāng)用戶關(guān)注微信帳號(hào)的時(shí)候觸發(fā),事件響應(yīng) /// </summary> /// <param name="xml"></param> private string OnAttention(string xml) { WxEvent wxevent = XmlEntityExchange<WxEvent>.ConvertXml2Entity(xml); WxTextMsg msg = new WxTextMsg(); msg.ToUserName = wxevent.FromUserName; msg.FromUserName = wxevent.ToUserName; msg.CreateTime = DateTime.Now.Ticks; msg.MsgType = "text"; //如果是關(guān)注,則發(fā)送歡迎消息 switch (wxevent.Event) { case "subscribe": msg.Content = System.Configuration.ConfigurationManager.AppSettings["DefaultWxMsg"]; break; case "CLICK": msg.Content = "您單擊的是:" + wxevent.EventKey; break; default: msg.Content = "暫未處理的事件:Event" + wxevent.Event + ";EventKey:" + wxevent.EventKey; break; } string rst = XmlEntityExchange<WxTextMsg>.ConvertEntity2Xml(msg); log.Info(rst); return rst; } } }
Obtenir un jeton?:
//實(shí)體 public class WxEvent { /// <summary> /// 接收人 /// </summary> public string ToUserName { get; set; } /// <summary> /// 發(fā)送人 /// </summary> public string FromUserName { get; set; } /// <summary> /// 時(shí)間 /// </summary> public string CreateTime { get; set; } /// <summary> /// 類型 /// </summary> public string MsgType { get; set; } /// <summary> /// 事件 /// </summary> public string Event { get; set; } public string EventKey { get; set; } } public class WxTextMsg { /// <summary> /// 接收人 /// </summary> public string ToUserName { get; set; } /// <summary> /// 發(fā)送人 /// </summary> public string FromUserName { get; set; } /// <summary> /// 時(shí)間 /// </summary> public long CreateTime { get; set; } /// <summary> /// 類型 /// </summary> public string MsgType { get; set; } /// <summary> /// 內(nèi)容 /// </summary> public string Content { get; set; } }
//XML和實(shí)體對(duì)象間的相互轉(zhuǎn)化 namespace ElegantWM.WebUI.Areas.WeiXin { public class XmlEntityExchange<T> where T : new() { /// <summary> /// 將XML轉(zhuǎn)換為對(duì)象 /// </summary> /// <param name="xml"></param> /// <returns></returns> public static T ConvertXml2Entity(string xml) { XmlDocument doc = new XmlDocument(); PropertyInfo[] propinfos = null; doc.LoadXml(xml); XmlNodeList nodelist = doc.SelectNodes("/xml"); T entity = new T(); foreach (XmlNode node in nodelist) { //初始化propertyinfo if (propinfos == null) { Type objtype = entity.GetType(); propinfos = objtype.GetProperties(); } //填充entity類的屬性 foreach (PropertyInfo pi in propinfos) { XmlNode cnode = node.SelectSingleNode(pi.Name); pi.SetValue(entity, Convert.ChangeType(cnode.InnerText, pi.PropertyType), null); } } return entity; } /// <summary> /// 構(gòu)造微信消息 /// </summary> /// <param name="t">對(duì)象實(shí)體</param> /// <returns>返回微信消息xml格式</returns> public static string ConvertEntity2Xml(T t) { StringBuilder builder = new StringBuilder(); builder.Append("<xml>"); Type objtype = t.GetType(); //填充entity類的屬性 foreach (PropertyInfo pi in objtype.GetProperties()) { object obj = pi.GetValue(t); string value = obj == null ? "" : obj.ToString(); if (pi.PropertyType.Name.ToLower() == "int64") builder.Append("<" + pi.Name + ">" + value + "</" + pi.Name + ">"); else builder.Append("<" + pi.Name + "><![CDATA[" + value + "]]></" + pi.Name + ">"); } builder.Append("</xml>"); return builder.ToString(); } } }
/* * * Copyright ? 2013 CCT All Rights Reserved * 作者:JackChain * 時(shí)間:2013/8/23 18:21:23 * 功能:跨域訪問(wèn) * 版本:V1.0 * * 修改人: * 修改點(diǎn): * */namespace ElegantWM.Tools { public class HttpCrossDomain { /// <summary> /// 跨域訪問(wèn) /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> public static string Post(string url, string param, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; byte[] byteData = UTF8Encoding.UTF8.GetBytes(param == null ? "" : param); request.ContentLength = byteData.Length; using (Stream postStream = request.GetRequestStream()) { postStream.Write(byteData, 0, byteData.Length); } string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } /// <summary> /// 跨域訪問(wèn) /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> public static string Get(string url, int time = 60000) { Uri address = new Uri(url); HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; request.Method = "GET"; request.ContentType = "application/json;charset=utf-8"; //"application/x-www-form-urlencoded"; request.Timeout = time; string result = ""; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); result = reader.ReadToEnd(); } return (result); } } }Obtenir et mettre à jour le menu
public class CommonController : Controller { /// <summary> /// 獲取微信憑證 /// </summary> /// <returns></returns> public JsonResult GetWxCredential() { string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"; url = string.Format(url, ConfigurationManager.AppSettings["AppId"], ConfigurationManager.AppSettings["AppSecret"]); string rst = HttpCrossDomain.Get(url); if (rst.Contains("access_token")) { string tokenId=rst.Replace("{\"access_token\":\"", "").Replace("\",\"expires_in\":7200}", ""); CacheHelper.CacheInsertAddMinutes("access_token",tokenId,120); return Json(tokenId, JsonRequestBehavior.AllowGet); } else return Json(rst, JsonRequestBehavior.AllowGet); } }Plus de développement C# .net WeChat, certification de développement , faites attention aux messages déclencheurs, aux réponses automatiques, aux réponses aux événements, aux menus personnalisés Pour les articles connexes, veuillez faire attention au site Web PHP chinois !
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

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
Guide de construction de Grass Wonder | Uma musume joli derby
1 Il y a quelques mois
By Jack chen
<??>: 99 nuits dans la forêt - tous les badges et comment les déverrouiller
1 Il y a quelques mois
By DDD
Guide de température de Rimworld Odyssey pour les navires et Gravtech
3 Il y a quelques semaines
By Jack chen
Guide de construction Mejiro Ryan | Uma musume joli derby
4 Il y a quelques semaines
By Jack chen
Rimworld Odyssey Comment pêcher
3 Il y a quelques semaines
By Jack chen

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)