• 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
    博客园:https://www.cnblogs.com/xianquan
    Copyright ©2020 l-coil
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    python的paramiko模块简单应用
    python单线程下实现多个socket并发
    python之协程
    python之生产者消费者模型
    python进程之间修改数据[Manager]与进程池[Pool]
    python的进程间的数据交互
    vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法
    python之多并发socket
    OOP的几个不常用的方法
    HTTP 头和 PHP header() 函数
  • 原文地址:https://www.cnblogs.com/xianquan/p/12443221.html
  • Copyright © 2020-2023  润新知