微信企业号开发二:TOKEN缓存处理

在申请token时并不是每发送一次消息就要申请一次token,因为token是有次数限制的,规则就是下面

主动调用的频率限制

当你获取到AccessToken时,你的应用就可以成功调用企业号后台所提供的各种接口以管理或访问企业号后台的资源或给企业号成员发消息。

为了防止企业应用的程序错误而引发企业号服务器负载异常,默认情况下,每个企业号调用接口都有一定的频率限制,当超过此限制时,调用对应接口会收到相应错误码。

以下是当前默认的频率限制,企业号后台可能会根据运营情况调整此阈值:

  • 基础频率

每企业调用单个cgi/api不可超过1000次/分,30000次/小时

每ip调用单个cgi/api不可超过2000次/分,60000次/小时

第三方应用提供商由于需要同时服务于多个企业,ip频率限制如下:每ip调用单个cgi/api不可超过20000次/分,600000次/小时

  • 发消息频率

每企业不可超过帐号上限数*30人次/天

  • 创建帐号频率

每企业创建帐号数不可超过帐号上限数*3/月

  • 创建应用频率

每企业最大应用数限制为30个,创建应用次数不可超过30*3/月

---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------

那么我们处理token的时候,就可以使用static进行处理,定义两个变量

<pre name="code" class="java">	//主动调用:发送消息获得token
	public static String access_token;
	//主动调用:请求token的时间
	public static Date access_token_date;


 

在每次请求token的时候:

1、判断jsapi_ticket是否存在,不存在的话直接申请;

2、判断时间是否过期,过期(>=7000秒)则重新申请token,否则不用请求直接返回之前的token。

这样可以避免请求token频繁导致的系统不能使用的问题

	/**
	 * 从微信获得access_token
	 * @return
	 */
	public  String getTokenFromWx(){
		//微信企业号标识
		String corpid=RESP_MESSAGE_CORPID;
		//管理组凭证密钥
		String corpsecret=RESP_MESSAGE_SECRET;
		//获取的标识
        String token="";
		//1、判断access_token是否存在,不存在的话直接申请
        //2、判断时间是否过期,过期(>=7200秒)申请,否则不用请求直接返回以后的token
		if(null==access_token||"".equals(access_token)||(new Date().getTime()-access_token_date.getTime())>=(7000*1000)){
			CloseableHttpClient httpclient = HttpClients.createDefault();
	        try {
	        	//利用get形式获得token
	            HttpGet httpget = new HttpGet("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret);
	            // Create a custom response handler
	            ResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {
	
	                public JSONObject handleResponse(
	                        final HttpResponse response) throws ClientProtocolException, IOException {
	                    int status = response.getStatusLine().getStatusCode();
	                    if (status >= 200 && status < 300) {
	                        HttpEntity entity = response.getEntity();
	                        if(null!=entity){
	                        	String result= EntityUtils.toString(entity);
	                            //根据字符串生成JSON对象
	                   		 	JSONObject resultObj = JSONObject.fromObject(result);
	                   		 	return resultObj;
	                        }else{
	                        	return null;
	                        }
	                    } else {
	                        throw new ClientProtocolException("Unexpected response status: " + status);
	                    }
	                }
	
	            };
	            //返回的json对象
	            JSONObject responseBody = httpclient.execute(httpget, responseHandler);
	            if(null!=responseBody){
	            	token= (String) responseBody.get("access_token");//返回token
	            }
	
	            httpclient.close();

	    		//设置全局变量
	    		access_token=token;
	    		access_token_date=new Date();
	        }catch (Exception e) {
				e.printStackTrace();
			} 
        }else{
        	token=access_token;
        }
		 return token;
	}



  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牟云飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值