zoukankan      html  css  js  c++  java
  • 轻量易用的微信Sdk发布——Magicodes.Wx.Sdk

    概述

    最简洁最易于使用的微信Sdk,包括公众号Sdk、小程序Sdk、企业微信Sdk等,以及Abp VNext集成。

    名称Nuget
    Magicodes.Wx.PublicAccount.Sdk NuGet
    Magicodes.Wx.PublicAccount.Sdk.AspNet NuGet
    Magicodes.Wx.PublicAccount.Sdk.Abp NuGet

    如何贡献?

    如何快速封装一个微信接口?(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列表群发【订阅号不可用,服务号认证后可用】
        •  删除群发【订阅号与服务号认证后均可用】
        •  预览接口【订阅号与服务号认证后均可用】
        •  查询群发消息发送状态【订阅号与服务号认证后均可用】
      •  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>();
    作者:雪雁
    出处:http://www.cnblogs.com/codelove/
    沟通渠道:编程交流群<85318032> 产品交流群<897857351>
    如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    静听鸟语花香,漫赏云卷云舒。
  • 相关阅读:
    Linux 系统使用WordPress开启“固定链接设置”之后部分页面打不开(404)的解决办法
    WordPress安全配置
    去掉Windows2003的自动锁定
    用IP访问wordpress的css和js为何不能加载
    元素伸缩
    Cookie之获设删
    输入0开头的数字,自动纠正
    PHP入门(一)
    node.js(一)
    vue-demo-tab切换
  • 原文地址:https://www.cnblogs.com/codelove/p/14548814.html
Copyright © 2011-2022 走看看