微信开放平台开发(三)获取component_access_token

什么是component_access_token

拿到component_verify_ticket后,我们就需要获取一个component_access_token,它是第三方平台的下文中接口的调用凭据,也叫做令牌(component_access_token)。每个令牌是存在有效期(2小时)的,且令牌的调用不是无限制的。(以上引自微信开放平台官方文档)需要注意的是微信公众平台中获取access_token是每天上限2000次的,但是微信开放平台里只说了调用次数有限,却没有说上限是多少……我们先假设它也是每天上限2000次。

每个component_access_token的有效时间是7200秒(即2个小时)。

如何获取component_access_token

获取component_access_token的接口很简单,请求https://api.weixin.qq.com/cgi-bin/component/api_component_token并带上如下三个参数即可(注意不是key-value传输参数):

  • component_appid,开放平台的appid
  • component_appsecret,开放平台的appsecret
  • component_verify_ticket,微信服务器每10分钟推送过来的component_verify_ticket

实现方案

获取到component_access_token后可以使用2个小时,一般的策略是把它放在redis中,下次获取时若是没有值就重新拉取并存放到redis中。这样处理的好处是任何连到该redis的系统都可以获取到值,而本示例程序只是为了演示功能,使用一个redis有点多余了。所以就使用任务调试程序,更新策略是每2分钟更新一下,发现上次更新时间在110分钟之前或是值是空就重新拉取,否则就直接返回。

在Spring中使用任务调试就比较简单了,在一个Bean的某个方法上加上注释(别忘记把这个Bean被Spring扫描到)即可

@Scheduled(cron = "0 0/2 * * * *")

此处cron表达式的意思是每隔2分钟开始调用,更cron表达式请自己查询。

使用该功能时注意要在Spring的配置文件中添加

<task:annotation-driven/>

即可。

为方便测试,我们在AuthController中添加一个方法getComponentAccessToken(),用于在页面上返回component_access_token的值:

    /**
     * 获取Component_Access_Token
     */
    @RequestMapping("getComponentAccessToken")
    @ResponseBody
    public String getComponentAccessToken() {
        return componentAccessTokenTask.getComponentAccessToken();
    }

同样,添加一个主动刷新component_access_token的方法也是可以的,方便测试。

    /**
     * 刷新Component_Access_Token
     */
    @RequestMapping("refreshComponentAccessToken")
    @ResponseBody
    public String refreshComponentAccessToken() {
        componentAccessTokenTask.doComponentAccessTokenRefresh();
        return componentAccessTokenTask.getComponentAccessToken();
    }

需要注意的是,在生产环境上该方法千万不要暴露出来或采取一定措施确保调用次数达不到上限。

扫描二维码关注公众号,回复: 97447 查看本文章

本博客对应的代码在https://gitee.com/valuetodays/open-wx-demo/tree/V0.2

本博客首发在http://eblog.doyourealizethattheimportantisdifficult.cn/article/getDetail.do?id=7

猜你喜欢

转载自my.oschina.net/valuetodays/blog/1785370