因微信小程序平台相关功能升级,模板消息已改为订阅消息,
相关功能的开发请阅读:微信小程序订阅消息(服务通知)。
在小程序开发过程中,为了让小程序与用户有一定的交互性;
我们通常会使用 服务通知 来和用户进行交互,
这里记录一下自己使用使用方法,
便于后期自己的使用,和大家的学习。
服务消息的发送主要在服务端进行请求,
当用户本人在微信体系内与页面有交互行为时,
就可以使用模板消息,发送给用户了:
在小程序中,模板消息的发送主要 formId
和 prepay_id
。
表单提交场景时,为 submit 事件带上的 formId;
支付场景下,为本次支付的 prepay_id。
请求地址:
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN // POST
有两个方法可以获取模板 ID:
通过模板消息管理接口获取模板 ID;
在微信公众平台手动配置获取模板 ID。(这里使用)
这里使用表单提交时, submit
事件带上的 formId
;
页面的 form
组件,属性 report-submit
为 true
时,
可以声明为需要发送模板消息,
此时点击按钮提交表单可以获取 formId
,用于发送模板消息。
<form bindsubmit="submitForm" report-submit='true' >
<button form-type="submit">提交</button>
</form>
获取
submitForm: function (e) {
console.log(e.detail.formId);
},
注:e.detail.fromId,就是formid,真机中才会产生,模拟器中为 the formId is a mock one
重要:
第一点:
使用 "<form/>" 组件时,获得的 "formId" 只能使用一次(仅七天内有效);
所以要选择适当的场景进行发送,或是注意对formId
第二点:
"prepay_id" 只有进行了支付行为才能获得,并且必须支付成功(才可以使用)!
一个 "prepay_id" 可以使用三次,
详细函数函数
/**
* [sendTemplateMessage 发送模板消息]
* @param string $openid [用户OPENID]
* @param string $form_id [表单提交场景]
* @param array $data [消息内容]
* @param string $template_id [模板ID]
* @return [type] [description]
*/
function sendTemplateMessage($openid, $form_id, $data=[], $page='index', $template_id='设置默认模板ID')
{
// $data = array('11111','222222','3333333');
foreach ($data as $k => $v) {
$keyword['keyword'.($k+1)] = array('value'=>$v);
}
// dump($keyword);die;
$getAccessTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=小程序appid&secret=小程序secret';
$rs = json_decode(httpRequest($getAccessTokenUrl));
if ($rs->access_token) {
$postUrl = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$rs->access_token;
$post_data = array(
'access_token' => $rs->access_token,
'touser' => $openid, // 用户openid
'template_id' => $template_id, // 消息模板ID
'page' => $page, // 小程序跳转页面
'form_id' => $form_id, // 表单提交场景
'data' => $keyword, // 模板内容
);
$re = httpRequest($postUrl, 'POST', json_encode($post_data));
return $re;
}
return false;
}
httpRequest 为封装的CURL请求
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论