1. 程式人生 > >微信開發三 使用反射根據訊息型別自動呼叫不同方法

微信開發三 使用反射根據訊息型別自動呼叫不同方法

            使用反射根據訊息型別自動呼叫不同方法              

       微信只會向我們一個地方推送訊息,如果全部邏輯都寫到一起,程式碼會非常多,所以我們可以通過訊息型別,            來實現不同的訊息型別使用不同的處理方法,降低程式碼的耦合性

         先定義一個用於處理請求的基類    

    /// <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資料包, 資料