小程序 发送模板消息的功能实现

article/2025/9/11 4:50:12

☹. 背景

- 小程序开发的过程中,绝大多数会满足微信支付
- 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯
- 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道友们少踩点坑...
  • 微信消息通知 的区别:
1. 微信网页版、公众号的消息提醒要求用户必须 "关注商家公众号",才支持消息的接收并且还有个奇怪的毛病:如果近期内未与该公众号有所交流,依然收不到消息提醒再者,消息的样式需代码进行自定义(麻烦)
2. 微信小程序,可支持"服务通知"只需配置好自己的 "模板消息",通过获取用户的 "openid" 即可进行来自微信服务的消息通知的样式,可在小程序的管理后台进行选取,预览(人性化)
  • 此处参考京东购物的消息通知如下(也就是在下想要实现的效果):

❶ 前期准备

①. 首先,微信小程序官方文档为我们提供了指导 — 【发送模板消息】

我们可以先对文档进行一遍 简单的浏览,以方便自己的流程理解,避免蒙头苍蝇乱撞

②. 小程序给与了我们最方便的手动模板配置方式

  • 我们可以先去 1(模板库)中选取自己需要的模板,自定义标题、排序
  • 申请成功之后,进入 2(我的模板)中就可以看到自己能够使用的模板,我们后期进行代码编辑时,用到的就是那个模板ID

❷ 实现步骤

此处,主要以 <form/> 组件形式的实现为例,对于prepay_id 的实现请参考文末的 附录

1. 小程序端的要求

语境:微信支付成功后,对用户发送一条"订单支付成功通知"的模板消息

  • 第一步:以我的代码实现为例,首先需要对我的 <form/> 组件进行需发模板消息的声明,即设置属性 report-submit="true"(【个人建议,请使用真机测试,不排除部分使用开发工具无法获取 form_id 的情况】)

  • 第二步:对应的 pages/cart/payment.js代码中,编写的提交代码,以及对 event参数打印的结果则为:

注意:截图部分只是为了,获取并保存我们需要的 formId

> - 其实,后面的代码还可以有很多的逻辑处理,以我的代码逻辑为例:
> - 我继续进行了表单数据的规范验证 -> wx.request 数据提交 -> 唤醒微信支付 -> 支付结果的回调处理
  • 第三步:request 调用发送消息通知的方法

以我的逻辑为例,是在执行完微信支付回调后,判断支付成功才进行调用的

