• 微信公众号开发(三)——获取 Access_Token


    获取access token

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

    公众平台的API调用所需的access_token的使用及生成方式说明:

    1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。而其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则会造成access_token覆盖而影响业务;
    2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器对外输出的依然是老access_token,此时公众平台后台会保证在刷新短时间内,新老access_token都可用,这保证了第三方业务的平滑过渡;
    3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

    公众号调用各接口时都需使用access_token,我们如何获取access_token?

    1. 创建 token 的 Po 类

    根据返回值说明,创建 Po 类

    参数

    AccessToken

    public class AccessToken {
        private String token;
        private int expiresIn;

    根据微信的 APPID ,APPSECRET 获取 token:

    private static final String APPID = "填自己的";
    private static final String APPSECRET = "填自己的";
    private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    
    public static AccessToken getAccessToken() throws ParseException, IOException{
            AccessToken token = new AccessToken();
            String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);
            JSONObject jsonObject = doGetStr(url);
            if(jsonObject!=null){
                token.setToken(jsonObject.getString("access_token"));
                token.setExpiresIn(jsonObject.getInt("expires_in"));
            }
            return token;
        }

    2. 获取 token

    public class WeixinTest {
        public static void main(String[] args) throws ParseException, IOException {
    
            //返回票据
            AccessToken token = WeiXinUtil.getAccessToken();
            System.out.println("票据"+token.getToken());
            System.out.println("有效时间"+token.getExpiresIn());
        }
    }

    票据
    4Utt_7vDsUROljc9HHly5QQwXIuLJ7ixxpQ2hhhjhPdw7ULYhygsM8Af8Tv404oCopQMkGsOSsU7UsDzy0hKcGLdVfXWIRmU5oFWSHI4WcoUFSjAFAMXK
    有效时间7200

    token的获取次数有限,如果微信公众号的使用人数很多,不能每次都创建新的 token。同时产生多个 token 会产生冲突,且 token 的有效时间是 2 小时,所以可以把获取的 token 写入文件中,当失效是重新获取 token ,这样一天最多获取 12 次。

  • 相关阅读:
    测试框架 MSTest V2与单元测试
    string字符串格式
    重构概述
    代码的坏味道
    this.Dispatcher.Invoke与SynchronizationContext
    C# new关键字
    Servlet的API和生命周期
    Servlet快速入门
    Spring介绍
    Oracle数据安全解决方案(1)——透明数据加密TDE
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185243.html
Copyright © 2020-2023  润新知