需要准备:小程序账号、https的网站
1.小程序-模板消息-添加选择的模板消息

微信小程序模板消息php后台

2.小程序-设置-开发者设置-开启消息推送

微信小程序模板消息php后台

因成功开启消息推送需要验证URL(服务器)的地址、微信会发送Token验证地址的真实及是否可以用.所以需要在你的服务器网站目录放这么一个test.php文件,假设你放在服务器网站的根目录,那么你的URL服务器地址就是:https://moke-1257820295.cos.ap-guangzhou.myqcloud.com/test.php.
test.php代码如下,下面这段php代码是用验证URL服务器的:

$wechatObj = new wechatAPI();//实例化
$wechatObj->isValid();//调用isValid()函数
class wechatAPI
{
public function isValid()//验证微信接口,如果确认是微信就返回它传来的echostr参数
{
 $echoStr = $_GET["echostr"];
 if ($this->checkSignature()) {
 echo $echoStr;
 exit;
 }
}
private function checkSignature() //官方的验证函数
{
 $signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 $token = "hellomoke";
 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 if( $tmpStr == $signature ){
 return true;
 }else{
 return false;
 }
}
};

3.小程序页面需加代码:
(1)pages里面wxml的表单中需加上

report-submit

,这个是用来获取formid,formid是用来提交给微信的,这里需要的一点是在微信开发工具里获取不到formid的值,需要在真机模拟中才能获取formid
(2)pages里面js需要加如下函数代码可以在button提交的时候触发。函数代码如下:

微信小程序模板消息php后台

代码中的关键词根据上图你的模板消息变化

formSubmit: function (e) {
var formid = e.detail.formId;//获取表单的formId
var tarPage = 'pages/single/single'//模板消息点击跳转链接
wx.request({
url: 'https://moke-1257820295.cos.ap-guangzhou.myqcloud.com/test.php',//服务器地址
data: {
  openid: openid,//需获取微信api获取用户的openid
  formid: formid,//需根据表单
  tarPage: tarPage,
  keyword1: keyword1,//根据微信小程序-模板消息上面的关键词填
  keyword2: keyword2,
  keyword3: keyword3,
  keyword4: keyword4,
  },
header: {
"Content-type": "application/json",
},
success: function (res) {
console.log(res.data);
},
fail: function (err) {
console.log(err);
}
})
}

4.URL服务器上面需处理小程序发过来的数据所以,需要在test.php的代码class类里面加上如下函数,然后再class类调用处理函数

$wechatObj->test();//调用函数
class wechatAPI
{
...........
...........
...........
public function test()
{
    $openid = $_GET['openid'];
    $formid = $_GET['formid'];
    $temid = "G3iMUj02tOOWlSY58bQHI";//填入你模板消息的模板ID
    $page = $_GET['tarPage'];
    $key1 = $_GET['keyword1'];//根据你模板消息的关键词变化数量
    $key2 = $_GET['keyword2'];
    $key3 = $_GET['keyword3'];
    $key4 = $_GET['keyword4'];
    if(!$openid||!$formid)die('failed!');//判断是否有没有传入用户openid和formid
    $access_token = $this->returnAssKey();
    $url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
    $data = array(//这里一定要按照微信给的格式
        "touser"=>$openid,
        "template_id"=>$temid,
        "page"=>$page,
        "form_id"=>$formid,
        "data"=>array(
            "keyword1"=>array(
                "value"=>$key1,
                "color"=>"#173177"
            ),
            "keyword2"=>array(
                "value"=>$key2,
                "color"=>"#173177"
            ),
            "keyword3"=>array(
                "value"=>$key3,
                "color"=>"#173177"
            ),
            "keyword4"=>array(
                "value"=>$key4,
                "color"=>"#173177"
            )
        ),
    );
    $res = $this->postCurl($url,$data,'json');//将data数组转换为json数据
}
public function returnAsskey()//获取小程序的accesstoken
{
    &appid=appid;//填入你小程序appid
    &secret=secret;//填入你小程序secret
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid&secret';
    $ass_key = $this->curl_get($url);
    $a1 = $ass_key->access_token;
    return $a1;
}
public function curl_get($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    return json_decode($data);//对数据进行json解码
}
public function postCurl($url,$data,$type)
{
    if($type == 'json'){
        $data = json_encode($data);//对数组进行json编码
        $header= array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");
    }
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,$url);
    curl_setopt($curl,CURLOPT_POST,1);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
    if(!empty($data)){
        curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
    }
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
    $res = curl_exec($curl);
    if(curl_errno($curl)){
        echo 'Error+'.curl_error($curl);
    }
    curl_close($curl);
    return $res;
}
}

5.到这里代码就部署完毕了,你就可以在小程序里面真机模拟中测试点击button提交表单测试效果
实际效果如下:

微信小程序模板消息php后台

6.有一点要吐槽的是:模板消息通知-只能A用户发给A用户,不能实现A用户发给B用户。