當(dāng)前位置:首頁(yè) > IT技術(shù) > 微信平臺(tái) > 正文

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程
2021-07-25 16:02:49

Senparc.Weixin.MP SDK 已經(jīng)涵蓋了微信 6.x 的幾乎所有公共 API。

? ? 整個(gè)項(xiàng)目的源代碼以都可以在這個(gè)項(xiàng)目中獲取到:https://github.com/JeffreySu/WeiXinMPSDK

? ? PS:由于微信 API 以及 Senparc.Weixin SDK一直在不斷升級(jí)更新,最新的代碼及 Demo 以上面的 GitHub 中的源代碼為準(zhǔn)。

? ? 我們現(xiàn)在從無到有建立一個(gè)ASP.NET MVC 項(xiàng)目,來看一下如何與微信進(jìn)行對(duì)接(Webforms 原理也都是一樣,只不過把 Controller 中的 Action 換成 .aspx 頁(yè)面就可以了,可參考?Demo)。

? ? 將要演示的項(xiàng)目源代碼也可以在開源項(xiàng)目中找到。因?yàn)樵创a中要兼顧多個(gè)不同 .net 版本的項(xiàng)目,因此有一個(gè)公用項(xiàng)目(CommonService),所以與下面展示的結(jié)構(gòu)略有不同,不過邏輯完全一致:

? ? 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

?

  現(xiàn)在就開始吧!?

?

  第一步:建立一個(gè)空的 ASP.NET MVC 項(xiàng)目(截圖以 ASP.NET MVC 4.0 為例,.net core 也是類似的),項(xiàng)目名稱如Senparc.Weixin.MP.Sample

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享

?

  第二步:引入Senparc.Weixin.MP.dll

? ? 引入相關(guān)dll的方式有兩種:

  • 一種是復(fù)制 dll 到項(xiàng)目某文件夾中,然后直接在項(xiàng)目中添加?Senparc.Weixin.MP.dll 、依賴dll?及?Senparc.Weixin.MP.MvcExtension.dll?的引用(Senparc.Weixin.MP.MvcExtension.dll 只有 MVC 項(xiàng)目需要,WebForms 項(xiàng)目可以忽略);
  • 第二種方式我們可以使用?Nuget?直接安裝到項(xiàng)目中。

? ? Nuget項(xiàng)目地址:https://www.nuget.org/packages/Senparc.Weixin.MP/

  第一種方式已經(jīng)足夠簡(jiǎn)單(但是不建議,除非你需要修改 SDK 中的內(nèi)容,使用自己編譯的 dll)。

  下面介紹第二種:打開菜單【工具】> 【庫(kù)程序包管理器】 > 【程序包管理器控制臺(tái)】,如下圖:

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_02

  點(diǎn)擊后將會(huì)出現(xiàn)程序包管理器控制臺(tái):

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_03

? ? 如果是第一次安裝Senparc.Weixin.MP庫(kù),則在PM>后面輸入命令:

Install-Package Senparc.Weixin.MP

? ? 回車,Senparc.Weixin.MP.dll將會(huì)被自動(dòng)引入到項(xiàng)目中。

? ? 如果以后需要更新到最新版本,只需要使用Update-Package命令,將會(huì)自動(dòng)在線更新:

Update-Package Senparc.Weixin.MP

? ? 以上操作對(duì)MVC和WebForms項(xiàng)目都有效。

? ? 如果是MVC項(xiàng)目,為了獲得更多針對(duì)MVC的擴(kuò)展功能,我們可以繼續(xù)引入Senparc.Weixin.MP.MvcExtension.dll:

Install-Package Senparc.Weixin.MP.MVC

  命令窗口輸出結(jié)果如下,表示已經(jīng)安裝成功:

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_04

?

? ? 我們觀察一下項(xiàng)目引用的程序集,這兩個(gè)dll已經(jīng)被引用進(jìn)來了(同時(shí)還會(huì)自動(dòng)引入依賴的dll,如 Senparc.CO2NET):

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_05

?

  除了使用命令行的方式,也可以在【解決方案管理器】中的項(xiàng)目節(jié)點(diǎn)點(diǎn)擊右鍵,選擇【管理 Nuget 程序包 ...】,在【瀏覽】標(biāo)簽下輸入關(guān)鍵字“Senparc.Weixin.MP”,選中最新的版本,點(diǎn)擊右側(cè)的【安裝】按鈕:

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_06

?

?

  第三步:在全局中進(jìn)行設(shè)置

.net framework 項(xiàng)目:

1、打開global.asax.cs文件

2、在?Application_Start() 方法中加入如下代碼(可參考?Demo):

            /* CO2NET 全局注冊(cè)開始
             * 建議按照以下順序進(jìn)行注冊(cè)
             */

            //設(shè)置全局 Debug 狀態(tài)
            var isGLobalDebug = true;
            var senparcSetting = SenparcSetting.BuildFromWebConfig(isGLobalDebug);

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

            /* 微信配置開始
             * 建議按照以下順序進(jìn)行注冊(cè)
             */

            //設(shè)置微信 Debug 狀態(tài)
            var isWeixinDebug = true;
            var senparcWeixinSetting = SenparcWeixinSetting.BuildFromWebConfig(isWeixinDebug);

            //微信全局注冊(cè),必須??!
            register.UseSenparcWeixin(senparcWeixinSetting, senparcSetting);

?3、參考 Web.Config 的<appSetting>節(jié)點(diǎn)下加入?yún)?shù)設(shè)置(可參考?Demo):

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_07?View Code

?

.net core 項(xiàng)目:?

1、打開 Startup.cs 文件(可參考?Demo)

2、在?ConfigureServices() 方法中加入:

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

