微信公众号发送消息模板

前言

大部分的微信公众号项目都要实现推送消息给用户的功能,如下单成功、支付成功、退款成功...都要发送消息给用户,刚好最近项目要实现发送消息模板功能,下面用PHP简单实现功能。

Tips

  1. 微信公众号要开通发送消息模板功能,并添加模板
  2. 发送的用户必须关注该公众号

1575968541(1).png

1575969719(1).png

代码

<?php   
    public function sendNotice(){
        //获取access_token
        if (Cookie::get('access_token')){
            $access_token = Cookie::get('access_token');
        }else{
            $access_token = $this->getAccessToken();
        }
        //模板消息
        $json_template = $this->jsonTempalte();
        $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$access_token";
        $res=$this->curl($url,urldecode($json_template));
        if ($res['errcode']==0){
            return '发送成功';
        }else{
            return '发送失败';
        }
    }

    public function getAccessToken()
    {
        $appid = '你的微信公众号appid';
        $appsecret = '你的微信公众号appsecret';
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
        $json_token=$this->curl($url);
        $res=json_decode($json_token,true);
        $access_token=$res['access_token'];
        Cookie::set('access_token',$access_token,7200);//这里可以优化用redis储存
        return $access_token;
    }

    /**
     * 将模板消息json格式化
     */
    public function jsoneTmpalte(){
        //模板消息
        $template=array(
            'touser'=>"用户openid",  //用户openid
            'template_id'=>"在公众号下配置的模板id", //在公众号下配置的模板id
            'url'=>"http://www.xxxxxxx.cn/", //点击模板消息会跳转的链接
            'topcolor'=>"#7B68EE",
            'data'=>array(
                'first'=>array('value'=>urlencode("您已下单成功"),'color'=>"#FF0000"),
                'keyword1'=>array('value'=>urlencode('订单号'),'color'=>'#FF0000'),  //keyword需要与配置的模板消息对应
                'keyword2'=>array('value'=>urlencode("商品信息"),'color'=>'#FF0000'),
                'keyword3'=>array('value'=>urlencode('订单金额'),'color'=>'#FF0000'),
                'remark' =>array('value'=>urlencode('备注:这是测试'),'color'=>'#FF0000'), )
        );
        $json_template=json_encode($template);
        return $json_template;
    }

    /**
     * 服务器之间请求的curl方法
     *
     * @param $url 请求地址
     * @param array $field post参数
     * @return string
     */
    function curl($url , $field = []){
        //初始化curl
        $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请求方式,如果传递了第二个参数,就代表是post请求,如果么有传递,第二个参数为空,就是get请求
        if (!empty($field)){
            //设置请求超时时间
            curl_setopt($ch,CURLOPT_TIMEOUT,30);
            //设置开启post
            curl_setopt($ch,CURLOPT_POST,1);
            //传递post数据
            curl_setopt($ch,CURLOPT_POSTFIELDS,$field);
        }
        //定义一个空字符串,用来接收请求的结果
        $data = '';
        if (curl_exec($ch)){
            $data = curl_multi_getcontent($ch);
        }
        //关闭curl
        curl_close($ch);
        //将得到的结果返回
        return $data;
    }
?>

发送成功

20191210172747.jpg

添加新评论