小程序订阅消息实现

最近手上的项目有用到,特别记录一下。毕竟官方说模板消息马上就不让用了。

小程序的订阅消息和模板消息通用,不过小程序的订阅消息必须有用户支付或点击之后才能使用,不能主动推送。
首先依然是获取accesstoken ,地址栏拼接参数用http_curl来获取,然后将openid和模板id和内容用post请求发送

 public function getaccess_tonken()
    {
        $xcx_info=DB::name('xcx')->where('status',1)->find();
        $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$xcx_info['appid']."&secret=".$xcx_info['secret'];
           //api接口 
        $content = $this->http_curl($url);
        if (!empty($content['access_token'])) {
            session('access_token',$content['access_token']);
        } 
        return $content['access_token'];
    }
  public function sendwxmessage()
    {
        $param= $this->request->param();  
        // $access_token=session('access_token');
        $openid='';//目标用户的openid
        $templateId="";//订阅消息的模板id

        $data=array(
                        'name1'=>array('value'=>'系统发布'),
                        'time2'=>array('value'=>date('Y-m-d H:i:s', time()) ),
                        'thing3'=>array('value'=>"您有新的案件消息",'color'=>'#333333'),
                   
                    );

        $access_token=$this->getaccess_tonken();
        $url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$access_token; 

              $params1=array(
                 "touser"=>$openid,
                 "template_id"=>$templateId,
                
                   "data"=>$data
              );
               $json_template = json_encode($params1);
               $params = $this->curl_post($url,urldecode($json_template));
                      $params = json_decode($params,true);
                      print_r($params);
                  

                      if ($params['errcode']==0){
                          return '发送成功';
                      }else{
                          return '发送失败';
                      }
       

        $this->success('请求成功!' );
      
    }
    public  function http_curl($url){
        //用curl传参
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
     
        //关闭ssl验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     
     
        curl_setopt($ch,CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }

   public 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;
        }

你可能感兴趣的:(php)