.NET之盛派微信SDK簡(jiǎn)單操作
本文轉(zhuǎn)載自微信公眾號(hào)「鵬祥」,作者AZRNG 。轉(zhuǎn)載本文請(qǐng)聯(lián)系鵬祥公眾號(hào)。
介紹
Senparc.Weixin SDK 是由盛派網(wǎng)絡(luò)(Senparc)團(tuán)隊(duì)自主研發(fā)的針對(duì)微信各模塊的開(kāi)發(fā)套件(C# SDK),已全面支持微信公眾號(hào)、小程序、微信支付、企業(yè)號(hào)、開(kāi)放平臺(tái)、JSSDK、搖一搖周邊等模塊。有一些東西都已經(jīng)封住在sdk里面,不需要我們?cè)龠M(jìn)行那些繁瑣的操作。
示例
要對(duì)接微信公眾號(hào),我們首先得有一個(gè)微信公眾號(hào)(我本來(lái)是使用我自己公眾號(hào),奈何好多好玩的功能沒(méi)有權(quán)限需要微信認(rèn)證),我們可以通過(guò)微信申請(qǐng)測(cè)試號(hào)來(lái)學(xué)習(xí)使用,申請(qǐng)地址 該測(cè)試號(hào)可以直接體驗(yàn)和測(cè)試公眾平臺(tái)的所有高級(jí)接口。https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
通過(guò)測(cè)試號(hào)我可以可以得到我們想要的微信公眾號(hào)參數(shù)信息
通過(guò)VS2019(好想盡快體驗(yàn)VS2022)新建一個(gè).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請(qǐng)求代碼,因此裝了該包。
添加配置
- //CO2NET
- "SenparcSetting": {
- "IsDebug": true,
- "DefaultCacheNamespace": "DefaultCache" //緩存通過(guò)前綴區(qū)分
- },
- //Senparc.Weixin SDK
- "SenparcWeixinSetting": {
- "IsDebug": true,
- "Token": "token",
- "EncodingAESKey": "EncodingAESKey",
- "WeixinAppId": "appid",
- "WeixinAppSecret": "secret"
- }
通過(guò)配置IsDebug可以配置是否以Debug模式運(yùn)行。
關(guān)于SenparcWeixinSetting為何叫做這個(gè)名字?是因?yàn)榕渲弥袑?xiě)死的
ConfigureServices中注冊(cè)服務(wù)
- services.AddMemoryCache()//使用本地緩存必須添加
- .AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注冊(cè)(必須)
也可以采用redis等其他方法存儲(chǔ)配置信息等
Configure中啟用服務(wù)
- //注冊(cè) Senparc.Weixin 及基礎(chǔ)庫(kù)
- app.UseSenparcGlobal(env, senparcSetting.Value, _ => { }, true)
- .UseSenparcWeixin(senparcWeixinSetting.Value,
- weixinRegister => weixinRegister.RegisterMpAccount(senparcWeixinSetting.Value));
通過(guò)這些配置我們可以獲取accesstoken
- var accessToken = await AccessTokenContainer.GetAccessTokenAsync(_configuration["SenparcWeixinSetting:WeixinAppId"]).ConfigureAwait(false);
自定義消息回復(fù)
要實(shí)現(xiàn)接受用戶(hù)的消息,并且做出回應(yīng),我們需要繼承MessageHandler,新建CustomerMessageHandler類(lèi),該類(lèi)中實(shí)現(xiàn)了網(wǎng)上說(shuō)的價(jià)值一個(gè)億的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>
- /// 回復(fù)以文字形式發(fā)送的信息(可選)
- /// </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,);//注意:只有測(cè)試號(hào)或部署到正式環(huán)境的正式服務(wù)號(hào)可用此接口
- //responseMessage.Content = $"你發(fā)送了文字:{requestMessage.Content}\r\n\r\n你的OpenId:{OpenId}";//以文字類(lèi)型消息回復(fù)
- responseMessage.Content = requestMessage.Content.Replace("嗎", "").Replace('?', '!').Replace('?', '!');
- return responseMessage;
- }
- /// <summary>
- /// 默認(rèn)消息
- /// </summary>
- public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
- {
- var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
- responseMessage.Content = "歡迎來(lái)到我的公眾號(hào)!";
- return responseMessage;
- }
- }
啟用消息處理器
- //使用中間件注冊(cè) MessageHandler,指定 CustomMessageHandler 為自定義處理方法
- app.UseMessageHandlerForMp("/weixinmsg",
- (stream, postModel, maxRecordCount, serviceProvider) =>
- new CustomerMessageHandler(stream, postModel, maxRecordCount, serviceProvider),
- options => { options.AccountSettingFunc = context => senparcWeixinSetting.Value; });
這個(gè)時(shí)候我們已經(jīng)實(shí)現(xiàn)了用戶(hù)消息的接收和回復(fù)代碼,不過(guò)還需要在微信平臺(tái)進(jìn)行配置(為了可以讓微信發(fā)送消息到該代碼,我使用了內(nèi)網(wǎng)穿透功能供微信訪問(wèn)該地址)
如果你修改接口配置信息,提交成功說(shuō)明微信可以調(diào)通該接口,這個(gè)時(shí)候就可以關(guān)注微信測(cè)試號(hào),發(fā)送消息查看結(jié)果。
自定義菜單
通過(guò)編寫(xiě)接口來(lái)實(shí)現(xiàn)自定義菜單配置
- [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 = "基礎(chǔ)知識(shí)",
- 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
通過(guò)調(diào)用該接口實(shí)現(xiàn)自定義菜單配置,顯示下面的菜單
參考文檔
GitHub:https://github.com/JeffreySu/WeiXinMPSDK
sdk文檔地址:https://www.cnblogs.com/szw/p/weixin-course-index.html