开篇语

在6月5号,我报名去参加了微软举办的一个线下分享的技术市集,分享人是苏老师和赵老师(非常感谢),其中苏老师讲述了关于一些容器的部署等操作(也可以观看我的历史文章),其中关于部署的示例代码是使用盛派微信SDK做了一个对接微信回复消息的动能,又一次引起了我的好奇(之前是自己看微信文档对接、进行配置验证保存access_token等操作),通过该sdk可以帮助我们省下不少事情来让我们少加班。下面我就通过该sdk来实现两个简单的功能。

介绍

Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的开发套件(C# SDK),已全面支持微信公众号、小程序、微信支付、企业号、开放平台、JSSDK、摇一摇周边等模块。有一些东西都已经封住在sdk里面,不需要我们再进行那些繁琐的操作。

示例

要对接微信公众号,我们首先得有一个微信公众号(我本来是使用我自己公众号,奈何好多好玩的功能没有权限需要微信认证),我们可以通过微信申请测试号来学习使用,申请地址 该测试号可以直接体验和测试公众平台的所有高级接口。https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

通过测试号我可以可以得到我们想要的微信公众号参数信息

image.png

通过VS2019(好想尽快体验VS2022)新建一个.Net5 WebApi程序

安装组件

    <PackageReference Include="RestSharp" Version="106.11.7" /> <PackageReference Include="Senparc.Weixin.MP" Version="16.12.101-preview2" /><PackageReference Include="Senparc.Weixin.MP.Middleware" Version="0.3.100.1-preview2" /><PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />

为了方便(偷懒),我直接使用了postman生成的RestSharp请求代码,因此装了该包。

添加配置

  //CO2NET "SenparcSetting": {"IsDebug": true,"DefaultCacheNamespace": "DefaultCache" //缓存通过前缀区分},//Senparc.Weixin SDK"SenparcWeixinSetting": {"IsDebug": true,"Token": "token","EncodingAESKey": "EncodingAESKey","WeixinAppId": "appid","WeixinAppSecret": "secret"}

通过配置IsDebug可以配置是否以Debug模式运行。

关于SenparcWeixinSetting为何叫做这个名字?是因为配置中写死的

image.png

ConfigureServices中注册服务

    services.AddMemoryCache()//使用本地缓存必须添加.AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注册(必须)

也可以采用redis等其他方法存储配置信息等

Configure中启用服务

    //注册 Senparc.Weixin 及基础库app.UseSenparcGlobal(env, senparcSetting.Value, _ => { }, true).UseSenparcWeixin(senparcWeixinSetting.Value,weixinRegister => weixinRegister.RegisterMpAccount(senparcWeixinSetting.Value));

通过这些配置我们可以获取accesstoken

var accessToken = await AccessTokenContainer.GetAccessTokenAsync(_configuration["SenparcWeixinSetting:WeixinAppId"]).ConfigureAwait(false);

自定义消息回复

要实现接受用户的消息,并且做出回应,我们需要继承MessageHandler,新建CustomerMessageHandler类,该类中实现了网上说的价值一个亿的AI核心代码,看到就是赚到。

    /// <summary>/// 自定义消息处理器/// </summary>public class CustomerMessageHandler : MessageHandler<DefaultMpMessageContext>{public CustomerMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, IServiceProvider serviceProvider = null): base(inputStream, postModel, maxRecordCount, false, null){}/// <summary>/// 回复以文字形式发送的信息(可选)/// </summary>public override async Task<IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage){var responseMessage = base.CreateResponseMessage<ResponseMessageText>();// await Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendTextAsync(Config.SenparcWeixinSetting.MpSetting.WeixinAppId, OpenId,);//注意:只有测试号或部署到正式环境的正式服务号可用此接口//responseMessage.Content =  $"你发送了文字:{requestMessage.Content}\r\n\r\n你的OpenId:{OpenId}";//以文字类型消息回复responseMessage.Content = requestMessage.Content.Replace("吗", "").Replace('?', '!').Replace('?', '!');return responseMessage;}/// <summary>/// 默认消息/// </summary>public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage){var responseMessage = base.CreateResponseMessage<ResponseMessageText>();responseMessage.Content = "欢迎来到我的公众号!";return responseMessage;}}

启用消息处理器

            //使用中间件注册 MessageHandler,指定 CustomMessageHandler 为自定义处理方法app.UseMessageHandlerForMp("/weixinmsg",(stream, postModel, maxRecordCount, serviceProvider) =>new CustomerMessageHandler(stream, postModel, maxRecordCount, serviceProvider),options => { options.AccountSettingFunc = context => senparcWeixinSetting.Value; });

这个时候我们已经实现了用户消息的接收和回复代码,不过还需要在微信平台进行配置(为了可以让微信发送消息到该代码,我使用了内网穿透功能供微信访问该地址)

image.png

如果你修改接口配置信息,提交成功说明微信可以调通该接口,这个时候就可以关注微信测试号,发送消息查看结果。

image.png

自定义菜单

通过编写接口来实现自定义菜单配置

        [HttpGet]public async Task<string> GetAsync(){var accessToken = await AccessTokenContainer.GetAccessTokenAsync(_configuration["SenparcWeixinSetting:WeixinAppId"]).ConfigureAwait(false);var bg = new ButtonGroup();var oneSubButton = new SubButton{name = "基础知识",sub_button = new List<SingleButton>{new SingleViewButton{name = "日志",url = "https://XXXXXX/appmsgalbum?__biz=MzU4MjU4NjgyOQ==&action=getalbum&album_id=1841538022157172741#wechat_redirect",}}};bg.button.Add(oneSubButton);bg.button.Add(new SingleViewButton{name = "文章目录",url = "https://www.yuque.com/docs/share/9aed821e-9115-41c7-a0cd-6b691ad7e400"});var result = CommonApi.CreateMenu(accessToken, bg);return "成功" + result;}

参考地址:

https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

通过调用该接口实现自定义菜单配置,显示下面的菜单

image.png

参考文档

GitHub:https://github.com/JeffreySu/WeiXinMPSDK

sdk文档地址:https://www.cnblogs.com/szw/p/weixin-course-index.html

.NET之盛派微信SDK简单操作相关推荐

  1. ASP.NET CORE下用盛派微信SDK取微信openid

    用CORE做项目用到微信的相关东西,听说那个盛派微信SDK很火,自己弄了下,只是简单的用用,用户访问页面取微信openid

  2. 使用盛派微信SDK(Senparc.Weixin.MP)设计公众号被动回复API不返回信息问题

    研究了一晚上,终于找到原因了,这坑挖的真是害人不浅 不能收到回复的原因为两点: 1. 盛派官方的sdk例子根本是错误的,post请求也必须传参而不是使用盛派的model 2.返回结果要用Content ...

  3. 基于SENPARC盛派微信sdk的.net WebService微信公众号的相关开发(包含从零开始本机测试环境搭建//token验证//获取微信推送消息//向微信推送消息)

    前言: 由于微信公众号正式号,一直在被使用,所以在研发的时候,本机测试环境,就显得非常重要. 而且在自己闲暇之余,可以自己尝试更深程度的微信公众号的研发工作. 1.首先,必要的网站 http://sd ...

  4. 盛派微信 The ‘hr‘ start tag on line 6 position 2 does not match the end tag of ‘body’ 错误解决方案

    .NET Core微信支付退款 Senparc.Weixin.TenPay V3接口 The 'hr' start tag on line 6 position 2 does not match th ...

  5. 公众号开发(2) —— 盛派.net SDK + vue搭建微信公众号网页开发框架

    需求:通过微信公众号菜单跳转到手机端网页,跳转后通过微信授权登录获取微信公众号用户的OpenId(用户关注公众号后,用户在公众号的唯一凭证),通过OpenId和后台数据库用户信息绑定起来并实现一些业务 ...

  6. 使用盛派Senparc SDK微信开发

    毕业后一直在写Web,主要写微信端现在所用盛派的SDK开发效率挺快的推荐一下. Senaprc.Weixin SDK 是目前使用率最高的微信 .NET SDK,也是最受欢迎的 .NET 开源项目之一. ...

  7. 前端怎么做接口签名验证 -baijiahao_微信H5介绍:Razor+Mvc+盛派微信接口

    01 微信H5 介绍 介绍一个.NET Mvc下开发微信H5的案例,这个是2年前找了一个封装比较简洁友好的一个Demo,开发环境是Razor+mvc+盛派接口,当然前提是你首先要熟悉微信开放平台以及微 ...

  8. 微信php开发包,TP5专用微信sdk使用教程

    # TP5专用微信sdk下载及使用教程 [TOC] ## TP5专用微信sdk概述 >[info] 本SDK是我本人根据现有网络的sdk,专门针对TP5框架进行的整理和重构,使用安装和使用更方便 ...

  9. .net 调用盛派SDK微信支付

    1,下载盛派代码 https://github.com/JeffreySu/WeiXinMPSDK 2,使用OAuth2.0 方式 获取 Openid a,获取 微信公众号里配置的 回调url (ur ...

  10. 手把手教你简单接入微信SDK

    就看微信现在这么火的样子,如果你的APP不接入微信的SDK好像就有点脱离了时代大车轮一样.一个成功的APP,不单单凭借着一个好的想法,一个好的功能,最主要还是用户量.用户量就好像是水,我们的APP就一 ...

最新文章

  1. Django框架详细介绍---cookie、session、自定义分页
  2. 1.4 通过时间的反向传播-深度学习第五课《序列模型》-Stanford吴恩达教授
  3. @springbootapplication 注解_Spring Boot最核心的27个干货注解,你了解多少?
  4. 第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })
  5. opengl加载显示3D模型MDL类型文件
  6. WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用 Control 不能在创建它的 Thread 之外被调用。但可以通过 invoke 来保证 C
  7. php微信分享接口调用,TP5的微信分享接口和JSSDK使用
  8. .NET Core CLI 的性能诊断工具介绍
  9. 从 Flink Forward Asia 2021,看Flink未来开启新篇章
  10. Web API Filter ActionFilterAttribute 使用
  11. undefined reference to `sqlite3_column_table_name‘
  12. 基于51单片机的keli安装方法
  13. 捷联惯导系统模型及仿真
  14. iOS端抓包工具-stream
  15. 路由器硬件升级和软件改造
  16. elasticsearch 在不是 not_analyzed 的前提下如何全匹配的效果
  17. 电脑族:常点眼药水,还得干眼症?
  18. 2021年山东省职业院校技能大赛中职组网络安全赛项竞赛样题
  19. http与htpps的区别
  20. 巨人2012年Q2财报解读:刘伟电话会议回答分析师提问

热门文章

  1. pos收银系统 php,POS收银系统
  2. 10 大开源免费的项目管理软件推荐
  3. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
  4. 大数据开发之Hive优化篇6-Hive on spark
  5. Effient技术原理
  6. RecycleView 删除指定item
  7. c# wpf 利用截屏键实现截屏功能
  8. 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)...
  9. 欧拉回路和Hanmilton回路
  10. 计算机课玩游戏检讨500字,电脑课玩游戏的检讨书