微信开发--获取access token
2016-01-16 19:05
531 查看
微信开发中许多接口需要access_token
今天说一下如何获取access_token
其实微信开发者文档中已经写的很详细了,这里只是给出程序的实现方式
对于access_token最重要的莫过于使用次数了,因为每天只能由2000次的机会。
公众号调用接口并不是无限制的。为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码:
{“errcode”:45009,”errmsg”:”api freq out of limit”}
其实2000已经足够了。关键是access_token如何保存。
基本思路是在获取access_token的时候首先判断access_token是否存在,如果不存在则获取新的aceess_token,如果存在则判断当前时间跟上一次获取的时间是否大于access_token的有效期,如果大于有效期了则重新获取,如果在有效期内则直接返回access_token。
下面是简单的Java实现
其中用到了
发送http请求请参见
Java工具类–通过HttpClient发送http请求
今天说一下如何获取access_token
其实微信开发者文档中已经写的很详细了,这里只是给出程序的实现方式
对于access_token最重要的莫过于使用次数了,因为每天只能由2000次的机会。
公众号调用接口并不是无限制的。为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码:
{“errcode”:45009,”errmsg”:”api freq out of limit”}
其实2000已经足够了。关键是access_token如何保存。
基本思路是在获取access_token的时候首先判断access_token是否存在,如果不存在则获取新的aceess_token,如果存在则判断当前时间跟上一次获取的时间是否大于access_token的有效期,如果大于有效期了则重新获取,如果在有效期内则直接返回access_token。
下面是简单的Java实现
[code]import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.json.JSONException; import org.json.JSONObject; import com.gwc.wechat.utils.HttpUtil; public class AccessTokenTool { private static Logger log = Logger.getLogger(AccessTokenTool.class); public static final String AppId = "你的AppId"; public static final String AppSecret = "你的AppSecret"; public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + AppId + "&secret=" + AppSecret; public static String access_token = ""; /** * 过期时间7200秒, 因为微信token过期时间为2小时,即7200秒 */ private static int expireTime = 7200 * 1000; private static long refreshTime; /** * 获取微信accesstoken * * @return */ public static synchronized String getAccessToken() { return getAccessToken(false); } public static synchronized String getAccessToken(boolean refresh) { if (StringUtils.isBlank(access_token) || (System.currentTimeMillis() - refreshTime) > expireTime || refresh) { access_token = initAccessToken(); refreshTime = System.currentTimeMillis(); } return access_token; } private static String initAccessToken() { String responseContent = HttpUtil.sendGet(GET_ACCESS_TOKEN_URL); JSONObject object = new JSONObject(); try { object = new JSONObject(responseContent); return (String) object.get("access_token"); } catch (JSONException e) { try { log.error("获取token失败 errcode:" + object.get("errcode") + " errmsg:" + object.getString("errmsg")); } catch (JSONException e1) { e1.printStackTrace(); } e.printStackTrace(); } return null; } }
其中用到了
[code]commons-lang-2.6.jar
发送http请求请参见
Java工具类–通过HttpClient发送http请求
相关文章推荐
- 从0到1:微信后台系统的演进之路
- 微信创建自定义菜单和删除自定义菜单
- 微信根据Code获取OpenId
- Android 找出微信聊天记录的缓存
- Android自定义View之微信雷达
- 微信公众平台开发(111) 现金红包、裂变红包、企业付款
- 微信公众平台开发入门教程
- 微信web开发者工具
- 微信web开发者工具
- 微信公众平台开发(111) 现金红包、裂变红包、企业付款
- 微信电话
- 微信开放平台开发(2) 微信登录
- 微信开放平台开发(1) 语义理解
- 微信公众平台开发(110) 微信连Wi-Fi
- 微信公众平台开发(109) 个性化菜单
- 微信支付现金红包接口
- 微信自定义菜单扩容?
- 微信公众号新功能-原创声明、赞赏功能、评论管理、页面模版
- 微信连Wi-Fi专业设备列表
- 微信“摇一摇·周边”正式开放