«

使用php发送微信公众号模板消息推送的方法

时间:2024-8-8 11:10     作者:韩俊     分类: PHP


我们在微信公众号开发过程中经常会需要向用户推送消息,最常用到的就是微信公众号模板消息了,下面是代码工坊整理的php实现微信公众号模板消息的使用思路。

1、开通模板消息功能。

2、添加模板消息模板。

3、代码中首先先获取公众号的access_token。

4、获取到了access_token进行缓存,接下来我们拼接数据,组合出正确的格式。

5、向微信模板消息接口发送数据,微信会把信息发送给指定用户。(用户需已经关注公众号)

代码如下:

 //推送消息
    public function push(){
        $access_token = $this->access_token();
        if ($access_token == 400){
            return json(['code'=>0,'message'=>'获取access_token失败']);
        }
   $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token;
   $data = array(
            "touser"        =>  $openid,        //openid
            "template_id"   =>  '模板id',             //模板id
            "url"           =>  'https://www.maopiaopiao.com/',
            "data"          =>  array(
                                    'first' => array(
                                        'value'=>'尊敬的客户,您的订单有了新的进展',
                                        'color'=>''
                                    ),
                                    'keyword1'=>array(
                                        'value'=>123465,
                                        'color'=>''
                                    ),
                                    'keyword2'=>array(
                                        'value'=>'订单进度提醒',
                                        'color'=>''
                                    ),
                                    'keyword3'=>array(
                                        'value'=>66666,
                                        'color'=>''
                                    ),
                                    'keyword4'=>array(
                                        'value'=>date('Y-m-d H:i:s', time()),
                                        'color'=>''
                                    ),
                                    'remark'    => array(
                                        'value'=>'最新订单状态',
                                        'color'=>''
                                    ),
                                ),        //模板数据
        );
        return $this->http_post_json($url,json_encode($data));//发送请求
    }

    public function http_post_json($url, $jsonStr)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Content-Length: ' . strlen($jsonStr)
            )
        );
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return json_encode(array($httpCode, $response),true);
    }

    //获取access_token
    public function access_token(){
        $access_token = Cache::get('access_token');
        if (!empty($access_token)){
            return $access_token;
        }
        $appId = APPID;
        $appSecret = appsecret;
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
        $ch = curl_init();//初始化curl
        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); // 从证书中检查SSL加密算法是否存在
        $data = json_decode(curl_exec($ch),true);
        if(curl_errno($ch)){
            var_dump(curl_error($ch)); //若错误打印错误信息
        }

        curl_close($ch);//关闭curl
        if(Cache::set('access_token',$data['access_token'],172800)){
            return $data['access_token'];
        }else{
            return 400;
        }
    }

      其中access_token每天获取量有限制,请将本参数缓存下来,两小时更新一次。

      微信公众号模板消息目前每天调用量为10万条。

标签: php php教程

热门推荐