微信公众号 模版消息详细教程(附代码)

时间:2024-05-19 18:07:35

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。

如图:

微信公众号 模版消息详细教程(附代码)

如上图所示,在我们的生活中,无论是微商城消费,还是日常生活消费,都可能收到这种提示,比如订单通知,快递状态通知,银行卡支付通知,都属于业务通知,很多公众号也都实现了这种功能,当触发了某种行为或状态改变,就会发送这么一个消息给你,因为这种消息都是按照一定的的格式来编辑,所以也叫模板消息。
 

发送模板消息

1.公众号这边要提示一下,查看你的公众号是否是服务号,登录微信公众平台,找到功能,选择模板消息

微信公众号 模版消息详细教程(附代码)

然后选择相应的行业,提交审核,审核通过后保存之后,选择合适的模板,微信会给该模板分配一个ID,待我们要发送模板消息的时候就需要用到这个ID了。

2.发送给用户

打开文档”发送模板消息”
获得发送模板的接口地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

使用POST的方式来发送,并且把模板消息的数据以json数据的格式传递到该接口。

微信公众号 模版消息详细教程(附代码)

必传的只有 touser接收者,template_id模板id,data模板数据这3个参数,其他的可以不传,如果传了就会有相应的跳转,比如跳转至指定url,或者跳转至小程序。

json数据

$template=array(
            'touser'=>$openid, //用户openid
            'template_id'=>$tenpalate_id, //在公众号下配置的模板id
            'url'=>"https://www.szyunshutong.com/api/official/memberRechargeRecords.html", //点击模板消息会跳转的链接
            'topcolor'=>"#7B68EE",
            'data'=>array(
                'first'=>array('value'=>urlencode("您好,您已成功进行充值。"),'color'=>"#000000"),
                'accountType'=>array('value'=>urlencode('数量'),'color'=>'#000000'), //keyword需要与配置的模板消息对应
                'account'=>array('value'=>urlencode($coin_num),'color'=>'#000000'),
                'amount'=>array('value'=>urlencode($money),'color'=>'#000000'),
                'result'=>array('value'=>urlencode('充值成功'),'color'=>'#000000'),
                'remark' =>array('value'=>urlencode('如有疑问,请致电联系我们'),'color'=>'#000000'), )
        );
        $json_template=json_encode($template);

 

注意点:检查获取我们调用接口的凭据AccessToken(日限额2000次,时效2小时),我当时第一次就是败在这AccessToken

上,源码中最后一个方法是重新获取AccessToken的,参考!

3.直接上源码

   /**
     * 发送模板消息
     */
    public function send_notice($openid,$money,$coin_num){
        //获取access_token
        if ($_COOKIE['access_token']){
            $access_token2=$_COOKIE['access_token'];
        }else{
            $token=$this->get_access_token_mp();
        }
        //模板消息

        $tenpalate_id="-pFrstxxxlTGcmIJTa8twuZFozHnqCmkVO3Lae5uR34";
        //模板消息
        $template=array(
            'touser'=>$openid, //用户openid
            'template_id'=>$tenpalate_id, //在公众号下配置的模板id
            'url'=>"https://www.szyunshutong.com/api/official/memberRechargeRecords.html", //点击模板消息会跳转的链接
            'topcolor'=>"#7B68EE",
            'data'=>array(
                'first'=>array('value'=>urlencode("您好,您已成功进行路票充值。"),'color'=>"#000000"),
                'accountType'=>array('value'=>urlencode('路票数量'),'color'=>'#000000'), //keyword需要与配置的模板消息对应
                'account'=>array('value'=>urlencode($coin_num."张"),'color'=>'#000000'),
                'amount'=>array('value'=>urlencode($money."元"),'color'=>'#000000'),
                'result'=>array('value'=>urlencode('充值成功'),'color'=>'#000000'),
                'remark' =>array('value'=>urlencode('如有疑问,请致电联系我们'),'color'=>'#000000'), )
        );
        $json_template=json_encode($template);
        $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;
        $res=$this->curl_post($url,urldecode($json_template));
//        print_r($res);die;
        if ($res['errcode']==0){
            return 1;
        }else{
            return 0;
        }
    }
    /**
     * 将模板消息json格式化(根据情况灵活组合,我这里直接把模板消息放到了请求发送的接口)
     */
    public function json_tempalte(){
        $tenpalate_id="-pFrstxxxlTGcmIJTa8twuZFozHnqCmkVO3Lae5uR34";
        //模板消息
        $template=array(
            'touser'=>'.$openid.', //用户openid
            'template_id'=>".$tenpalate_id.", //在公众号下配置的模板id
            'url'=>".$uel.", //点击模板消息会跳转的链接
            'topcolor'=>"#7B68EE",
            'data'=>array(
                'first'=>array('value'=>urlencode("您的活动已通过"),'color'=>"#FF0000"),
                'accountType'=>array('value'=>urlencode('测试文章标题'),'color'=>'#FF0000'), //keyword需要与配置的模板消息对应
                'account'=>array('value'=>urlencode(date("Y-m-d H:i:s")),'color'=>'#FF0000'),
                'amount'=>array('value'=>urlencode('测试发布人'),'color'=>'#FF0000'),
                'result'=>array('value'=>urlencode('充值成功'),'color'=>'#FF0000'),
                'remark' =>array('value'=>urlencode('备注:这是测试'),'color'=>'#FF0000'), )
        );
        $json_template=json_encode($template);
        return $json_template;
    }
    /**
     * @param $url
     * @param array $data
     * @return mixed
     * curl请求
     */
    function curl_post($url , $data=array()){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        // POST数据
        curl_setopt($ch, CURLOPT_POST, 1);
        // 把post的变量加上
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
    //获取微信公众平台token
    public function get_access_token_mp()
    {
        $token = session("access_token_mp");
        if($token){
            return $token;
        }
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appId}&secret={$this->appSecret}";
        $res = $this->curl_post($url);
        $td = json_decode($res, true);
        if($td['access_token']){
            session("access_token_mp", $td['access_token'], $td['expires_in'] - 120);
            return $td['access_token'];
        }else{
            return false;
        }
    }

4.运行时把json数据传入到方法中,我们可以看到打印出来的返回的结果。

{"errcode":0,"errmsg":"ok","msgid":232391810540961792}

errcode为0代表已经发送成功。如果errcode是其他值,请打开文档的错误返回码页面中查找错误信息。

附模板消息接口文档地址:https://mp.weixin.qq.com/advanced/tmplmsg?action=faq&token=299852868&lang=zh_CN

 

有疑问的,可以私信我!!!