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

article/2025/9/11 5:07:07

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

    • 步骤一:获取模板id
    • 步骤二:页面的form组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。
        • 1、wxml页面确认订单按钮如下来获取一个formid
        • 2、js获取formid并且请求get_form_id接口,把formid保存
        • 3、在get_form_id接口里接收formid并组装数据存到数据库
    • 步骤三:调用接口下发模板消息
        • 1、在**用户支付成功的接口**里我们调用如下的接口,把模板消息里需要的这5个数据都通过订单id获取到,赋值给data。然后再请求RoutineTemplateService::sendTemplate()。
        • 2、在RoutineTemplateService::sendTemplate()里获取参数,[获取access_token](https://mp.csdn.net/mdeditor/86238048#)。然后用RoutineServer::curlPost发起请求。

步骤一:获取模板id

登录https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。

在这里插入图片描述

步骤二:页面的form组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。

用formid举例:
注意:有的时候我们可能遇到某些情况,希望一次点击获取多个formid,此时请参考此文(https://www.jianshu.com/p/84dd9cd6eaed),我们只用修改wxml和wxss就行,js获取方式不变,不用改。

1、wxml页面确认订单按钮如下来获取一个formid

在这里插入图片描述

<form bindsubmit="subBuy" report-submit='true'> <button class='foot-wrapper' form-type='submit'>确定</button> 
</form>

2、js获取formid并且请求get_form_id接口,把formid保存

subBuy:function(e){wx.request({url: app.globalData.url + '/routine/auth_api/get_form_id?uid=' + app.globalData.uid,method: 'GET',data: {formId: e.detail.formId},})
}

3、在get_form_id接口里接收formid并组装数据存到数据库

/*** 收集发送模板信息的formID* @param string $formId*/
public function get_form_id($formId = ''){if((int)$formId == '' || $formId == 'the formId is a mock one') return JsonService::fail('no');$data['form_id'] = $formId;$data['uid'] = $this->userInfo['uid'];$data['status'] = 1; //未使用状态是1$data['stop_time'] = bcadd(time(),bcmul(6,86400,0),0);RoutineFormId::set($data);return JsonService::successful();
}

通过上面的get_form_id接口,数据库获得如下数据:
在这里插入图片描述

字段说明:

uid 就是用户id,一般就是当前操作(下单用户)的uid;
formid 相当于权限,只有拥有formid,才有资格给用户发送通知
stop_time 是失效时间,自己设定,一般是6或7天,如果当前时间大于这个时间,就不能发送通知了;
status 是状态,表示这个formid是否使用过,未使用是1,使用过是2,也就是在发送通知的时候使用,使用后就要把1改为2。

步骤三:调用接口下发模板消息

拿订单支付成功的消息来说,我们的模板消息如下:
单号{{keyword1.DATA}}
下单时间 {{keyword2.DATA}}
订单状态{{keyword3.DATA}}
支付金额 {{keyword4.DATA}}
支付方式{{keyword5.DATA}}

1、在用户支付成功的接口里我们调用如下的接口,把模板消息里需要的这5个数据都通过订单id获取到,赋值给data。然后再请求RoutineTemplateService::sendTemplate()。

/*** 订单支付成功发送模板消息* @param string $orderId 订单id*/
public static function sendOrderSuccess($orderId = ''){if($orderId == '') return ;$order = StoreOrder::where('order_id',$orderId)->find();$formId = RoutineFormId::getFormIdOne($order['uid']);//该方法获取数据库已存的未使用的formid$data['keyword1']['value'] =  $orderId;$data['keyword2']['value'] =  date('Y-m-d H:i:s',time());$data['keyword3']['value'] =  '已支付';$data['keyword4']['value'] =  $order['pay_price'];$data['keyword5']['value'] =  '线下支付';RoutineFormId::delFormIdOne($formId);//该方法更新该formid的status为2,就是已使用RoutineTemplateService::sendTemplate('这里是openid','这里是你选择的模板id','',$data,$formId);
}

2、在RoutineTemplateService::sendTemplate()里获取参数,获取access_token。然后用RoutineServer::curlPost发起请求。

/*** 发送模板消息* @$openId   接收者(用户)的 openid* @$templateId 所需下发的模板消息的id* @$link 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。* @$formId 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id* @param array $dataKey 模板内容,不填则下发空模板* @$emphasisKeyword 模板需要放大的关键词,不填则默认不放大*/public static function sendTemplate($openId = '',$templateId = '',$link = '',$dataKey = array(),$formId = '',$emphasisKeyword = ''){if($openId == '' || $templateId == '' || $formId == '') return false;$accessToken = RoutineServer::get_access_token();$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=".$accessToken;$data['touser'] =  $openId;$data['template_id'] =  $templateId; $data['page'] =  $link; $data['form_id'] =  $formId;$data['data'] =  $dataKey;$data['emphasis_keyword'] =  $emphasisKeyword;return json_decode(RoutineServer::curlPost($url,json_encode($data)),true);}

RoutineServer::curlPost方法如下:

public static function curlPost($url = '', $postData = '', $options = array())
{if (is_array($postData)) {$postData = http_build_query($postData);}$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数if (!empty($options)) {curl_setopt_array($ch, $options);}//https请求 不验证证书和hostcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$data = curl_exec($ch);curl_close($ch);return $data;
}

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

相关文章

小程序模板消息

一,制定小程序订阅消息模板 示例图片 (图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…

微信小程序——添加广告

微信小程序——添加广告 要想在微信小程序中加入广告&#xff0c;首先要在微信小程序后台开通流量主 流量主需要满足&#xff1a;1、累计独立访问&#xff08;uv)不低于1000&#xff1b;2、有严重违规的小程序不与开通。 广告主要有&#xff1a;banner广告、激励视频广告、卡…

微信小程序广告接入

个人推荐: &#x1f4e2;&#x1f4e2;&#x1f4e2; 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。点击跳转到教程。 1.广告接入 前天看了看以前写的微信小程序&am…

小程序中插入广告

一、小程序广告种类简介&#xff1a; 小程序流量主可开通广告位包括&#xff1a;小程序Banner广告位、激励式广告位、视频前贴广告位&#xff08;仅限非游类目小程序&#xff09;、视频广告&#xff08;仅限非游类目小程序&#xff09;、小程序格子广告、小程序原生模板广告。…

微信小程序的广告方式有哪些

之前小木和大家介绍了小程序的朋友圈广告功能&#xff0c;紧接着就收到小伙伴的咨询&#xff1a;除了朋友圈广告&#xff0c;小程序在微信中还有其他广告入口吗&#xff1f;答案是肯定的&#xff0c;今天接着来和大家介绍小程序在微信生态中的广告方式都有哪些。 微信小程序的广…