概述
最簡潔最易於使用的微信Sdk,包括公眾號Sdk、小程序Sdk、企業微信Sdk等,以及Abp VNext集成。
- GitHub地址:https://github.com/xin-lai/Magicodes.Wx.Sdk
- Gitee地址:https://gitee.com/xl_wenqiang/Magicodes.Wx.Sdk
| 名稱 | Nuget |
|---|---|
| Magicodes.Wx.PublicAccount.Sdk | ![]() |
| Magicodes.Wx.PublicAccount.Sdk.AspNet | ![]() |
| Magicodes.Wx.PublicAccount.Sdk.Abp | ![]() |
如何貢獻?
如何快速封裝一個微信接口?(30秒編寫一個微信Api,歡迎多多PR)
如何快速定義一個微信上傳文件的接口?
RoadMap
公眾號
-
全局
-
接口結果基類(
ApiResultBase)- 全局返回碼(
ReturnCodes) - 是否成功返回(
IsSuccess) - 獲取異常友好提示消息(
GetFriendlyMessage)
- 全局返回碼(
-
Access Token獲取(
ITokenApi) -
Token管理器(
ITokenManager) -
Access Token API請求篩選器(
AccessTokenApiFilter)- IWxApiBase
- IWxApiWithAccessTokenFilter(啟用
AccessTokenApiFilter)
-
從配置文件獲取公眾號配置
"Wx": { "PublicAccount": { "AppId": "", "AppSecret": "" } }
-
函數注入(
WxFuncs)- GetWeChatOptions【獲取公眾號配置】
- GetAccessTokenByAppId【根據AppId獲取Access Token】
- CacheAccessToken【緩存Access Token】
-
異常(
WxSdkException) -
Abp Vnext集成(
Magicodes.Wx.PublicAccount.Sdk.Abp)- WxPublicAccountSdkModule(默認已實現IDistributedCache)
-
Magicodes.Wx.PublicAccount.Sdk.AspNet模塊
- 事件消息控制器(
WxEventController) - 服務器事件消息處理器(
IWxEventsHandler) - 公眾號網頁開發基類(
WxPublicAccountControllerBase) - 公眾號授權篩選器(
WxPublicAccountOAuthFilter)
- 事件消息控制器(
-
-
基礎消息能力
-
服務器事件消息
- 服務器事件消息配置接入以及驗證
- 事件推送
- 關注事件:
FromSubscribeEvent - 取消關注事件:
FromUnsubscribeEvent - 掃碼事件:
FromScanEvent - 地理位置選擇器事件:
FromLocationEvent - 點擊事件:
FromClickEvent - 點擊菜單鏈接跳轉事件:
FromViewEvent - 模板消息推送完成事件:
FromTemplateSendJobFinishEvent - 點擊菜單跳轉小程序事件:
FromViewMiniprogramEvent
- 關注事件:
- 基礎消息
- 文本消息:
FromTextMessage - 圖片消息:
FromImageMessage - 語音消息:
FromVoiceMessage - 視頻消息:
FromVideoMessage - 小視頻消息:
FromShortVideoMessage - 地理位置消息:
FromLocationMessage - 鏈接消息:
FromLinkMessage
- 文本消息:
- 被動消息回復
- 回復文本消息:
ToTextMessage - 回復圖片消息:
ToImageMessage - 回復語音消息:
ToVoiceMessage - 回復視頻消息:
ToVideoMessage - 回復音樂消息:
ToMusicMessage - 回復圖文消息:
ToNewsMessage - 回復空消息(不回復):
ToNullMessage
- 回復文本消息:
-
群發接口
- 上傳圖文消息內的圖片獲取URL【訂閱號與服務號認證后均可用】(
IMediaApi>>UploadImageAsync) - 上傳圖文消息素材【訂閱號與服務號認證后均可用】
- 根據標簽進行群發【訂閱號與服務號認證后均可用】
- 根據OpenID列表群發【訂閱號不可用,服務號認證后可用】
- 刪除群發【訂閱號與服務號認證后均可用】
- 預覽接口【訂閱號與服務號認證后均可用】
- 查詢群發消息發送狀態【訂閱號與服務號認證后均可用】
- 上傳圖文消息內的圖片獲取URL【訂閱號與服務號認證后均可用】(
-
api調用次數進行清零
-
獲取公眾號當前使用的自動回復規則
-
公眾號一次性訂閱消息
-
模板消息(
ITemplateApi)
-
-
自定義菜單(
IMenuApi)- 創建接口(
CreateAsync) - 查詢接口(
GetAsync) - 刪除接口(
DeleteAsync) - 個性化菜單接口
- 獲取自定義菜單配置
- 創建接口(
-
訂閱通知
- 選用模板
- 刪除模板
- 獲取公眾號類目
- 獲取模板中的關鍵詞
- 獲取所屬類目的公共模板
- 獲取私有模板列表
- 發送訂閱通知
-
客服消息
- 客服管理(
IKfAccountApi)- 獲取客服基本信息(
GetKFListAsync) - 添加客服賬號(
AddAsync) - 邀請綁定客服賬號(
InviteWorkerAsync) - 設置客服信息(
UpdateAsync) - 上傳客服頭像(
UploadHeadimg) - 刪除客服賬號(
DelAsync) - 獲取在線客服接待會話數(
GetOnlineKFListAsync)
- 獲取客服基本信息(
- 客服管理(
-
微信網頁開發
- 網頁授權
- 獲取授權鏈接(
WxHelper >> GetAuthorizeUrl) - 通過code換取網頁授權access_token(
IOauth2Api >> GetAccessTokenAsync) - 刷新access_token(
IOauth2Api >> RefreshTokenAsync) - 拉取用戶信息(
ISnsApi >> GetUserInfoAsync) - 檢驗授權憑證(access_token)是否有效(
ISnsApi >> AuthAsync)
- 獲取授權鏈接(
- 網頁授權
-
對話能力
- 顧問管理
- 添加顧問
- 獲取顧問信息
- 修改顧問信息
- 刪除顧問
- 獲取服務號顧問列表
- 生產顧問二維碼
- 掃顧問二維碼后的事件推送
- 獲取顧問聊天記錄
- 設置快捷回復與關注自動回復
- 獲取快捷回復與關注自動回復
- 設置離線自動回復與敏感詞
- 獲取離線自動回復與敏感詞
- 新建顧問分組
- 獲取顧問分組列表
- 獲取顧問分組信息
- 分組內添加顧問
- 分組內刪除顧問
- 獲取顧問所在分組
- 刪除顧問分組
- 客戶管理
- 為顧問分配客戶
- 為顧問移除客戶
- 獲取顧問的客戶列表
- 為客戶更好顧問
- 修改客戶昵稱
- 查詢客戶所屬顧問
- 查詢指定顧問和客戶的關系
- 標簽管理
- 新建標簽類型
- 刪除標簽類型
- 為標簽添加可選值
- 獲取標簽和可選值
- 為客戶設置標簽
- 查詢客戶標簽
- 根據標簽值刷選客戶
- 刪除客戶標簽
- 設置自定義客戶信息
- 獲取自定義客戶信息
- 素材管理
- 添加小程序卡片素材
- 查詢小程序卡片素材
- 刪除 小程序卡片素材
- 添加圖片素材
- 查詢圖片素材
- 刪除圖片素材
- 添加文字素材
- 查詢文字素材
- 刪除文字素材
- 群發任務管理
- 添加群發任務
- 獲取群發任務列表
- 獲取指定群發任務信息
- 修改群發任務
- 取消群發任務
- 顧問管理
-
素材管理(
IMediaApi)- 新增臨時素材(
UploadAsync) - 獲取臨時素材
- 新增永久素材
- 獲取永久素材
- 刪除永久素材
- 修改永久圖文素材
- 獲取素材總數
- 獲取素材列表
- 新增臨時素材(
-
圖文消息留言管理
-
用戶管理
- 用戶標簽管理
- 設置用戶備注名
- 獲取用戶基本信息(UnionID機制)
- 獲取用戶列表
- 獲取用戶地理位置
- 黑名單管理
-
賬號管理
- 生產帶參數的二維碼
- 長鏈接轉短鏈接接口
- 短key托管
- 微信認證時間推送
-
數據統計
- 用戶分析
- 圖文分析
- 消息分析
- 廣告分析
- 分廣告位數據
- 返佣商品數據
- 結算收入數據
- 接口分析
-
微信卡券
- 微信卡券接口
- 更新日志
- 創建卡券
- 投放卡券
- 核銷卡券
- 管理卡券
- 卡券事件推送
- 卡券-小程序打通
- 微信禮品卡
- 會員卡專區
- 玩法介紹
- 創建會員卡
- 管理會員卡
- 特殊票券
- 卡券錯誤碼
- 第三方開發者模式
-
微信門店
- 微信門店接口
- 微信門店小程序接口
-
微信小店
-
智能接口
- 語義理解
- AI開放接口
- OCR識別
- 圖像處理
-
一物一碼
-
微信發票
-
微信非稅繳費
小程序
- 登錄
- 用戶信息
- ...
快速上手
本Sdk上手非常簡單,參考教程如下所示。
1)安裝包
Install-Package Magicodes.Wx.PublicAccount.Sdk.AspNet
推薦使用此包,亦可使用Magicodes.Wx.PublicAccount.Sdk來進行更多的自定義配置。
2)基礎配置
- 配置文件配置
公眾號的參考配置如下所示,請在appsettings.json文件中進行配置:
"Wx": { "PublicAccount": { "AppId": "", "AppSecret": "" }
- 通過代碼配置
參考代碼如下所示:
app.UseMagicodesWeChatSdk(setup => { setup.GetWeChatOptions = () => { //配置 return new WxPublicAccountOption() { AppId = "", AppSecret = "" }; }; });
3)配置Sdk
參考代碼如下所示:
public void ConfigureServices(IServiceCollection services) { //添加公眾號Sdk集成 services.AddMPublicAccountSdk() //使用內存緩存 .AddDistributedMemoryCache(); } public void Configure(IApplicationBuilder app) { //配置公眾號Sdk app.UseMPublicAccountSdk() //使用分布式緩存緩存Access Token .UseWxDistributedCacheForAccessToken(); }
4)調用Api
接下來就簡單了,通過依賴注入的方式注入相關Api,比如構造函數注入:
public HomeController(IMenuApi menuApi) { _menuApi = menuApi; }
然后就可以使用了,如下面代碼:
var result = await _menuApi.CreateAsync(new CreateMenuInput() { Button = new List<MenuButtonBase>() { new ClickButton() { Name = "今日歌曲", Key = "V1001_TODAY_MUSIC" }, new SubMenuButton() { Name = "菜單", SubButtons = new List<MenuButtonBase>() { new ViewButton() { Name = "搜索", Url = "http://www.soso.com/" }, //需關聯小程序后 //new MiniprogramButton() //{ // Name = "wxa", // Url = "http://mp.weixin.qq.com", // AppId = "wx286b93c14bbf93aa", // Pagepath = "pages/lunar/index" //}, new ClickButton() { Name = "贊一下我們", Key = "V1001_GOOD" } } } } }); result.EnsureSuccess();
微信服務器事件、消息處理和被動消息回復
如何處理微信服務器事件、消息,步驟如下所示:
1)配置Sdk
nuget包的安裝和公眾號的配置我們這里跳過,直接秀出Sdk配置代碼:
public void ConfigureServices(IServiceCollection services) { //注冊IWxEventsHandler,如需處理自定義事件消息,請務必實現IWxEventsHandler services.AddSingleton<IWxEventsHandler, TestWxEventsHandler>(); services.AddMPublicAccountSdk() .AddDistributedMemoryCache() //添加服務器消息事件處理器 .AddServerMessageHandler(); } public void Configure(IApplicationBuilder app) { //配置公眾號Sdk app.UseMPublicAccountSdk() //使用分布式緩存緩存Access Token .UseWxDistributedCacheForAccessToken(); }
2)實現IWxEventsHandler
參考代碼如下所示:
/// <summary> /// 公眾號事件消息處理程序 /// </summary> public class TestWxEventsHandler : IWxEventsHandler { /// <summary> /// 執行 /// </summary> /// <param name="fromMessage"></param> /// <returns></returns> public async Task<ToMessageBase> Execute(IFromMessage fromMessage) { if (fromMessage is FromTextMessage) { //返回多圖文 var toMsg = new ToNewsMessage() { Articles = new List<ToNewsMessage.ArticleInfo>() { new ToNewsMessage.ArticleInfo() { Description = "最簡潔最易於使用的微信Sdk,包括公眾號Sdk、小程序Sdk、企業微信Sdk等,以及Abp VNext集成。", PicUrl = "https://www.xin-lai.com/imgs/xinlai-logo_9d2c29c2794e6a173738bf92b056ab69.png", Title="Magicodes.Wx.Sdk簡介", Url = "http://xin-lai.com" } }, FromUserName = "Test", ToUserName = "Test" }; return await Task.FromResult(toMsg); } else if (fromMessage is FromSubscribeEvent) { //返回文本消息 return await Task.FromResult(new ToTextMessage() { Content = "歡迎關注!", }); } else if (fromMessage is FromTextMessage) { //返回文本 return await Task.FromResult(new ToTextMessage() { Content = "Test", }); } return await Task.FromResult(new ToNullMessage()); } }
相關事件和消息以及消息回復的定義,如下所示:
-
事件推送
- 關注事件:
FromSubscribeEvent - 取消關注事件:
FromUnsubscribeEvent - 掃碼事件:
FromScanEvent - 地理位置選擇器事件:
FromLocationEvent - 點擊事件:
FromClickEvent - 點擊菜單鏈接跳轉事件:
FromViewEvent - 模板消息推送完成事件:
FromTemplateSendJobFinishEvent - 點擊菜單跳轉小程序事件:
FromViewMiniprogramEvent
- 關注事件:
-
基礎消息
- 文本消息:
FromTextMessage - 圖片消息:
FromImageMessage - 語音消息:
FromVoiceMessage - 視頻消息:
FromVideoMessage - 小視頻消息:
FromShortVideoMessage - 地理位置消息:
FromLocationMessage - 鏈接消息:
FromLinkMessage
- 文本消息:
-
被動消息回復
- 回復文本消息:
ToTextMessage - 回復圖片消息:
ToImageMessage - 回復語音消息:
ToVoiceMessage - 回復視頻消息:
ToVideoMessage - 回復音樂消息:
ToMusicMessage - 回復圖文消息:
ToNewsMessage - 回復空消息(不回復):
ToNullMessage
- 回復文本消息:
MVC網頁授權
在ASP.NET MVC,我們可以通過本SDK快速獲得微信用戶信息,參考代碼如下所示:
//注意繼承WxPublicAccountControllerBase public class HomeController : WxPublicAccountControllerBase { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } //設置了WxPublicAccountOAuthFilter的Action在緩存過期的情況下,將自動跳轉到微信網頁授權頁面進行授權 //OAuthLevel設置為OpenIdAndUserInfo允許獲取粉絲信息 [WxPublicAccountOAuthFilter(OAuthLevel = OAuthLevels.OpenIdAndUserInfo)] public async Task<IActionResult> IndexAsync() { //調用父級控制器的獲取粉絲信息方法,該方法從ISnsApi中獲取粉絲詳細信息 var userResult = await GetWeChatUserInfoAsync(); var model = new UserInfo() { Headimgurl = userResult.Headimgurl, NickName = userResult.NickName, Sex = userResult.Sex }; _logger.LogDebug($"NickName:{userResult.NickName}"); return View(model); } }
Abp VNext集成
Magicodes.Wx.PublicAccount.Sdk默認提供了Abp VNext模塊,相關步驟如下所示:
1)安裝Magicodes.Wx.PublicAccount.Sdk.Abp
Install-Package Magicodes.Wx.PublicAccount.Sdk.Abp
2)添加模塊依賴
[DependsOn( typeof(WxPublicAccountSdkModule) )]
如需處理服務器事件消息,還需注冊IWxEventsHandler:
context.Services.AddSingleton<IWxEventsHandler, WxEventsHandler>();