此处,直接提供上述截图中 pages/cart/payment.js 所需要用到的两个核心方法

 /*** 微信支付成功后的 消息模板的发送*/sendTemplatePaySuccess: function() {var self = this;var postData = {sn: self.data.order_sn,form_id: self.data.formId};self.http_post('https://xxx.com/wx/sendTemplatePaySuccess', postData, (data) => {wx.navigateTo({url: '/pages/cart/results/index?status=1&type=pay&orderInfo=' + JSON.stringify(self.data.orderInfo),});})},/*** 封装 http 函数,默认‘GET’ 提交*/http_post:function(toUrl, postData, httpCallBack) {wx.request({url:  toUrl,data: postData,method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'content-type': 'application/x-www-form-urlencoded;charset=utf-8',},success: function (res) {//回调处理return typeof httpCallBack == "function" && httpCallBack(res.data);},fail: function (error) {console.log(error);}})},

2. 服务端代码配置

我对服务端的代码,整合集中在了一个文件中,可从附录中进行下载

  • 第一步:替换小程序配置信息

  • 第二步:修改方法 sendTemplatePaySuccess()

  • 提示:

>  1.此方法是对应于 pages/cart/payment.js 中的 "Https://xxx.com/wx/sendTemplatePaySuccess",应该不会理解错吧!
>  2.一般的设计逻辑,是在用户注册、初次授权登录的时候就将其 openid 写到数据库中,后期使用时可随时调用
>  3.如果前期没有写入数据库,也可以考虑直接授权获取,参考文章 [【微信小程序Ⅴ [获取登录用户信息,重点openID(详解)】]](https://blog.csdn.net/u011415782/article/details/79559639)
>  4.template_id 直接在小程序账号后台复制即可,但是请将 $rawPost['data']['keyword?']['value'] 顺序对应正确哦

❸ 运行测试

  • ①. 首先,要 特别注意 一点,不可以使用 微信开发者工具进行测试,不然会有如下报错:

可参考道友解释: 小程序 表单 formId 为 the formId is a mock one

  • ②. 并且,如果已经发送过一次模板消息,会有如下提示信息:
//#这说明,你的formid 已经用过了,系统要求只能使用一次!!!
{"status":0,"result":"sendTemplatePaySuccess Failed!","data":{"errcode":41029,"errmsg":"form id used count reach limit hint: [9mUwja01342277]"}
}

❹ 附录

A. 补充信息

  • 开发文档中有这样一句话:

  • 值得注意:
第一点:使用 "<form/>" 组件获得的 "formId" 只能使用一次相对适合的通知业务 —— 支付成功或失败后,充值成功、	续费成功、挂号成功等被动响应的信息...第二点:"prepay_id" 只有进行了支付行为才能获得,并且必须支付成功!一个 "prepay_id" 可以使用三次相对适合的通知业务有 —— 后台发货提醒、审核通知、课程开班提醒、拼团成功通知等主动推送的信息...第三点:prepay_id 使用时的报错信息://# 如果支付不成功,但是要使用获得的 prepay_id,会有如下类似的信息{"data":{"errcode":41028,"errmsg":"invalid form id hint: [XiZ04574125]"}}//# 如果支付成功,使用获得的 prepay_id 次数超过了三次,会有如下的信息:{"data":{"errcode":41029,"errmsg":"form id used count reach limit hint: [oFN1Aa08963936]"}}

B. 后台发货通知的设计思路

	1. 首先,我们在数据表设计时,对于订单表需要有一个存储微信支付后 "prepay_id"的存储字段2. 进行微信支付时,将生成的 "prepay_id" 存到数据表中3. 当对已支付订单进行后台发货操作时,调用的通知模板,使用前面数据表中的 "prepay_id" 数据4. 其他的服务端代码设计 同上文中的 "sendTemplatePaySuccess()" 方法
  • 温馨提示:

毕竟存放的 "prepay_id" 最多只用使用三次,所以对于项目设计中的使用位置要做好规划 !!!

C. 使用真机测试,顺利运行的效果为:

D. Access_Token 建议

官方文档 - 获取 access_token

  • 代码中,所必须涉及到的业务 —— access_token 的获取,请参考文档介绍,进行定时刷新,以避免不必要的资源请求
  • 个人的思路就是,创建数据表字段,根据其返回的时长 expires_in,在失效前保存数据 access_token
  • 可根据自己的实际需求,优化小编提供的 opGetAccessToken() 方法!
  • 有一点,或许很多人不多加注意:
	当项目已上线,如果你线下依旧测试使用了获取 "access_token" 的操作,这会影响线上服务的!因为,一旦重新获取了 "access_token" 信息,微信服务器便会在短时间内,对之前的 "access_token" 进行失效处理建议,可以考虑在线下直接使用线上获得的 "access_token",不要随意去刷新请求获取,影响大局就尴尬了...

❺. 源代码参考

  • 请对应代码进行正确配置哦
  • CSDN下载地址 >>>
  • GitHub下载地址 >>>

http://chatgpt.dhexx.cn/article/v6ZFSBqY.shtml

相关文章

微信小程序-----消息模版(最全解释)

最近小程序在码界里嫌弃腥风血雨&#xff0c;每一个码奴都感觉世界给自己又多开一个扇窗&#xff0c;本菜鸟也眼红不已&#xff0c;就尝试着写了一个小程序&#xff0c;今天跟大家分享一下自己在写消息模版时候遇到的坑&#xff0c;希望能帮助每一位路过踩坑的道友&#xff1b;…

微信小程序模板消息推送

时序图 ​​​​​​​ 首先&#xff0c;我们需要知道一件事情&#xff0c;小程序的模板推送分为“一次性订阅”和“长期订阅” 一次性订阅&#xff1a;用户订阅小程序后&#xff0c;程序只能对指定OpenId进行一次推送模板消息&#xff0c;无法多次推送 长期订阅&#xff1a…

小程序发送模板消息给用户 —— 一次性模板实现“长期订阅”

大家好&#xff01;我是我玩亚索我会C&#xff0c;在写小程序时&#xff0c;我们会有向用户发送消息的需求&#xff0c;比如发送提醒通知&#xff0c;或者是一些重要通知来形成一个服务的闭环。这就要用到微信的发送消息功能了&#xff0c;下面我使用Java语言来详细演示下如何使…

小程序发送模板消息详细步骤

小程序发送通模板消息详细步骤 步骤一&#xff1a;获取模板id步骤二&#xff1a;页面的form组件&#xff0c;属性report-submit为true时&#xff0c;可以声明为需发模板消息&#xff0c;此时点击按钮提交表单可以获取formId&#xff0c;用于发送模板消息。或者当用户完成支付行…

小程序模板消息

一,制定小程序订阅消息模板 示例图片 (图1) 首先我们来讲一下如何获取制定微信小程序的订阅消息模板, 如图1所示我们首先要登录到微信公众平台,如图 而后进入到图1所示的订阅消息这个页面, 如果你是首次进入的话那么需要开通, 这里比较简单就不用讲解了, 如果说进入之后…

微信小程序能实现盈利的7大流量主广告组件及其分成模式概览

前段时间涉足了微信小程序流量主广告的接入&#xff0c;所以就学习和了解了一下相关的介绍与接入场景。因此做一下笔记记录。 概览 微信小程序流量主广告组件有Banner 广告、激励视频广告、插屏广告、小程序视频广告、视频前贴广告、Grid 广告、原生模板广告等。 基础介绍 什…

小程序无限插屏广告实现方法

大家好啊&#xff0c;最近突然想到一个问题&#xff0c;自己做为一个程序员&#xff0c;每天发的公众号文章和程序根本没半毛钱关系&#xff0c;靠分享一些破解软件浑浑度日&#xff0c;再这样下去恐怕要废。所以今天给自己技术群的狗子们分享一个小知识点&#xff0c;如何让你…

我做的小程序,昨天赚了 2.06 元广告费

我做的小程序&#xff0c;昨天赚了 2.06 元广告费 先看一下广告上线三天的收益&#xff0c;虽然不多&#xff0c;但很快乐hhh。 2020 年 6月接触了小程序云开发&#xff0c; 那时候还不太会写太复杂的小程序界面&#xff0c;于是就找了几个开源的框架改了改。 因为当时所处的行…

小程序流量主运营

个人和小微企业可通过小程序流量主进行变现&#xff0c;如果你擅长推广&#xff0c;有较多的粉丝那么小程序变现无疑是一种很好的收入渠道。小程序流量主的开通渠道门槛并不高——满1000人即可开通流量主。 那么我们运营什么样的小程序开通流量主进行流量变现呢&#xff1f;以…

Uni-app 小程序 APP 的广告变现之路:插屏广告

插屏广告 插屏广告组件是由客户端原生的图片、文本、视频控件组成的&#xff1b;一般来说&#xff0c;插屏广告可以实现比传统信息流广告和banner广告展现更大的广告尺寸&#xff0c;同样能够满足您对大量曝光和用户转化的需求。 平台差异说明 AppH5微信小程序支付宝小程序百…

小程序进入首页时弹出广告

项目需求&#xff0c;判断用户是否开通会员&#xff0c;没开通会员的话每次进入小程序弹出一个引导开通会员的弹窗&#xff0c;已经开通会员的不在弹 先看下效果图 wxml代码 <!-- 广告展示 --><view class"mask" hidden"{{showAd}}"><view…

uniapp 小程序 加载显示激励视频广告

uniapp激励广告文档&#xff1a;uni-app官网https://uniapp.dcloud.io/api/a-d/rewarded-video微信官网激励广告文档&#xff1a;激励视频广告 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/ad/rewarded-video-a…

微信 小游戏/小程序 广告组件被驳回 审核不通过

最近做微信小游戏开发&#xff0c;接入广告时遇到一些问题&#xff0c;被驳回了好几次。 相信大家接过微信小游戏或者小程序广告都晓得&#xff0c;接入很简单&#xff0c;不论是banner广告还是激励视频广告只要在合适的位置合适的时机去展示广告&#xff0c;都会顺利审核通过…

微信小程序添加激励式广告

目录 微信小程序创建项目配置底部导航栏 微信小程序滚动播放内容 微信小程序功能中心模块开发 微信小程序个人中心页面开发 微信小程序获取电话号码 微信小程序显示列表数据 微信小程序显示分页列表 微信小程序添加插屏广告 微信小程序添加激励式广告 最终效果可扫码查看 遇…

微信小程序添加插屏广告

目录 微信小程序创建项目配置底部导航栏 微信小程序滚动播放内容 微信小程序功能中心模块开发 微信小程序个人中心页面开发 微信小程序获取电话号码 微信小程序显示列表数据 微信小程序显示分页列表 微信小程序添加插屏广告 微信小程序添加激励式广告 最终效果可扫码查看 遇…

小程序banner广告和激励广告

小程序banner广告和激励广告 1、小程序banner广告 1.1、先要在小程序公众后台获取广告位ID 代码片 <view class"empty"><ad unit-id"广告id"></ad></view>注意事项&#xff1a; Banner 广告不允许直接设置样式属性&#xff0c;…

小程序也能接广告了,微信小程序广告位投放指南!

小程序也能接广告了&#xff0c;微信小程序广告位投放指南! 3月15日消息&#xff0c;据爆料&#xff0c;微信已经开始秘密测试在小程序中投放广告&#xff0c;并且流传出了一份《微信小程序广告位投放指引》&#xff0c;意味着微信小程序已经准备开启广告投放权限。面向10亿用户…

做了个小程序,广告收益2.60元广告费

呜呜呜&#xff0c;做了个小程序&#xff0c;广告收益好少啊&#xff01; 第一天投放&#xff0c;曝光了一千多&#xff0c;只有两块的收益ecmp好低&#xff01;&#xff01;&#xff01; 这收入实在太低了&#xff0c;一千多的曝光量才两块哎 用的banner和视频广告两个 视频…

小程序流量主申请,如何增加小程序广告的点击率?

小程序开发者千千万&#xff0c;真正赚$的却没有多少&#xff0c;尤其是像我这种个人业余开发者。不过&#xff0c;有想法不去实现一把总会觉得心有不甘&#xff0c;送大家一句话&#xff1a;为道者&#xff0c;虽千万人吾往矣&#xff01; 相信大多数小程序开发者和我一样&am…

小程序设置激励广告

1、申请好广告&#xff0c;获取广告代码 2、在要放广告的wxml页面&#xff0c;放入点击弹出激励广告按钮 <view wx:if"{{isshow 0}}" bindtap"adshow" style"text-align: center;background-color: #F8F8F8;height: 70rpx;margin-top: 34rpx;lin…