java微信公众开发(原始篇-获取access_token)

前面已经详细的讲解了java后台接入微信公众号,下一步将带领大家开始开发微信公众号,废话不多说,直接进入正题。<本篇文章在上一节项目中进行更新>
上一篇:java微信公众开发(原始篇-接入微信公众号)----》》》戳这里

1.获取access_token

在开始之前还是有必要啰嗦啰嗦,什么时access_token? 官方文档介绍:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。 简单来说access_token就是在公众号调用所有接口的必须凭证,否则将不能使用公众号的接口功能,并且access_token每次获取之后,有效期只有2个小时的使用时间,每天公众号只有固定的获取次数,所以在获取access_token的时候建议大家使用缓存或其他方法将其存储,并设置一个固定时间重新获取access_token,避免使用上限与过期。
java微信公众开发(原始篇-获取access_token)_第1张图片
上图就是获取access_token的关键信息,莫着急,我们先创建个类用于存储一公众号所需要的信息,
在上一节项目原基础上创建package–》constants–》创建类WechatConstants.java 。创建完了以后,官方文档很明确的说明了获取access_token所需要请求的参数:grant_type:官方已经说明这个参数的值为client_credential。那么appid和secret在哪里呢?我们回到我们的微信公众平台,
如下图:java微信公众开发(原始篇-获取access_token)_第2张图片
secret在公众号注册成功可查看一次,之后如果忘记secret需要重置才能查看。所以大家记得记录。我们将appid于secret以静态常量写入WechatConstants.java,再将请求链接写入,定义getAccess_token_url方法将请求URL的参数替换成所需要的参数


public class WechatConstants {
	//公众号appid
    public static final String APPID = "你的APPID";
    //公众号appsecert
    public static final String APPSECRET = "你的SECERT";
	//获取access_token_Url
    private static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
	//将appid与appsecert填入后得到的URL
    public static String getAccess_token_url(){
        return ACCESS_TOKEN_URL.replace("APPID",APPID).replace("APPSECRET",APPSECRET);
    }

}

然后我们来测试一下,写一个main方法

public static void main(String[] args){
        JSONObject get = WeixinUtil.httpRequest(getAccess_token_url(), "GET", null);
        System.out.println(get.toString());
    }

运行后,
java微信公众开发(原始篇-获取access_token)_第3张图片
这里返回了错误码40164,查了文档后才知道,调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。) 那么在哪里添加这个IP白名单呢?看下图,
java微信公众开发(原始篇-获取access_token)_第4张图片
将我们的本机网络ip添加进IP白名单即可,多个ip用回车隔开,查看当前电脑ip如下图:java微信公众开发(原始篇-获取access_token)_第5张图片
将ip添加进白名单之后我们再来测试一下:

java微信公众开发(原始篇-获取access_token)_第6张图片
ok,现在我们已经成功获取了access_token,我们知道每次获取的access_token有效期只有两小时,所以我们不仅要将其合理存储,并且每隔一段时间(不能超过有效期)重新获取一次access_token。
创建package—》model—》创建实体类—》AccessToken.java

//access_token实体类
public class AccessToken {
    //access_toekn凭证
    private String  access_token;
    //有效时间
    private int expires_in;

    public AccessToken(String access_token, int expires_in) {
        this.access_token = access_token;
        this.expires_in = expires_in;
    }
    //此处省略get和set方法。。。。。
}

我们使用定时任务来获取access_token
在model包下我们在创建一个包timing—》创建类AccessTokenThread.java
注意:使用定时任务,主函数要加上注解@EnableScheduling


import com.wx.demo.constants.WechatConstants;
import com.wx.demo.model.AccessToken;
import com.wx.demo.utils.WeixinUtil;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 定时获取微信access_token的线程
 *在主函数中注解@EnableScheduling,在程序启动时就开启定时任务。
 * 每90分钟执行一次
 */
@Component
public class AccessTokenThread {
    private static Logger log = LoggerFactory.getLogger(AccessTokenThread.class);

    // 第三方用户唯一凭证
    public static AccessToken accessToken = null;
    //定时任务,90分钟执行一次
    @Scheduled(fixedDelay = 2*2700*1000)
    public void getAccessToken(){
        //获取微信服务器返回的json
        JSONObject accessTokenJson = WeixinUtil.httpRequest(WechatConstants.getAccess_token_url(), "GET", null);
        String access_token = accessTokenJson.getString("access_token");
        int expires_in = accessTokenJson.getInt("expires_in");
        log.info("成功获取access_token:"+access_token);
        accessToken = new AccessToken(access_token,expires_in);
    }
}

我们来启动一下项目:
java微信公众开发(原始篇-获取access_token)_第7张图片
本章结束,有疑问或者有建议的小伙伴可以在下方评论区留言。
git源码分享:------》》》》戳这里
下一章:java微信公众开发(原始篇-自定义菜单)—》》》戳这里

你可能感兴趣的:(技能学习,简单粗暴)