Senparc.Weixin.MP SDK 微信公衆平臺開發教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK 已經涵蓋了微信 6.x 的幾乎全部公共 API。html

    整個項目的源代碼以均可以在這個項目中獲取到:https://github.com/JeffreySu/WeiXinMPSDKgit

    PS:因爲微信 API 以及 Senparc.Weixin SDK一直在不斷升級更新,最新的代碼及 Demo 以上面的 GitHub 中的源代碼爲準。github

    咱們如今從無到有創建一個ASP.NET MVC 項目,來看一下如何與微信進行對接(Webforms 原理也都是同樣,只不過把 Controller 中的 Action 換成 .aspx 頁面就能夠了,可參考 Demo)。web

    將要演示的項目源代碼也能夠在開源項目中找到。由於源代碼中要兼顧多個不一樣 .net 版本的項目,所以有一個公用項目(CommonService),因此與下面展現的結構略有不一樣,不過邏輯徹底一致:json

    MVC:https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Senparc.Weixin.MP.Sample小程序

    WebForms:https://github.com/JeffreySu/WeiXinMPSDK/tree/master/Senparc.Weixin.MP.Sample.WebForms微信小程序

 

  如今就開始吧! 瀏覽器

 

  第一步:創建一個空的 ASP.NET MVC 項目(截圖以 ASP.NET MVC 4.0 爲例,.net core 也是相似的),項目名稱如Senparc.Weixin.MP.Sample緩存

 

  第二步:引入Senparc.Weixin.MP.dll服務器

    引入相關dll的方式有兩種:

  • 一種是複製 dll 到項目某文件夾中,而後直接在項目中添加 Senparc.Weixin.MP.dll 、依賴dll 及 Senparc.Weixin.MP.MvcExtension.dll 的引用(Senparc.Weixin.MP.MvcExtension.dll 只有 MVC 項目須要,WebForms 項目能夠忽略);
  • 第二種方式咱們可使用 Nuget 直接安裝到項目中。

    Nuget項目地址:https://www.nuget.org/packages/Senparc.Weixin.MP/

  第一種方式已經足夠簡單(可是不建議,除非你須要修改 SDK 中的內容,使用本身編譯的 dll)。

  下面介紹第二種:打開菜單【工具】> 【庫程序包管理器】 > 【程序包管理器控制檯】,以下圖:

  點擊後將會出現程序包管理器控制檯:

    若是是第一次安裝Senparc.Weixin.MP庫,則在PM>後面輸入命令:

Install-Package Senparc.Weixin.MP

    回車,Senparc.Weixin.MP.dll將會被自動引入到項目中。

    若是之後須要更新到最新版本,只須要使用Update-Package命令,將會自動在線更新:

Update-Package Senparc.Weixin.MP

    以上操做對MVC和WebForms項目都有效。

    若是是MVC項目,爲了得到更多針對MVC的擴展功能,咱們能夠繼續引入Senparc.Weixin.MP.MvcExtension.dll

Install-Package Senparc.Weixin.MP.MVC

  命令窗口輸出結果以下,表示已經安裝成功:

 

    咱們觀察一下項目引用的程序集,這兩個dll已經被引用進來了(同時還會自動引入依賴的dll,如 Senparc.CO2NET):

 

  除了使用命令行的方式,也能夠在【解決方案管理器】中的項目節點點擊右鍵,選擇【管理 Nuget 程序包 ...】,在【瀏覽】標籤下輸入關鍵字「Senparc.Weixin.MP」,選中最新的版本,點擊右側的【安裝】按鈕:

 

 

  第三步:在全局中進行設置

.net framework 項目:

一、打開global.asax.cs文件

