.NET之盛派微信SDK简单操作

开篇语

在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

预售┃连锁反应装置积木好玩到尖叫!

▲数据汪特别推荐点击上图进入玩酷屋之前推荐的“小小机械师”成了孩子最受欢迎的玩具&#xff0c;玩了的孩子几乎没有不喜欢的。还有家长买多套送给朋友的孩子作为生日礼物。有家长来问&#xff0c;还有没有这种类型的新产品。和厂家咨询后&#xff0c;小木找到了一款“小小机…

java文件调用脚本_Java中调用文件中所有bat脚本

//调用外部脚本String fileipsnull;//所有的路径String[] filesnull;String fileipnull;//单个路径try {InputStream is Thread.currentThread().getContextClassLoader().getResourceAsStream("pdfconfig.properties"); //加载线程文件成为流Properties prop new …

VMware VSphere 虚拟化云计算学习配置笔记(四)

2:接下来配置安装vcenter-db&#xff0c;安装MS SQL 2008r2 在vcenter-db服务器上安装配置MS SQL 2008r2过程截图&#xff1a; 这里可能会要耐心等一下才会出现一下提示&#xff1a; 选择左边installation 之后出现右边第一项新的安装&#xff1a; 转载于:https://blog.51cto.c…

【招聘(北京)】今天誉讯(北京)有限公司招聘高级.NET软件开发前端工程师

.NET高级开发工程师薪水范围&#xff1a;18-25k工作职责1、负责公共平台开发与维护&#xff0c;根据网站发展对技术架构不断调整、对网站性能调优&#xff1b;2、完成详细需求的分析与设计&#xff0c;并完成相关技术文档&#xff1b;3、按照项目任务和项目计划&#xff0c;完成…

IT人回家过年的尴尬

全世界只有3.14 % 的人关注了数据与算法之美春节将至&#xff0c;有很多人已经踏上了返乡的旅途&#xff0c;回家开开心心过春节&#xff0c;归心似箭的心表明了他们对家乡的热爱&#xff0c;归心似箭的心显示了他们想念父母的情&#xff0c;归心似箭的心代表了他们对朋友的思。…

java 判断进程状态_获取远程服务器上 Java 进程的运行状态

为了安全考虑, 有些服务器会被限制登录. 本文介绍如何获取远程服务器上 Java 进程的运行状态.启动 jstatd 服务在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获取服务器上 Java 程序的运行状态.在服务器上创建 jstatd 的授权文件, 假设文件路径为/etc/jstatd.all…

彻底搞定C指针-函数名与函数指针[转]

一 通常的函数调用 一个通常的函数调用的例子&#xff1a; //自行包含头文件 void MyFun(int x); //此处的申明也可写成&#xff1a;void MyFun( int );int main(int argc, char* argv[]) {MyFun(10); //这里是调用MyFun(10);函数return 0; }void MyFun(int x) //这…

聊一聊Elasticsearch和MySQL的常用操作

前言 ElasticSearch&#xff0c;开源的搜索和数据分析引擎&#xff0c;也是名列前茅的 nosql。很多时候会想拿它和关系型数据库做对比&#xff0c;严格上它们是没有太多可比性的。不过把有的东西放在一起比较&#xff0c;会帮助我们快速去理解一些 ElasticSearch 的内容。老黄这…

入门Python,限时1元!

爆竹声中一岁除&#xff0c;春风送暖入屠苏。猪年来袭&#xff0c;小天先跟各位模粉拜年啦&#xff01;当然&#xff0c;小天还准备了限时福利送给大家~套路&#xff1f;不存在的&#xff01;限时9元1深度学习限时体验第一章 深度学习概述与计算机视觉挑战1.1深度学习概述1.2 挑…

java 线程访问控件_C#多线程与跨线程访问界面控件的方法

本文实例讲述了C#多线程与跨线程访问界面控件的方法。分享给大家供大家参考。具体分析如下&#xff1a;在编写WinForm访问WebService时&#xff0c;常会遇到因为网络延迟造成界面卡死的现象。启用新线程去访问WebService是一个可行的方法。典型的&#xff0c;有下面的启动新线程…

centos服务器解决vsftp连接时的“550 Create directory operation failed.”错误

在centos服务器中配置好vsftp后&#xff0c;开了root用户上传权限&#xff0c;也关了系统的防火墙&#xff0c;但ftp连接的时候依然还会出现 "550 Create directory operation failed." 错误&#xff0c;如何解决呢&#xff1f; 解决&#xff1a; 1、查看 SELinux 的…

使用 Bridge to Kubernetes 简化云端开发

当我们面对一个大型应用程序&#xff0c;它有大量的微服务&#xff0c;并希望完成一些功能开发&#xff1f;我们面临许多挑战&#xff0c;其中之一将是处理正确的环境&#xff0c;如何进行开发。我们知道&#xff0c;在团队中解决这个问题的最佳方法是将其容器化并在云上托管。…

菜鸟学习数据科学家 5 大误区

全世界只有3.14 % 的人关注了数据与算法之美你准备好要成为一名数据科学家&#xff0c;积极的参加Kaggle比赛和Coursera的讲座。虽然这一切都准备好了&#xff0c;但是一名数据科学家的实际工作与你所期望的却是大相径庭的。本文研究了作为数据科学家新手的5个常见错误。这是由…

java多线程 sycophantic_Java多线程volatile和synchronized总结

volatile是轻量级的synchronized&#xff0c;在多处理器(多线程)开发中保证了共享变量的“可见性”。可见性表示当一个线程修改了一个共享变量时&#xff0c;另外一个线程能读到这个修改的值。正确的使用volatile&#xff0c;能比synchronized的使用和执行成本更低&#xff0c;…

[BOOST] BOOST::Format

cout << format( "%1% says \"%2%\" to %1%.\n" ) % "Yousen" % "Hello";这句话将在标准输出上输出“Yousen says "Hello" to Yousen.”接下来简单说明一下format的用法。估计聪明人都猜到了&#xff0c;在格式化字符…

using IDisposable

using和IDisposable是组合使用的&#xff0c;像这种一个关键字和一个接口的组合&#xff0c;在C#中很少见的&#xff0c;using这个关键字&#xff0c;也就因为IDisposable多了一个身份。其实很多人都知道IDisposable&#xff0c;有一个方法void Dispose()&#xff0c;通常是用来…

春节特惠活动┃不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?...

▲数据汪特别推荐点击上图进入玩酷屋之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是&#xff1a;据统计&#xff0c;我国腰椎病患者已经突破2亿人。30~40岁人群中&#xff0c;患有颈腰椎病的占比59.1%&#xff01;而且有…

linux mysql phpadmin_linux安装phpmyadmin数据库管理

安装phpmyadminyum -y install phpmyadmin //执行yum在线安装程序安装完成后&#xff0c;可在/usr/share目录下找到phpMyAdmin找到 phpMyAdmin/libraries/config.default.php文件&#xff0c;将config.default.php复制到phpmyadmin目录下&#xff0c;然后更名为config.inc.…

2012平安夜

2012平安夜&#xff0c;我的博客园开通了&#xff0c;在这里我将与他开始崭新的学习生活。

.Net单元测试方法

单元测试是一种编程测试&#xff0c;这些测试既可以使用 Visual C# 或 Visual Basic 编写&#xff0c;也可以使用 Visual C 编写并用 /clr:safe 选项进行编译。单元测试用于通过直接调用某个类的方法&#xff08;传递相应参数&#xff09;来执行其他源代码。因此&#xff0c;如…