这篇文章上次修改于 2384 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

工作流程

微信公众开发结构

注意事项和遇到的错误

  • 每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。
  • access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。
  • 公众平台接口调用仅支持80端口。
  • 群发消息:公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。
  • 被动回复消息:在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。
  • 客服消息:在用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息,主要用于客服场景。用户的行为会触发事件推送,某些事件推送是支持公众号据此发送客服消息的,详见微信推送消息与事件说明文档。
  • 模板消息:在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。
  • 发送被动响应消息:对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。
  • php 实现接口请求

    • 使用curl实现get请求获得TOKEN

      C("GRANT_TYPE","client_credential");
      C("APPID","");
      C("SECRET","");
      
      public function getAccessToken(){
              $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=".C("GRANT_TYPE")."&appid=".C("APPID")."&secret=".C("SECRET");
              //echo $url;
              //初始化
              $ch = curl_init($url);
              //curl_setopt($ch,CURLOPT_URL,$url);
              //获取数据返回
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
              //关闭SSL安全检证
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      
              curl_setopt($ch, CURLOPT_HEADER, 0);
      
              //建立连接
              $output = curl_exec($ch);
      
              //输出连接代码
              //$info = curl_getinfo($ch);
              //echo $info["http_code"];
      
              //输出错误
              //var_dump(curl_error($ch)); 
      
              //输出返回结果
              print_r($output);
      
              //关闭连接
              //curl_close($ch);
          }
PS:

- 复制官方提供的代码实例会有隐藏空格,或者全角字符等问题,报错T_STRING等;
- 输入返回结果为false,连接代码为 0 ,表示连接失败,检查URL正确性,重要一点,关闭SSL安全检证;
- 使用curl 需要开启 php_curl模块,并且curl_setopt($ch, CURLOPT_HEADER, 0),一定要设置为0;
- 使用curl实现POST时,出现问题,微信错误代码40016,猜测是因为POST传参错误。
  • file_get_contents实现POST请求

    function dataPost($post_string, $url) {
            $context = array ('http' => array ('method' => "POST", 'header' => "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) \r\n Accept: */*", 'content' => $post_string ) );
            $stream_context = stream_context_create ( $context );
            $data = file_get_contents ( $url, FALSE, $stream_context );
            return $data;
        }
PS:$post_string为 json格式字符串;使用 file_get_contents 时需要开启php_openssl模块。
  • 自定义菜单:多次调用创建接口会替换自定义菜单。
  • 模板消息:

    • 刚刚设置模板消息时,使用查询接口 直接报错 “40066 url无效”隔天之后发现可以正常使用。
    • 模板消息发送时key值一定要写正确,区分大小写,未写模板定义的key,显示空白;多写模板定义外的key,无效。
    • 发送格式的JSON中url为“详情”的连接地址。
    • 在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。
  • 用户分析接口:日期设置不能是当天,否则也会报 61501 date range error hint 错误

2018/3/6.

Dean.King

Beijing