+发表新主题
查看: 1382|回复: 0

[开发入门] 微信开发入门系列教程(二)-- 获取接口调用凭据access_token

[复制链接]

[开发入门] 微信开发入门系列教程(二)-- 获取接口调用凭据access_token

[复制链接]
风的传说自由 发表于 2015-7-6 17:34:10 浏览:  1382 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
152102jcet27t7dqgqcsyh.png


在进行接口开发之前,必须先要理解access_token,即接口调用的凭据。公众平台开发者文档里是这样定义的:“access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。”

从上面可以看出公众号调用接口时都需要获取一次access_token,但是为了减轻服务器负载,获取的频次是有限制的,每日限额2000次(测试账号每日限额200次),有关更多接口的调用平率,可以访问接口频率限制说明

获取access_token采用https协议的GET方式:https://api.weixin.qq.com/cgi-bi ... ID&secret=APPSECRET,AppID和AppSecret可以在公众号的开发中心找到,测试号的页面也能直接看见测试号的AppID和AppSecret,获取access_token,grant_type参数直接使用client_credential。
152102jcet27t7dqgqcsyh.png



接下来我们测试一下获取access_token,有两种方式,一种是在我们自己的服务器端获取,一种是使用公众平台自带的接口调试工具。

我们修改下index.php的代码,即可获得access_token,正常情况下会返回如下数据格式

  1. {"access_token":"ACCESS_TOKEN","expires_in":7200}
复制代码
获取access_token的代码如下:

  1. $APPID="wx2d926b678f502170";

  2. $APPSECRET="2f99076fde3686b88968489cfebecef0";

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

  4. $json_data=file_get_contents($ACC_TOKEN_URL);//获取返回的json数据

  5. $result=json_decode($json_data,true);//解析返回的json数据

  6. $ACC_TOKEN=$result['access_token'];//取得access_token

  7. echo $ACC_TOKEN;
复制代码
使用接口调试工具时只需要输入对应的appid和secret参数即可
152102jcet27t7dqgqcsyh.png


那么,既然每日获取access_token的频率是有上限的,并且有效期为7200s,重复获取也会导致上一次获取的access_token失效,而我们不可能总去获取access_token,这样效率太低,就需要我们考虑一个问题,如何获取和保存access_token?

思路其实不难,只要限定在7200s内,我们不会重复获取access_token即可。当然这只是作为一个简单的参考,大家如果有什么更高效的方法,欢迎随时提出来:)

SAE自带Memcache缓存服务,这里我们使用SAE的Memcache服务来存储access_token。在服务管理中找到Memcache,点击左侧“初始化Memcache”,之后输入一个容量大小,小于1M是免费的,点击确定,这样我们的Memcache就初始化成功了。现在我们要做的就是在index.php中把我们获取到的access_token存进memcache,如下:
[pre]
$mc = memcache_init();
if(mc==false)
{
        echo "mc init failedn";
}
$access_token = memcache_get($mc, "token");
if(empty($access_token)==true)//如果memcache里没有键为“token”的值,则重新获取
{
        $APPID="wx2d927b6789508170";
        $APPSECRET="2f99076fde33586b8968489cfebccef0";
        $ACC_TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRET;
        $json_data=file_get_contents($ACC_TOKEN_URL);
        $result=json_decode($json_data,true);
        $ACC_TOKEN=$result['access_token'];
        
        //把获取到的access_token存入memcache,有效期7200s
        memcache_set($mc, "token", $ACC_TOKEN, 0, 7200);//参数:memcache句柄、键值、数据、标记(默认0)、有效期(过期会被服务器清除)
        $access_token = memcache_get($mc, "token");
        echo $access_token;
}
[/pre]
这样我们就不用每次接口调用都去请求微信服务器,很简单吧!
如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,微信还提供了获取微信服务器IP地址列表的接口。
采用https GET方式请求:https://api.weixin.qq.com/cgi-bi ... _token=ACCESS_TOKEN,正常情况下会返回json数据给公众号
[pre]$IP_ADDRESS_URL="https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$ACCESS_TOKEN;
$IP_JSON=file_get_contents($IP_ADDRESS_URL);
$ip_data=json_decode($IP_JSON);
var_dump($ip_data);[/pre]
这样会得到如下的输出,附件中包含完整代码。
152102jcet27t7dqgqcsyh.png


游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网