最近项目上用到了微信小程序的模板消息功能,但是在接入的过程当中遇到了个 form_id
的坑,微信文档里并没有详细的描述这一块儿的内容,所以在这里做一下记录,希望看到这篇文章的开发者们不要踩坑。
这个是发送模板消息的接口,一个 POST
请求
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
WX20180827-153242.png
需要给他传递4个必填参数,其中 form_id
参数较为特殊,需要通过微信小程序端表单提交组件来获取这个 form_id
如果是支付后发送模板消息的话,那就用支付后得到的 prepay_id
就可以了。
我这里的做法是将一个按钮改成了表单提交的方式,同时也绑定了自己的点击事件业务逻辑。这样就可以做到静默获取 form_id
,省去了一些交互步骤。
<form bindsubmit="submitInfo" report-submit='true' >
<button class='start_button' bindtap='start' form-type="submit">立即开始</button>
</form>
注意
report-submit
要设置成true
才可以获取到form_id
这样就可以在 js
里的 submitInfo
方法中通过 e.detail.formId
获取, 然后传递到服务端保存到数据库。
submitInfo: function(e){
console.log("formId",e.detail.formId);
}
注意
formId
有效期是7
天,而且每次获取的formId
只可以用于发送【一次】模板消息。另外,模拟器是获取不到formId
的,模拟器获取会报错the formId is a mock one
只有在真机中才可以获取到。而且,安卓和IOS获取到的formId
长度有差异。安卓类似这样1535357741912
IOS类似这样b44a8191a2254759d51552f11bc27100
PHP端发送模板消息最好用我下面这样的方式提交POST请求
//$url 是请求地址
//$data 是json字符串
//发送模版消息
private function httpRequest($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty ($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data)
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
开发过程中还遇到了某些情况取不到formId的问题,在微信开放社区提问后得到解决。帖子地址
https://developers.weixin.qq.com/community/develop/doc/00004c7a7d05b8f98747df72b56000
网友评论