轻量易用的微信Sdk发布——Magicodes.Wx.Sdk

概述


最简洁最易于使用的微信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)
        {
            //配置公众号Sdk
            app.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,如需处理自定义事件消息,请务必实现IWxEventsHandler
        services.AddSingleton<IWxEventsHandler, TestWxEventsHandler>();
        services.AddMPublicAccountSdk()
            .AddDistributedMemoryCache()
            //添加服务器消息事件处理器
            .AddServerMessageHandler();
    }


    public void Configure(IApplicationBuilder app)
    {
        //配置公众号Sdk
        app.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值