php微信公众号模板消息主动推送

1.获取access_token,有效期7200秒,我的方法是记录获取时间,超过时间再次获取。

//$appid   微信appid
//$appsec  微信appsecret
public function get_token($appid,$appsec){
   $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsec;
   $raw = curl_get($url);
   if(strlen($raw)>0){
       $data = json_decode($raw,true);
       if(json_last_error()==JSON_ERROR_NONE){
           if(key_exists('access_token',$data)){
               return $data['access_token'];
           }else{
               return false;
           }
       }else{
           return false;
       }
   }else{
       return false;
   }
}

  

2.获取模板id,公众号->添加功能插件->模板消息 里申请。
 
3.构造方法
$data=[  
          'touser'=>用户openid,  
          'template_id'=>模板id,  
          'url'=>'链接url',  
          'topcolor'=>"#FF0000",  
          'data'=>array(  
              'toName'=>array('value'=>内容1,"color"=>"#173177"),  
              'gift'=>array('value'=>内容2<span style="font-family: Arial, Helvetica, sans-serif;">,"color"=>"#173177"),</span>  
              'time'=>array('value'=>date("Y-m-d h:i:s",time()),"color"=>"#173177"),  
              'remark'=>array('value'=>内容3,"color"=>"#173177")  
          )  
      ];  
$result = curl_post_send_information(access_token,json_encode($data));
返回结果:$result 判断
 
 curl_post_send_information 发送函数
public function curl_post_send_information( $token,$vars,$second=120,$aHeader=array()){
  $ch = curl_init();
  //超时时间
  curl_setopt($ch,CURLOPT_TIMEOUT,$second);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  //这里设置代理,如果有的话
  curl_setopt($ch,CURLOPT_URL,'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$token);
  curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
  if( count($aHeader) >= 1 ){
      curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
  }
  curl_setopt($ch,CURLOPT_POST, 1);
  curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
  $data = curl_exec($ch);
  if($data){
      curl_close($ch);
      return $data;
  }
  else {
      $error = curl_errno($ch);
      curl_close($ch);
      return $error;
  }
}
返回码说明

在调用模板消息接口后,会返回JSON数据包。正常时的返回JSON数据包示例:

{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}

错误时的返回JSON数据,形式类似,错误码请见本页下方返回码说明。

 

返回码说明
-1 系统繁忙
0 请求成功
40001 验证失败
40002 不合法的凭证类型
40003 不合法的OpenID
40004 不合法的媒体文件类型
40005 不合法的文件类型
40006 不合法的文件大小
40007 不合法的媒体文件id
40008 不合法的消息类型
40009 不合法的图片文件大小
40010 不合法的语音文件大小
40011 不合法的视频文件大小
40012 不合法的缩略图文件大小
40013 不合法的APPID
41001 缺少access_token参数
41002 缺少appid参数
41003 缺少refresh_token参数
41004 缺少secret参数
41005 缺少多媒体文件数据
41006 access_token超时
42001 需要GET请求
43002 需要POST请求
43003 需要HTTPS请求
44001 多媒体文件为空
44002 POST的数据包为空
44003 图文消息内容为空
45001 多媒体文件大小超过限制
45002 消息内容超过限制
45003 标题字段超过限制
45004 描述字段超过限制
45005 链接字段超过限制
45006 图片链接字段超过限制
45007 语音播放时间超过限制
45008 图文消息超过限制
45009 接口调用超过限制
46001 不存在媒体数据
47001 解析JSON/XML内容错误
posted @ 2017-09-07 14:02  智昕  阅读(298)  评论(0编辑  收藏  举报