小程序官方限制:發送模板消息必須由用戶自己觸發一個表單提交才能發送。
小程序:
<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);
}