二、在 Application_Start() 方法中加入以下代碼(可參考 Demo):

            /* CO2NET 全局註冊開始
             * 建議按照如下順序進行註冊
             */

            //設置全局 Debug 狀態
            var isGLobalDebug = true;
            var senparcSetting = SenparcSetting.BuildFromWebConfig(isGLobalDebug);

            //CO2NET 全局註冊,必須!!
            IRegisterService register = RegisterService.Start(senparcSetting)
                                          .UseSenparcGlobal(false, null);

            /* 微信配置開始
             * 建議按照如下順序進行註冊
             */

            //設置微信 Debug 狀態
            var isWeixinDebug = true;
            var senparcWeixinSetting = SenparcWeixinSetting.BuildFromWebConfig(isWeixinDebug);

            //微信全局註冊,必須!!
            register.UseSenparcWeixin(senparcWeixinSetting, senparcSetting);

 三、參考 Web.Config 的<appSetting>節點下加入參數設置(可參考 Demo):

    <!-- 如下信息會被自動識別,如無特殊說明,不用的參數能夠刪除,但修改 key 後將會沒法自動識別! -->
    <!-- 自動識別參數開始 -->

    <!-- 如下爲 CO2NET 的 SenparcSetting 全局配置,請勿修改 key,勿刪除任何項 -->
    
    <!-- 默認緩存命名空間配置 -->
    <add key="DefaultCacheNamespace" value="DefaultCache" />
    <!-- Cache.Redis鏈接配置 -->
    <add key="Cache_Redis_Configuration" value="Redis配置" />
    <!--<add key="Cache_Redis_Configuration" value="localhost:6379" />-->
    <!-- Cache.Memcached鏈接配置 -->
    <add key="Cache_Memcached_Configuration" value="Memcached配置" />
    <add key="SenparcUnionAgentKey" value="SenparcUnionAgentKey" />
    
    <!-- 如下爲 Senparc.Weixin 的 SenparcWeixinSetting 微信配置,不使用的參數能夠刪除  -->
    
    <!-- 微信公衆號URL對接信息 -->
    <add key="WeixinToken" value="應用服務器(開發者服務器)URL對應的Token" />
    <add key="WeixinEncodingAESKey" value="應用服務器(開發者服務器)URL對應的消息加解密密鑰" />
    <!-- 高級接口信息 -->
    <add key="WeixinAppId" value="微信AppId" />
    <add key="WeixinAppSecret" value="微信AppSecret" />
    <!-- SDK提供的代理功能設置 -->
    <add key="WeixinAgentUrl" value="外部代理Url" />
    <add key="WeixinAgentToken" value="外部代理Token" />
    <add key="SenparcAgentKey" value="盛派代理系統通用Key" />
    <add key="WeixinAgentWeiweihiKey" value="外部代理WeiWeiHiKey" />
    <!-- 微信支付相關參數 -->
    <!-- 微信支付V2 -->
    <add key="WeixinPay_Tenpay" value="WeixinPay_Tenpay" />
    <add key="WeixinPay_PartnerId" value="WeixinPay_PartnerId" />
    <add key="WeixinPay_Key" value="WeixinPay_Key" />
    <add key="WeixinPay_AppId" value="WeixinPay_AppId" />
    <add key="WeixinPay_AppKey" value="WeixinPay_AppKey" />
    <add key="WeixinPay_TenpayNotify" value="WeixinPay_TenpayNotify" />
    <!-- 微信支付V3 -->
    <add key="TenPayV3_MchId" value="TenPayV3_MchId" />
    <add key="TenPayV3_Key" value="TenPayV3_Key" />
    <add key="TenPayV3_AppId" value="TenPayV3_AppId" />
    <add key="TenPayV3_AppSecret" value="TenPayV3_AppSecret" />
    <add key="TenPayV3_TenpayNotify" value="http://YourDomainName/TenpayV3/PayNotifyUrl" />
    <!-- 開放平臺 -->
    <add key="Component_Appid" value="Component_Appid" />
    <add key="Component_Secret" value="Component_Secret" />
    <add key="Component_Token" value="Component_Token" />
    <add key="Component_EncodingAESKey" value="Component_EncodingAESKey" />
    <!-- 微信企業號 -->
    <add key="WeixinCorpId" value="WeixinCorpId" />
    <add key="WeixinCorpSecret" value="WeixinCorpSecret" />

    <!-- 小程序 -->
    <!-- 小程序消息URL對接信息 -->
    <add key="WxOpenToken" value="小程序消息URL對應的Token" />
    <add key="WxOpenEncodingAESKey" value="小程序消息URL對應的消息加解密密鑰" />
    <!-- 小程序祕鑰信息 -->
    <add key="WxOpenAppId" value="微信小程序AppId" />
    <add key="WxOpenAppSecret" value="微信小程序AppSecret" />

    <!-- 自動識別參數結束 -->
View Code

 

.net core 項目: 

