小程序官方限制:发送模板消息必须由用户自己触发一个表单提交才能发送。
小程序:
<form report-submit='true' bindsubmit="end">
<button class='btn' type='primary' form-type="submit" >提交</button>
</form>
report-submit='true' 是必须设置的。否则获取不到formId
小程序js:
end:function(e){
var formId = e.detail.formId;
//向后台发起请求,并传递formId
wx.request({
url: 'test/end',
method: 'post',
data: {
"formId": formId
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function (res) {
},
fail: function (e) {
}
})
}
PHP后台:
public function end(){
$appid = config('xcx_appid');
$secret = config('xcx_appid');
//获取access_token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
$result = file_get_contents($url);
$result = json_decode($result,true);
$at = $result['access_token'];
$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=".$at;
$p['touser'] = "ok2amqczqTFF335F8v1g-zncTeJs";//用户openid
$p['weapp_template_msg'] = array(
'template_id' => 'mvxoKq450n2Ft4jqy-8sTa4rX5quReOcx8ZXkmfmFYc',//模板消息ID
'page' => 'pages/warning/index',
'form_id' => $formId,
'data' => array(
'keyword1' => array(
'value' => date("Y年m月d日H时i分s秒")
),
'keyword2' => array(
'value' => '您有一条信息,请查看'
)
),
'emphasis_keyword' => '123'
);
$r = $this->curlPostJson($url,$p);
}
public function curlPostJson($url,$post_fields) {
//自定义头信息
$postJson = json_encode($post_fields);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false, //为true时会将将头文件的信息作为数据流输出。
CURLOPT_POST => true,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => ROOT_PATH."public/assets/ssl/cacert.pem",
CURLOPT_POSTFIELDS => $postJson
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result,true);
}