打赏
Fork me on GitHub

1.获取微信公众平台access_token

微信公众平台接入指南见 微信官方文档 :https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

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

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

1、建议公众号开发者使用中控服务器统一获取和刷新access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;

2、目前access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新access_token。在刷新过程中,中控服务器可对外继续输出的老access_token,此时公众平台后台会保证在5分钟内,新老access_token都可用,这保证了第三方业务的平滑过渡;

3、access_token的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。

公众号和小程序均可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。**调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。**小程序无需配置IP白名单。

接口调用请求说明

  • https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

具体参数说明见微信开发文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

不多说直接上代码

微信全局变量配置类
package com.gaode.wx.weixin.sdk.propertie;
/**
 * @ClassName: WeixinGlobal
 * @Description: 微信全局变量配置
 * @author lcoil
 * @date 2019年12月3日 下午1:52:34
 *
 */
public interface WeixinGlobal {
    String APPID = "wx0dd1234567890123";   //对应微信服务号的appID 替换成自己的
    String APPSECRET = "555f0642be5fa384ff59aac9a6406a99";  // 对应微信服务号APPSECRET  替换成自己的
    String TOKEN = "weixin_new_token";   //微信服务号中自己设置的TOKEN
    
    /**业务中需要的消息模板,在自己的服务号中申请后将 串替换掉即可*/
    //作业提醒的模板id
    String HOMEWORK_ASSIGN = "2oQc8ZnphKRIhr-j6iQxYGR0qK0wa3k4XFrlbJgCsFQ";
    //作业批改完成通知的模板id
    String HOMEWORK_CORRECT = "d0g6x478Xu173ayjy5NluzBX_suGeanUueHIeqS0LXE";
    //班级通知模板id
    String CLASS_NOTICE = "2YxppBHdz2qXRu_Elh6WxHzKAckWNcpHPjmJITi3MQc";
    //成绩通知模板id
    String EXAM_SCORE = "oCMFUHGpTnb5Fov3x4VykrOcGw29HgsrqnmgoA4d3m0";
    //关卡提醒的模板id 对应微信公众平台消息模板:发布学习任务通知
    String GATE_ASSIGN = "4DB0CQ3Py-Ld6LoNepD_Gjw1cn1X1xjyTRISUtvnm20";

  
    /**百度天气api  url*/
    String BAIDU_WEATHER_API = "http://api.map.baidu.com/telematics/v3/weather?";
    /**百度天气api  秘钥*/
    String BAIDU_WEATHER_AK = "Bxw1M40IDPbjheeyUZhCeRAiGODej7aR";
    //*********************************************************************************************************************************************************
    /**PM25 API url*/
    String PM25_API = "http://www.pm25.in/api/querys/pm2_5.json?";
    /**PM25 API token*/
    String PM25_TOKEN = "5j1znBVAsnSf5xQyNQyq";
    //*********************************************************************************************************************************************************
    //获取全局Access Token请求模版
    String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    //获取openid的请求模版
    String ACCESS_OPENID = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code";
    String ACCESS_USER = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
    //*********************************************************************************************************************************************************
    //获取用户基本信息信息
    String WECHAT_USER_INFO = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
    //设置用户备注名
    String WECHAT_UPDATE_REMAKE = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=ACCESS_TOKEN";
    //获取关注列表
    String WECHAT_USER_LIST = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
    //创建分组
    String WECHAT_GROUPS_CREATE = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN";
    //查询分组
    String WECHAT_GROUPS_LIST = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN";
    //查询用户所在的分组
    String WECHAT_GROUPS_USER = "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token=ACCESS_TOKEN";
    //修改分组名称
    String WECHAT_GROUPS_UPDATE = "https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN";
    //移动用户分组
    String WECHAR_GROUPS_MEMBERS_UPDATA = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=ACCESS_TOKEN";
    //向用户发送消息
    String WECHAT_MESSAGE_CUSTOM_SEND = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
    //根据分组id来群发消息
    String WECHAT_MESSAGE_GROUP = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN";
    //*********************************************************************************************************************************************************
    //获取模板id
    String WECHAT_TEMPLATE_GET_ID = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";
    //发送模板消息
    String WECHAT_TEMPLATE_SEND = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";

    // 创建菜单
    String MENU_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    // 查询自定义菜单
    String MENU_GET_URL = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";
    // 删除自定义菜单
    String MENU_DELTE_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";

    //票据
    String jsapi_ticket_url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";//GET方式请求获得jsapi_ticket

    String BASE_SERVER="http://xqpay.natapp1.cc";//服务地址

    String PAY_KEY="CeTZ4VC2sm9OYmjMb5eCcmPGfZohpkp2";//微信支付秘钥 自己在商户平台设置的

    String mchId="1562901001";//商户平台id
}
WeixinGlobal

获取 服务号的access_token

由一个线程定时去刷新,这样可以减少access_token生成的次数,微信服务器对access_token的生成次数有限制。
 1 /**
 2  * 
 3  */
 4 package com.xianquan.wx.weixin.sdk.util;
 5 
 6 import com.xianquan.wx.aixuexiao.model.Token;
 7 import com.alibaba.fastjson.JSONException;
 8 import com.alibaba.fastjson.JSONObject;
 9 import com.xianquan.wx.weixin.sdk.propertie.WeixinGlobal;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 
13 
14 /** 
15 * @ClassName: AccessTokenUtil 
16 * @Description: 由一个线程定时去刷新,这样可以减少access_token生成的次数,微信服务器对access_token的生成次数有限制。
17 * @author lcoil
18 * @date 2019年12月2日 上午11:01:48 
19 *  
20 */
21 public class AccessTokenUtil {
22     private static Logger log = LoggerFactory.getLogger(AccessTokenUtil.class);
23     
24     public static String queryAccessToken() {
25         Token token = null;
26         String tokenValue = SimpleEHCache.getAccessTokenValue();
27         if (tokenValue != null){
28             token = new Token();
29             token.setAccessToken(tokenValue);
30             return token.getAccessToken();
31         }
32         
33         String requestUrl = WeixinGlobal.ACCESS_TOKEN_URL.replace("APPID", WeixinGlobal.APPID).replace("APPSECRET", WeixinGlobal.APPSECRET);
34         // 发起GET请求获取凭证
35         JSONObject jsonObject = WeixinHttpUtil.httpsRequest(requestUrl, "GET", null);
36 
37         if (null != jsonObject) {
38             try {
39                 token = new Token();
40                 token.setAccessToken(jsonObject.getString("access_token"));
41                 //token.setAccessToken("14_ecAhZacj_RKfBxFWlg_57s2RXXnPXfzwBVjFDJ8UlA4m70npKnQerH9Ki6G3ybKpPLH7pjMm0vF6FwIY-yrSvfEGkqCjiy1CwrVXXKLS6KOE6Sa5h8Zgnjp46OM4zhRlcaFoPjQ0u5nO97SXMBXfAGAYNJ");
42                 token.setExpiresIn(jsonObject.getInteger("expires_in"));
43 //                token.setExpiresIn(36000);
44                 SimpleEHCache.pubAccessToken(jsonObject.getString("access_token"));
45             } catch (JSONException e) {
46                 token = null;
47                 // 获取token失败
48                 log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInteger("errcode"), jsonObject.getString("errmsg"));
49             }
50         }
51         return token.getAccessToken();
52     }
53     public static void main(String[] args) {
54         System.out.println(queryAccessToken());
55     }
56 }
AccessTokenUtil

 

posted @ 2020-03-08 16:34  l-coil  阅读(642)  评论(0编辑  收藏  举报