最新公告
  • 欢迎访问代码工坊,购买产品可享受在线工单服务!
  • 使用php发送微信公众号模板消息推送的方法

      我们在微信公众号开发过程中经常会需要向用户推送消息,最常用到的就是微信公众号模板消息了,下面是代码工坊整理的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.daimagongfang.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万条。

    发表评论