微信開發三 使用反射根據訊息型別自動呼叫不同方法
使用反射根據訊息型別自動呼叫不同方法
微信只會向我們一個地方推送訊息,如果全部邏輯都寫到一起,程式碼會非常多,所以我們可以通過訊息型別, 來實現不同的訊息型別使用不同的處理方法,降低程式碼的耦合性
先定義一個用於處理請求的基類
/// <summary> /// 處理微信請求的基類 /// </summary> public class BaseProcess { //處理微信請求的虛方法 public virtual void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response) { } }
然後不同的處理方法都去實現這個基類
例如:處理事件請求的處理方法 (訊息型別為event)
/// <summary> /// 處理使用者點選的事件處理方法 /// </summary public class EventProcess : BaseProcess { public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response) { _response.Write("我是處理事件的請求方法"); _response.End(); } }
例如:處理使用者傳送的文字訊息方法(訊息型別為text)
/// <summary> /// 處理使用者傳送的文字訊息方法 /// </summary> public class TextProcess : BaseProcess { public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response) { _response.Write("這是處理使用者傳送的文字資訊"); _response.End(); } }
然後在入口點用反射處理下就行了
/// <summary>
/// 處理微信的請求
/// </summary>
public JsonResult Index()
{
try
{
//讀取微信傳送的xml資料
StreamReader reader = new StreamReader(Request.InputStream);
string xmldata = reader.ReadToEnd();
XElement xl = XElement.Parse(xmldata);
//取出訊息型別
string MsgType = xl.Elements().Where(a => a.Name == "MsgType").FirstOrDefault().Value;
//把微信推送的請求型別首字母轉大寫
MsgType = FirstToUpper(MsgType);
//得到需要的型別
Type needtype = Type.GetType("MvcApplication1.Process." + MsgType + "Process");
//通過反射呼叫例項化對應的處理類
BaseProcess process = Activator.CreateInstance(needtype) as BaseProcess;
//呼叫處理方法
process.Process(xl, Request, Response);
return Json("請求成功");
}
catch (Exception e)
{
//請求失敗進行日誌記錄...略
return Json("請求失敗");
}
}
我們把使用者點選的選單事件真正實現以下
/// <summary>
/// 處理使用者點選的事件處理方法
/// </summary
public class EventProcess : BaseProcess
{
public override void Process(XElement xl, HttpRequestBase _request, HttpResponseBase _response)
{
//取出訊息型別
string MsgType = xl.Elements().Where(a => a.Name == "MsgType").FirstOrDefault().Value;
string ToUserName = xl.Elements().Where(a => a.Name == "ToUserName").FirstOrDefault().Value;
string FromUserName = xl.Elements().Where(a => a.Name == "FromUserName").FirstOrDefault().Value;
//取出事件標識
string EventKey = xl.Elements().Where(a => a.Name == "EventKey").FirstOrDefault().Value;
string Event = xl.Elements().Where(a => a.Name == "Event").FirstOrDefault().Value;
//訊息型別為空就沒必要記錄日誌了
if (!string.IsNullOrEmpty(MsgType))
{
AddLog(EventKey, MsgType, Event, ToUserName, FromUserName);
}
//使用者推送的是一個事件請求
ReMsgModel rsm = new ReMsgModel();
rsm.MsgType = MsgType;
rsm.Content = "使用者點選了選單按鈕";
rsm.ToUserName = FromUserName;
rsm.FromUserName = ToUserName;
GetTextMesXml(_response, rsm);
}
}
效果如下
http://blog.csdn.net/aojiancc2/article/details/70502514
相關推薦
微信開發三 使用反射根據訊息型別自動呼叫不同方法
使用反射根據訊息型別自動呼叫不同方法 微信只會向我們一個地方推送訊息,如果全部邏輯都寫到一起,程式碼會非常多,所以我們可以通過訊息型別, 來實現不同的訊息型別使用不同的處理方法,降
微信開發三 使用反射根據訊息型別自動呼叫不同方法
使用反射根據訊息型別自動呼叫不同方法 微信只會向我們一個地方推送訊息,如果全部邏輯都寫到一起,程式碼會非常多,所以我們可以通過訊息型別, 來實現不同的訊息型別使用不同的處理方法,降低程式碼的耦合性
微信開發之客服訊息的使用
之前的訊息傳送與接收都是使用者給微信發一條,之後微信回覆給使用者,也就是API上面所說的被動回覆訊息,那麼微信是否支援主動給關注使用者發訊息嗎,答案是肯定的,但是卻有一些限制。看下微信開發文件上怎麼說就明白了: 當用戶主動發訊息給公眾號的時候(包括髮送資訊、點選自定義選單、
微信開發公眾號--接收訊息
1 . 申請一個微信公眾號 2 . 配置開發者的開發者密碼和白名單(白名單,百度中搜IP) . 3. 配置伺服器呼叫介面和解密用的資訊4 . 然後到PHP程式中先建立一個BaseController , 用作校驗和接收訊息,程式碼如下4 . 然後到PHP程式中
微信開發三--帶引數二維碼
一、獲取access_token 官方文件:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 可使用微信公眾平臺介面除錯工具進行除錯(登入公眾號後,在左側導航欄可找到“開發者工具”,選擇第二項“
微信開發-傳送客服訊息
模板訊息不好稽核通過,因此有時候我們需要傳送客服訊息。 客服訊息在傳送“圖文訊息”的時候不會夾帶客服圖示,而是一整塊的訊息,體驗相對比較好。 下邊描述一下發送客服訊息的大概過程。 1、公眾號配置 傳送客服訊息需要應用的服務響應線上,因此首先在公眾平臺進行配置(開發-&
微信開發之如何根據經緯度獲取所在的地點資訊
歡迎關注微信服務號:小灰熊 package com.lwz.wx.util; //需要匯入的包 在網上都是比較容易找到的 import java.io.UnsupportedEncodingException; import java.net.URLEncoder;
PHP-微信開發之圖靈機器人--天氣介面呼叫
微信開發中,圖靈機器人回覆、天氣、翻譯、美食、地圖、二維碼功能,隨處可見。大小網站、APP都在運用這項技術在專案中。今天簡單介紹一下圖靈機器人回覆,天氣介面呼叫、翻譯介面,希望對朋友們有用。 效果案例: 思路很簡單,首先,token要一致,然後在瀏覽器上跑起來, 回到微信平臺
微信開發獲取Accesstoken和jsapi_ticket配置jssdk,呼叫微信掃一掃
public static String[] getSign(String jsapi_ticket) throws NoSuchAlgorithmException { String[] data= new String[10]; Long timestamp= System.current
微信開發學習總結(三)——訊息管理(2)-接受普通訊息和被動回覆使用者訊息
上一節內容: 微信開發學習總結(三)——訊息管理(1) https://blog.csdn.net/qq_29914837/article/details/82903594 訊息管理具有的各個子模組功能,現在我們將一個詳細介紹如何使用 一、接受普通訊息介面介紹 1.1
微信開發學習總結(三)——訊息管理(1)
上一節內容: 微信開發學習總結(二)——微信開發環境準備(2) https://blog.csdn.net/qq_29914837/article/details/82896861 接收普通訊息 當普通微信使用者向公眾賬號發訊息時,微信伺服器將POST訊息的XML資料包到開
微信開發之消息接收--文本消息(三)
事件 圖片 over ret ken .text tin equals char 一、消息格式 1 <xml> 2 <ToUserName>< ![CDATA[toUser] ]> 3 </ToUserNam
[微信開發] - 訊息回覆及事件響應
微信平臺的訊息回覆,的關鍵字(及)訊息回覆及關注事件訊息響應, 其不同點如圖: 在weixin4j作者的註釋中,提到微信公眾平臺接受訊息一共有這麼8類: * <p> * Description: 接受訊息分8類,普通訊息(1.文字訊息、2.圖片訊息、3.語音訊
java之微信開發回覆圖片訊息
微信開發文件見:詳見 具體實現見:詳見 public class WxController { public static final Logger LOGGER= LoggerFactory.getLogger(WxController.
C# 微信開發-----微信會員卡(三)啟用會員卡
在會員領取了會員卡之後需要做 一個跳轉性啟用,模式請看下圖: 在建立會員卡的時候需要配置下這個引數的值: memberActivate.aspx頁面程式碼如下: <%@ Page Language="C#" AutoEventWireup="tr
微信開發之獲取openid及推送模板訊息
有很多的朋友再問我怎麼獲取code,openid之類的問題,在這裡我就給大家分享一下。 在做微信支付是需要獲取openid的,推送模板訊息也是需要openid包括其他一些功能分享等也都是需要的,openid是什麼呢,這裡給大家解釋一下,是使用者在公眾號中的一個標識,就相當於你資料表中的I
微信開發之傳送訊息介面
傳送訊息,是指使用者公眾號向用戶傳送相應形式的訊息。根據微信開發文件,由以下四種形式:被動回覆,群發介面,客服訊息介面以及模板訊息介面。本文將基於Java語言以及個人微信測試號,說明被動回覆、客服訊息介
node js 微信公眾號,模板訊息開發測試
需要先確認下 有沒有 相關介面的呼叫許可權。 var Q = require('q'); var request = require('request'); var a = {}; var b = {}; //需要是服務號的 var APPID = 'wx232df512421'; var APP
java微信開發傳送訊息
WeinxinCtroller.java package com.caiyl.zmd.weixin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream
微信開發-傳送模板訊息與事件推送
每個使用者針對不同的公眾號,有不同的openId 公眾號運營者傳送模板訊息的時候需要有模板和template_id,不同類別的模板有不同的template_id 呼叫微信模板訊息介面發模板訊息的時候,如果可以成功傳送出去,則會返回一個json資料包, 資料