一、打開 Startup.cs 文件(可參考 Demo

二、在 ConfigureServices() 方法中加入:

        public void ConfigureServices(IServiceCollection services)
        {
            //...
            services.AddSenparcGlobalServices(Configuration)//Senparc.CO2NET 全局註冊
                    .AddSenparcWeixinServices(Configuration);//Senparc.Weixin 註冊
        }

三、修改 Configure() 方法傳入參數,並添加代碼:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
        {
            //app.UseMvc()等設置...

            // 啓動 CO2NET 全局註冊,必須!
            IRegisterService register = RegisterService.Start(env, senparcSetting.Value)
                                                        .UseSenparcGlobal(false, null);

            //開始註冊微信信息,必須!
            register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value)
}

 

 四、在 appsetting.json 文件下插入如下設置(可參考 Demo):

  //如下信息會被自動識別,如無特殊說明,不用的參數能夠刪除,但修改 key 後將會沒法自動識別!

  //CO2NET 設置
  "SenparcSetting": {
    //如下爲 CO2NET 的 SenparcSetting 全局配置,請勿修改 key,勿刪除任何項

    "IsDebug": true,
    "DefaultCacheNamespace": "DefaultCache",
    //分佈式緩存
    "Cache_Redis_Configuration": "Redis配置",
    //"Cache_Redis_Configuration": "localhost:6379",
    "Cache_Memcached_Configuration": "Memcached配置",
    "SenparcUnionAgentKey": "SenparcUnionAgentKey"
  },
  //Senparc.Weixin SDK 設置
  "SenparcWeixinSetting": {
    //如下爲 Senparc.Weixin 的 SenparcWeixinSetting 微信配置

    //微信全局
    "IsDebug": true,

    //如下不使用的參數能夠刪除,key 修改後將會失效

    //公衆號
    "Token": "weixin",
    "EncodingAESKey": "",
    "WeixinAppId": "WeixinAppId",
    "WeixinAppSecret": "WeixinAppSecret",
    //小程序
    "WxOpenAppId": "WxOpenAppId",
    "WxOpenAppSecret": "WxOpenAppSecret",
    "WxOpenToken": "WxOpenToken",
    "WxOpenEncodingAESKey": "WxOpenEncodingAESKey",
    //企業微信
    "WeixinCorpId": "WeixinCorpId",
    "WeixinCorpSecret": "WeixinCorpSecret",

    //微信支付
    //微信支付V2(舊版)
    "WeixinPay_PartnerId": "WeixinPay_PartnerId",
    "WeixinPay_Key": "WeixinPay_Key",
    "WeixinPay_AppId": "WeixinPay_AppId",
    "WeixinPay_AppKey": "WeixinPay_AppKey",
    "WeixinPay_TenpayNotify": "WeixinPay_TenpayNotify",
    //微信支付V3(新版)
    "TenPayV3_MchId": "TenPayV3_MchId",
    "TenPayV3_Key": "TenPayV3_Key",
    "TenPayV3_AppId": "TenPayV3_AppId",
    "TenPayV3_AppSecret": "TenPayV3_AppId",
    "TenPayV3_TenpayNotify": "TenPayV3_TenpayNotify",

    //開放平臺
    "Component_Appid": "Component_Appid",
    "Component_Secret": "Component_Secret",
    "Component_Token": "Component_Token",
    "Component_EncodingAESKey": "Component_EncodingAESKey",

    //擴展及代理參數
    "AgentUrl": "AgentUrl",
    "AgentToken": "AgentToken",
    "SenparcWechatAgentKey": "SenparcWechatAgentKey"
  }
