废话不多,直接贴代码:

//推送消息内容,此格式为键值对的名字不可更改
$data_arr = [
'keyword1'=>['value'=>$user_name['true_name']],
'keyword2'=>['value'=>date('Y-m-d H:i',time())],
'keyword3'=>['value'=>$user_phone['phone']],
'keyword4'=>['value'=>'绑定成功'],
'keyword5'=>['value'=>$store['store_name']],
'keyword6'=>['value'=>$user_name['true_name'].'已绑定到您的门店!'],
];
/**
* 发送模板消息
* @param openid 推送给哪个用户的微信openid
* @param form_id 微信返回的表单id
* @param data_arr 提交微信推送的表单数组
* @param wx_applet 小程序的appid和secret
* @param template 小程序的推送模版id
*/
public function wx_notice($openid,$form_id,$data_arr,$wx_applet,$template)
{
$post_data = array (
// 用户的 openID
"touser" => $openid,
// 小程序后台申请到的模板编号
"template_id" => $template,
// 点击模板消息后跳转到的页面,可以传递参数
"page" => "pages/user/friends",
// 第一步里获取到的 formID
"form_id" => $form_id,
// 数据
"data" => $data_arr,

);

$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$wx_applet['appid'].'&secret='.$wx_applet['secret'];
$html = file_get_contents($url);
$output = json_decode($html, true);
$access_token = $output['access_token'];
$url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=". $access_token;
// 将数组编码为 JSON
$data = json_encode($post_data, true);
$options = array(
'http' => array(
'method' => 'POST',
// header 需要设置为 JSON
'header' => 'Content-type:application/json',
'content' => $data,
// 超时时间
'timeout' => 60
)
);

$context = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );

return $result;
}

把自己的代码都贴出来了,应该都能看懂了。只有那个 form_id 把我搞蒙了,那个是微信返回的 id 前端传过来的。