3、修改 Configure() 方法傳入?yún)?shù),并添加代碼:

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

            // 啟動(dòng) CO2NET 全局注冊(cè),必須!
            IRegisterService register = RegisterService.Start(env, senparcSetting.Value)
                                                        .UseSenparcGlobal(false, null);

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

?4、在 appsetting.json 文件下插入以下設(shè)置(可參考?Demo):

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_07?View Code

?

  第四步:建立一個(gè)Controller,如WeixinController.cs

Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程_分享_09

?

?

  第四步:修改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;//與微信公眾賬號(hào)后臺(tái)的Token設(shè)置保持一致,區(qū)分大小寫。
15         public static readonly string EncodingAESKey = Config.SenparcWeixinSetting.EncodingAESKey;//與微信公眾賬號(hào)后臺(tái)的EncodingAESKey設(shè)置保持一致,區(qū)分大小寫。
16         public static readonly string AppId = Config.SenparcWeixinSetting.WeixinAppId;//與微信公眾賬號(hào)后臺(tái)的AppId設(shè)置保持一致,區(qū)分大小寫。
17 
18         /// <summary>
19         /// 微信后臺(tái)驗(yàn)證地址(使用Get),微信后臺(tái)的“接口配置信息”的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); //返回隨機(jī)字符串則表示驗(yàn)證通過
28             }
29             else
30             {
31                 return Content("failed:" + postModel.Signature + "," + MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" +
32                     "如果你在瀏覽器中看到這句話,說明此地址可以被作為微信公眾賬號(hào)后臺(tái)的Url,請(qǐng)注意保持Token一致。");
33             }
34         }
35 
36         /// <summary>
37         /// 用戶發(fā)送消息后,微信平臺(tái)自動(dòng)Post一個(gè)請(qǐng)求到這里,并等待響應(yīng)XML。
38         /// PS:此方法為簡(jiǎn)化方法,效果與OldPost一致。
39         /// v0.8之后的版本可以結(jié)合Senparc.Weixin.MP.MvcExtension擴(kuò)展包,使用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("參數(shù)錯(cuò)誤!");
48             }
49 
50             postModel.Token = Token;//根據(jù)自己后臺(tái)的設(shè)置保持一致
51             postModel.EncodingAESKey = EncodingAESKey;//根據(jù)自己后臺(tái)的設(shè)置保持一致
52             postModel.AppId = AppId;//根據(jù)自己后臺(tái)的設(shè)置保持一致
53 
54             //自定義MessageHandler,對(duì)微信請(qǐng)求的詳細(xì)判斷操作都在這里面。
55             var messageHandler = new CustomMessageHandler(Request.InputStream, postModel);//接收消息
56 
57             messageHandler.Execute();//執(zhí)行微信處理過程
58 
59             return new FixWeixinBugWeixinResult(messageHandler);//返回結(jié)果
60 
61         }
62     }
63 }

? ? 第一個(gè) Get()? 對(duì)應(yīng)微信后臺(tái)設(shè)置 URL 時(shí)候的請(qǐng)求(只在驗(yàn)證的時(shí)候用到),第二個(gè) Post() 用于接收微信服務(wù)器轉(zhuǎn)發(fā)過來的客戶請(qǐng)求。

? ? 其中 CustomMessageHandler 是我們自己創(chuàng)建的一個(gè)類,用于實(shí)現(xiàn) MessageHandler(有關(guān)MessageHandler的詳細(xì)介紹可以看《Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(六):了解MessageHandler》,也可以看這里),所有處理微信消息的核心邏輯都被包含到 CustomMessageHandler 中執(zhí)行。除了承擔(dān)處理微信響應(yīng)的任務(wù),MessageHandler 還實(shí)現(xiàn)了處理單個(gè)用戶對(duì)話上下文等功能,非常方便。

?

? ? 至此,整個(gè)Senparc.Weixin.MP SDK已經(jīng)基本開發(fā)完畢,可以直接發(fā)布,并在微信后臺(tái)使用“高級(jí)功能”對(duì)接了。

? ? 在微信后臺(tái)設(shè)置中,Url 填寫?http://xxx/Weixin,Token 填寫?Web.config 中的“WeixinToken?” 或 appsetting.json 中的“Token”所設(shè)置的值。

? ? (如何在微信后臺(tái)設(shè)置請(qǐng)看:Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(三):微信公眾平臺(tái)開發(fā)驗(yàn)證)

?

? ? 接下去我們會(huì)介紹如何在MessageHandler中處理具體的微信請(qǐng)求(文字、圖片、位置、語(yǔ)音等等)。

?

系列教程索引
  1. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(一):微信公眾平臺(tái)注冊(cè)
  2. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(二):成為開發(fā)者
  3. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(三):微信公眾平臺(tái)開發(fā)驗(yàn)證
  4. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(四):Hello World
  5. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(六):了解MessageHandler
  7. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(七):解決用戶上下文(Session)問題
  8. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(八):通用接口說明
  9. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(九):自定義菜單接口說明
  10. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(十):多客服接口說明
  11. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(十一):高級(jí)接口說明
  12. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(十二):OAuth2.0說明
  13. Senparc.Weixin.MP SDK?微信公眾平臺(tái)開發(fā)教程(十三):地圖相關(guān)接口說明
  14. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十四):請(qǐng)求消息去重
  15. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十六):AccessToken自動(dòng)管理機(jī)制
  17. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十七):個(gè)性化菜單接口說明
  18. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(十九):MessageHandler 的未知類型消息處理
  20. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(二十):使用菜單消息功能
  21. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(二十一):在小程序中使用 WebSocket (.NET Core)
  22. Senparc.Weixin.MP SDK 微信公眾平臺(tái)開發(fā)教程(二十二):如何安裝 Nuget(dll) 后使用項(xiàng)目源代碼調(diào)試

?

?
?
?
?

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >