- //发送订阅消息
- public function sendTemplate($openid,$template_id,$page_url,$data=[],$miniprogram_state='formal'){
- $template = array(
- 'touser'=>$openid, //用户openid
- 'template_id'=>$template_id, //在公众号下配置的模板id
- 'miniprogram_state'=>$miniprogram_state,
- 'page'=>$page_url, //点击模板消息会跳转的链接
- 'data'=>$data
- );
- $token = $this->getAccessToken();
- $url ='https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token='.$token;
- $info = $this->httpPost($url,json_encode($template));
- return json_decode($info,true);
- }
- /**
- * 获取token
- */
- public function getAccessToken(){
- $data = json_decode(Cache::get('wx-access-token'));
- if(!$data || $data->expire_time < time()){
- $data = new \stdClass();
- $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;
- $res = json_decode($this->httpGet($url));
- $access_token = $res->access_token;
- if($access_token){
- $data->expire_time = time()+7000;
- $data->access_token = $access_token;
- Cache::put('wx-access-token',json_encode($data),Carbon::now()->addMinutes(120));
- }else{
- return false;
- }
- }else{
- $access_token = $data->access_token;
- }
- return $access_token;
- }
- /**
- * http post 请求
- */
- function httpPost($url,$data='') {
- $curl = curl_init();
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($curl, CURLOPT_TIMEOUT, 500);
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($curl, CURLOPT_URL, $url);
- curl_setopt($curl, CURLOPT_POST, TRUE);
- curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
- $res = curl_exec($curl);
- curl_close($curl);
- return $res;
- }