概述
最简洁最易于使用的微信Sdk,包括公众号Sdk、小程序Sdk、企业微信Sdk等,以及Abp VNext集成。
名称 | Nuget |
---|---|
Magicodes.Wx.PublicAccount.Sdk | |
Magicodes.Wx.PublicAccount.Sdk.AspNet | |
Magicodes.Wx.PublicAccount.Sdk.Abp |
如何贡献?
如何快速封装一个微信接口?(30秒即可编写一个微信Api,欢迎多多PR)
如何快速定义一个微信上传文件的接口?
具体请访问Github:https://github.com/xin-lai/Magicodes.Wx.Sdk
RoadMap
公众号
"Wx": {"PublicAccount": {"AppId": "","AppSecret": ""}}
快速上手
本Sdk上手非常简单,参考教程如下所示。
01
安装包
Install-Package Magicodes.Wx.PublicAccount.Sdk.AspNet
推荐使用此包,亦可使用Magicodes.Wx.PublicAccount.Sdk
来进行更多的自定义配置。
02
基础配置
配置文件配置
公众号的参考配置如下所示,请在appsettings.json
文件中进行配置:
"Wx": {"PublicAccount": {"AppId": "","AppSecret": ""}
通过代码配置
参考代码如下所示:
app.UseMagicodesWeChatSdk(setup =>{setup.GetWeChatOptions = () =>{//配置return new WxPublicAccountOption(){AppId = "",AppSecret = ""};};});
03
配置Sdk
参考代码如下所示:
public void ConfigureServices(IServiceCollection services){//添加公众号Sdk集成services.AddMPublicAccountSdk()//使用内存缓存.AddDistributedMemoryCache();}public void Configure(IApplicationBuilder app){//配置公众号Sdkapp.UseMPublicAccountSdk()//使用分布式缓存缓存Access Token.UseWxDistributedCacheForAccessToken();}
04
调用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();
微信服务器事件、消息处理和被动消息回复
如何处理微信服务器事件、消息,步骤如下所示:
01
配置Sdk
nuget包的安装和公众号的配置我们这里跳过,直接秀出Sdk配置代码:
public void ConfigureServices(IServiceCollection services){//注册IWxEventsHandler,如需处理自定义事件消息,请务必实现IWxEventsHandlerservices.AddSingleton<IWxEventsHandler, TestWxEventsHandler>();services.AddMPublicAccountSdk().AddDistributedMemoryCache()//添加服务器消息事件处理器.AddServerMessageHandler();}public void Configure(IApplicationBuilder app){//配置公众号Sdkapp.UseMPublicAccountSdk()//使用分布式缓存缓存Access Token.UseWxDistributedCacheForAccessToken();}
02
实现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模块,相关步骤如下所示:
01
安装Magicodes.Wx.PublicAccount.Sdk.Abp
Install-Package Magicodes.Wx.PublicAccount.Sdk.Abp
02
添加模块依赖
[DependsOn(typeof(WxPublicAccountSdkModule)
)]
如需处理服务器事件消息,还需注册IWxEventsHandler:
context.Services.AddSingleton<IWxEventsHandler, WxEventsHandler>();
联系我们
01
文档官网
https://docs.xin-lai.com/
02
博客
http://www.cnblogs.com/codelove/
03
其他开源库
https://github.com/xin-lai
https://gitee.com/magicodes