前面已经详细的讲解了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,避免使用上限与过期。
上图就是获取access_token的关键信息,莫着急,我们先创建个类用于存储一公众号所需要的信息,
在上一节项目原基础上创建package–》constants–》创建类WechatConstants.java 。创建完了以后,官方文档很明确的说明了获取access_token所需要请求的参数:grant_type:官方已经说明这个参数的值为client_credential。那么appid和secret在哪里呢?我们回到我们的微信公众平台,
如下图:
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());
}
运行后,
这里返回了错误码40164,查了文档后才知道,调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。) 那么在哪里添加这个IP白名单呢?看下图,
将我们的本机网络ip添加进IP白名单即可,多个ip用回车隔开,查看当前电脑ip如下图:
将ip添加进白名单之后我们再来测试一下:
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);
}
}
我们来启动一下项目:
本章结束,有疑问或者有建议的小伙伴可以在下方评论区留言。
git源码分享:------》》》》戳这里
下一章:java微信公众开发(原始篇-自定义菜单)—》》》戳这里