微信公众平台应用开发实践
上QQ阅读APP看书,第一时间看更新

4.2 基础支持

4.2.1 申请测试账号

在第1章中提到微信公众号有订阅号和服务号之分,服务号审核较为严格,但提供的接口更为丰富,开发者可能手头上并没有服务号可以使用,或者直接拿服务号来做开发测试页较为不妥,会影响订阅者的体验。微信公众平台提供了测试账号供开发者使用,让开发者能尽情体验各种接口的实际效果。

在“开发者中心”→“配置项”页面下的“开发者工具”部分单击“接口测试申请系统”的链接,打开申请页面,如图4-1所示。

图4-1

可以分别选择微信账号登录或手机账号登录。这里我们选择用自己的微信账号扫描二维码的方式登录,如图4-2所示。

图4-2

测试账号有一年的使用期,这个日期足够我们开发使用了。红框中的appID是每个公众号唯一的ID,appsecret是对应的密钥,默认只有已经成为开发者的服务号才有,有了它我们才能进行一些接口访问,这个在后面会介绍。按照第3章介绍的方式配置好接口信息,扫描测试号二维码,关注我们的测试号,就可以正常使用微信公众号提供的各种接口了。

4.2.2 获取access_token

access_token在微信开发中有着非常重要的作用,它相当于一把钥匙,只有获得这个值,才能获得其他接口的使用权限。access_token是公众号的全局唯一票据,公众号调用各接口都需要使用access_token,有效期是7 200秒,重复获取将导致覆盖上次获取的值。由于获取access_token的API调用次数有限,建议全局存储并更新access_token。

公众号可以使用AppID和AppSecret调用“获取access_token”接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且账号没有异常)。为了提高公众平台开发者接口调用的安全性,避免开发者ID和密码泄露后给账号造成损失,微信官方对调用“获取access_token”接口增加了IP白名单校验:只有将IP地址设置为公众号的IP白名单才能成功调用该接口。

1.接口调用请求说明

请用GET请求如下https地址:

https请求方式:GET

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明如表4-2所示。

表4-2 参数说明

这个接口的调用也很简单,将URL中的APPID和APPSECRET替换成我们自己申请的appID和appsecret,使用GET方式发送HTTP请求。注意,调用微信接口时均使用HTTPS协议,这样能够保证个人信息不会泄露。

2.返回说明

正常情况下,微信会返回以下JSON数据包给公众号:

     {"access_token":"ACCESS_TOKEN","expires_in":7200}

参数说明如表4-3所示。

表4-3 参数说明

发生错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为appID无效错误):

     {"errcode":40013,"errmsg":"invalid appid"}

了解了接口的基本信息,下面给出具体的代码:

     const API_URL  = 'https://api.weixin.qq.com';
        private static $access_token;
        private static $expries_time = 0;

/** *用于获取AccessToken。若成功则返回AccessToken,若失败则返回false */ public static function getToken(){ //如果已经获取过且没有过期,就直接返回 if(isset(self::$access_token) && time() < self::$expries_time){ return self::$access_token; } $url=self::API_URL."/cgi-bin/token?grant_type=client_credential&appid=".APPID. "&secret=".APPSECRET; $content=curl_get($url); //解析成json $ret=json_decode($content,true);//{"access_token":"ACCESS_TOKEN", "expires_in":7200} if(array_key_exists('errcode',$ret) && $ret['errcode'] != 0){ return false; }else{ self::$access_token = $ret['access_token']; //计算过期时间 self::$expries_time = time() + intval($ret['expires_in']); return self::$access_token; } }

函数curl_get(URL)是利用cURL库实现GET方式发送请求并获取数据,这个函数我们以后会经常用到。由于本书主要介绍微信开发,具体的PHP函数这里就不展开了,搜索一下大家就能知道这个函数的用法。

     /**
      *用GET方式获取服务器响应
      * @param {string} $url
      * @return {string|boolen}成功时返回服务器响应内容,失败则返回false
      */
     function curl_get( $url ){
         $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);
         if(!curl_exec($ch)){
             error_log( curl_error ( $ch ));
             $data = '';
         } else {
            $data = curl_multi_getcontent($ch);
         }
         curl_close($ch);
         return $data;
     }