当前位置: 首页 > 后端技术 > Node.js

[博客小程序]评论通知功能实现(一)——小程序发送模板消息的几种实现

时间:2023-04-03 11:35:16 Node.js

【博客小程序】评论通知功能的实现(一)——小程序发送模板消息的几种实现触达可答痛点。本文主要讲一下发送模板消息的坑。使用前的准备,先阅读文档,了解模板消息的发送方式和获取方式,然后到你的后台选择你想要的消息模板,并记录下对应的模板ID。刚开始看文档的时候,感觉挺简单的。无非是调用接口获取ACCESS_TOKEN,然后调用接口发送模板消息。当然,这是事实,但仍有一些陷阱。后端实现后端实现对我来说是最简单的。毕竟我是从事后端开发的。我是用.netcore的方式实现的,很容易搞定。粘贴代码。至于java还是php,都差不多。///

///获取新的AccessToken//////publicstaticasyncTaskGetAccessToken(){varurl=$"{WechatApiHost}/cgi-bin/令牌”;varresponse=awaitHttpRequestHelper.GetAsync(url,new{grant_type="client_credential",appid=WechatAppId,secret=WechatSecret},null,GlobalRequestConfig);返回response.IsSucceed&&response.Data!=null?response.Data.access_token:null;}//////发送模板消息//////模板消息。///Openidentifier.publicstaticasyncTasksendTemplateMessage(StringopenId){//先从redis获取tokenvaraccessToken=awaitRedisInstance.Get(MiniAccessTokenRedisKey);if(string.IsNullOrWhiteSpace(accessToken)){accessToken=awaitGetNewAccessToken();if(string.IsNullOrWhiteSpace(accessToken))returnnewResponseResult{Result=false,ErrorMessage="令牌获取失败",Code=ResponseCode.InvalidParameters};//保存到redis,默认1小时awaitRedisInstance.Set(MiniAccessTokenRedisKey,accessToken,1*60*60);}varurl=$"{WechatApiHost}/cgi-bin/message/wxopen/template/send?access_token={accessToken}";vartempData=new{touser=openId,template_id=MiniMessageTemplate,//应用模板消息id,page="/pages/detail/detail?blog=1",form_id=FormId,data=new{keyword1=new{value="元素1"},keyword2=new{value="元素2"},keyword3=new{value="元素3"}},//emphasis_keyword="keyword1.DATA"};varresponse=awaitHttpRequestHelper.PostAsync<动态>(url,tempData,null,GlobalRequestConfig);varsendResult="";如果(!response.IsSucceed)返回新的ResponseResult{Result=false,ErrorMessage=response.ErrorMessage,Code=ResponseCode.UnknownException};returnnewResponse{Result=true,ErrorMessage="",Code=ResponseCode.Success};}js实现js的方式与后端代码实现类似。它还调用具有相同逻辑的两个接口。这里主要介绍避免重复造轮子的util函数#github地址https://github.com/lcxfs1991/wx-js-utils对应的微信开放平台接口基本已经封装好了,文档也比较详细。有兴趣的可以自己去体验一下。云调用实现是我想要的。我的博客小程序部分功能是基于云端开发??的。同时,云调用的实现方式省去了获取ACCESS_TOKEN的步骤,使用起来更加方便。具体实现文档比较详细。在使用之前,你必须在你的云函数目录下添加config.json文件,声明调用的接口,并上传到云端。#声明使用发送模板消息接口{"permissions":{"openapi":["templateMessage.send"]}}这样就可以正常使用了。粘贴我发送模板消息的代码:constsendResult=awaitcloud.openapi.templateMessage.send({touser:touser,templateId:template,formId:form_id,page:'pages/detail/detail?blogId='+event.blogId,data:{keyword1:{value:event.nickName//ofkeyword1的值},keyword2:{value:event.message//keyword2的值}},})本以为一切顺利,但毕竟花了很长时间。上传到云端后一直提示:functionhasnopermissiontocallthisAPI。首先怀疑我的config.json没有上传,通过云开发后台下载了对应的函数,发现已经上传了,同时确认没有问题配置。再仔细看文档,看到这句话:versionrequirements:wx-server-sdk>=0.4.0,developertools>=1.02.1903251(目前需要开发版或beta版)所以尝试下载开发版,又试了下云函数上传,问题解决。“眼泪都流出来了。”所以使用云调用实现的朋友一定要注意自己的开发工具。使用ACCESS_TOKEN时,一定要注意。推荐使用统一服务获取和刷新access_token。其他业务逻辑使用的access_token来自本服务,不要单独刷新,否则容易造成冲突,导致access_token覆盖,影响业务。另外,开发版工具支持云函数本地调试。同时,云开发的管理界面也有了很大的改变。有兴趣的可以下载试试。最后,下篇文章会讲到我的博客小程序中评论通知功能的具体实现。附言。小程序名称:程序员的博客