View Code

 

  第四步:創建一個Controller,如WeixinController.cs

 

 

  第四步:修改WeixinController.cs

    咱們將下列代碼加入WeixinController.cs:

 1 using System;
 2 using System.IO;
 3 using System.Web.Configuration;
 4 using System.Web.Mvc;
 5 using Senparc.Weixin.MP.Entities.Request;
 6 
 7 namespace Senparc.Weixin.MP.Sample.Controllers
 8 {
 9     using Senparc.Weixin.MP.MvcExtension;
10     using Senparc.Weixin.MP.Sample.CommonService.CustomMessageHandler;
11 
12     public partial class WeixinController : Controller
13     {
14         public static readonly string Token = Config.SenparcWeixinSetting.Token;//與微信公衆帳號後臺的Token設置保持一致,區分大小寫。
15         public static readonly string EncodingAESKey = Config.SenparcWeixinSetting.EncodingAESKey;//與微信公衆帳號後臺的EncodingAESKey設置保持一致,區分大小寫。
16         public static readonly string AppId = Config.SenparcWeixinSetting.WeixinAppId;//與微信公衆帳號後臺的AppId設置保持一致,區分大小寫。
17 
18         /// <summary>
19         /// 微信後臺驗證地址(使用Get),微信後臺的「接口配置信息」的Url填寫如:http://weixin.senparc.com/weixin
20         /// </summary>
21         [HttpGet]
22         [ActionName("Index")]
23         public ActionResult Get(PostModel postModel, string echostr)
24         {
25             if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
26             {
27                 return Content(echostr); //返回隨機字符串則表示驗證經過
28             }
29             else
30             {
31                 return Content("failed:" + postModel.Signature + "," + MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "" +
32                     "若是你在瀏覽器中看到這句話,說明此地址能夠被做爲微信公衆帳號後臺的Url,請注意保持Token一致。");
33             }
34         }
35 
36         /// <summary>
37         /// 用戶發送消息後,微信平臺自動Post一個請求到這裏,並等待響應XML。
38         /// PS:此方法爲簡化方法,效果與OldPost一致。
39         /// v0.8以後的版本能夠結合Senparc.Weixin.MP.MvcExtension擴展包,使用WeixinResult,見MiniPost方法。
40         /// </summary>
41         [HttpPost]
42         [ActionName("Index")]
43         public ActionResult Post(PostModel postModel)
44         {
45             if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
46             {
47                 return Content("參數錯誤!");
48             }
49 
50             postModel.Token = Token;//根據本身後臺的設置保持一致
51             postModel.EncodingAESKey = EncodingAESKey;//根據本身後臺的設置保持一致
52             postModel.AppId = AppId;//根據本身後臺的設置保持一致
53 
54             //自定義MessageHandler,對微信請求的詳細判斷操做都在這裏面。
55             var messageHandler = new CustomMessageHandler(Request.InputStream, postModel);//接收消息
56 
57             messageHandler.Execute();//執行微信處理過程
58 
59             return new FixWeixinBugWeixinResult(messageHandler);//返回結果
60 
61         }
62     }
63 }

 

    第一個 Get()  對應微信後臺設置 URL 時候的請求(只在驗證的時候用到),第二個 Post() 用於接收微信服務器轉發過來的客戶請求。

    其中 CustomMessageHandler 是咱們本身建立的一個類,用於實現 MessageHandler(有關MessageHandler的詳細介紹能夠看《Senparc.Weixin.MP SDK 微信公衆平臺開發教程(六):瞭解MessageHandler》,也能夠看這裏),全部處理微信消息的核心邏輯都被包含到 CustomMessageHandler 中執行。除了承擔處理微信響應的任務,MessageHandler 還實現了處理單個用戶對話上下文等功能,很是方便。

 

    至此,整個Senparc.Weixin.MP SDK已經基本開發完畢,能夠直接發佈,並在微信後臺使用「高級功能」對接了。

    在微信後臺設置中,Url 填寫 http://xxx/Weixin,Token 填寫 Web.config 中的「WeixinToken 」 或 appsetting.json 中的「Token」所設置的值。

    (如何在微信後臺設置請看:Senparc.Weixin.MP SDK 微信公衆平臺開發教程(三):微信公衆平臺開發驗證

 

    接下去咱們會介紹如何在MessageHandler中處理具體的微信請求(文字、圖片、位置、語音等等)。

 

系列教程索引

地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(一):微信公衆平臺註冊
  2. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二):成爲開發者
  3. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(三):微信公衆平臺開發驗證
  4. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(六):瞭解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(七):解決用戶上下文(Session)問題
  8. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(八):通用接口說明
  9. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(九):自定義菜單接口說明
  10. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十):多客服接口說明
  11. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十一):高級接口說明
  12. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十二):OAuth2.0說明
  13. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十三):地圖相關接口說明
  14. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十四):請求消息去重
  15. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十六):AccessToken自動管理機制
  17. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十七):個性化菜單接口說明
  18. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十九):MessageHandler 的未知類型消息處理
  20. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十):使用菜單消息功能
  21. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十一):在小程序中使用 WebSocket (.NET Core)
  22. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十二):如何安裝 Nuget(dll) 後使用項目源代碼調試
相關文章
相關標籤/搜索