【Java 微信公众号】③ access_token

简介: 调用微信官方的某些接口必须携带【access_token】作为参数 目前 access_token 的有效期为2个小时 不要反复获取 access_token access_token 是供后台(如:Java)调用微信官方接口的
+关注继续查看

一、access_token

(1) 关于 access_token:

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

  • 调用微信官方的某些接口必须携带【access_token】作为参数
  • 目前 access_token 的有效期为2个小时
  • 不要反复获取 access_token
  • access_token 是供后台(如:Java)调用微信官方接口的

(2) 获取 access_token

  • 往微信官方的 GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 请求路径发送一个 GET 请求
  • 需携带 APPID(应用的唯一标识) 和 APPSECRET(应用秘钥) 作为参数 APPID 和 APPSECRET 可登录自己小程序或公众号平台查看
  • access_token 需保存在后台
  • Java 后台发送 HTTP 网络请求【使用 Spring 提供的一个 HTTP 请求工具:RestTemplate
  • JSON 格式转换:使用 【hutool-all】
  <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.8.1</version>
  </dependency>
@SuppressWarnings("all")
public class GqWechatUtil {

    private static final String APP_ID = "wxc436706a34c9dcd8";
    private static final String APP_SECRET = "7fe003e0a896420042307f567c58144a";

    // Spring 提供的发送 HTTP 请求的工具
    private static RestTemplate restTemplate = new RestTemplate();

    private static final String ACCESS_TOKEN = "access_token";
    private static final String EXPIRES_IN = "expires_in";

    private static AccessTokenExpiresIn accessTokenExpiresIn;

    /**
     * 各种请求路径
     */
    private static String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=gqAPPID&secret=gqAPPSECRET";

    /**
     * 【方法】获取 access_token 以及 expires_in
     */
    private static void getAccessTokenExpiresIn() {
        HashMap<String, String> retMap = new HashMap<>();
        // 给请求 url 设值
        String url = accessTokenUrl.replace("gqAPPID", APP_ID).replace("gqAPPSECRET", APP_SECRET);
        // 向 url 发送网络请求, 获得返回值字符串
        String resultStr = restTemplate.getForObject(url, String.class);
        // 把 resultStr 转换为 JSON 格式
        JSONObject resultJSON = JSONUtil.parseObj(resultStr);

        String accessToken = resultJSON.get(ACCESS_TOKEN).toString(); // 凭证值
        String expiresIn = resultJSON.get(EXPIRES_IN).toString(); // 凭证有效时间

        accessTokenExpiresIn = new AccessTokenExpiresIn(accessToken, expiresIn);
    }

    /**
     * 【方法】获取 access_token
     *
     * @return access_token 值
     */
    public static String getAccessToken() {
        if (accessTokenExpiresIn == null || accessTokenExpiresIn.alreadyExpired())
            getAccessTokenExpiresIn();
        return accessTokenExpiresIn.getAccessToken();
    }

    /**
     * 凭证和凭证有效时间类
     */
    @Data
    private static class AccessTokenExpiresIn {
        private String accessToken;
        // 过期时间
        private long expireTime;

        public AccessTokenExpiresIn(String accessToken, String expiresIn) {
            this.accessToken = accessToken;
            this.expireTime = System.currentTimeMillis() + Integer.parseInt(expiresIn) * 1000;
        }

        public boolean alreadyExpired() {
            return System.currentTimeMillis() > expireTime;
        }
    }

}

二、网页授权

(1) 关于网页授权

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

  • 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制获取用户基本信息,进而实现业务逻辑

网页授权流程有以下四步:

  • 引导用户进入授权页面同意授权,获取 code
  • 通过 code 换取网页授权 access_token(与之前的 access_token 不同)
  • 如果需要,开发者可以刷新网页授权 access_token,避免过期
  • 通过网页授权 access_token 和 openid 获取用户基本信息

① 引导用户进入授权页面同意授权,获取 code

在前端引导用户访问右边的地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

  • appid【必填】:公众号的唯一标识
  • redirect_uri【必填】:授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理(与 code 配合换取微信授权 access_token)
  • response_type【必填】:默认填写 code 即可
  • scope【必填】:应用授权作用域。snsapi_base (不弹出授权页面而直接跳转,只能获取用户的 openid);snsapi_userinfo (弹出授权页面,可通过 openid 拿到昵称、性别、所在地等。即使用户未关注公众号,只要用户授权,也能获取其信息
  • state【非必填】:重定向后会带上 state 参数,开发者可填写【a-zA-Z0-9】的参数值(最多128字节)
  • wechat_redirect【必填】:无论直接打开还是做页面302重定向,必须带此参数

在这里插入图片描述

② 通过 code 换取网页授权 access_token(与之前的 access_token 不同)

使用 ① 中获得到的 code 作为参数,发送给【https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code】获取 access_token、expires_in、refresh_token、openid、scope

三、模板消息

模板消息介绍:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html

模板消息运营规范:
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Operation_Specifications.html

相关文章
|
2月前
|
XML Java 数据格式
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)(二)
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)
42 0
|
2月前
|
XML Java 应用服务中间件
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)(一)
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)
60 0
|
2月前
|
JSON Java 数据格式
Java SpringBoot 集成微信公众号
Java SpringBoot 集成微信公众号
|
2月前
|
前端开发 Java API
java springboot 手把手带你敲微信公众号自定义登录实现token拦截【硬货教程】
java springboot 手把手带你敲微信公众号自定义登录实现token拦截【硬货教程】
|
9月前
|
算法 Java 数据安全/隐私保护
java实现微信公众号token验证
java实现微信公众号token验证
java实现微信公众号token验证
|
11月前
|
XML JSON JavaScript
【Java 微信公众号】② 接收用户消息;回复用户消息
关于重试的消息排重,推荐使用 msgid(XML 数据包中的内容) 排重 微信服务器在五秒内收不到响应会断掉连接,并重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对空串作任何处理,并且不会发起重试
514 0
【Java 微信公众号】② 接收用户消息;回复用户消息
|
11月前
|
小程序 Java 测试技术
【Java 微信公众号开发】① 介绍、测试号、接入
微信公众号是开发者或商家在微信公众平台上申请的应用账号。该帐号与 QQ 账号互通,平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动 ,形成了一种主流的线上线下微信互动营销方式。 微信公众号是用户在微信公众平台注册的一个账号。账号开通后,可在微信公众号里发视频、图片、文字等推销你的商品或分享生活经验等。 微信公众号类似于一个网站。可作为公司名片、个人名片,可做成商城、互动社区等。管理员可通过微信公众平台发送文章,关注了微信公众号的用户可查看到管理员发送的文章。
375 0
【Java 微信公众号开发】① 介绍、测试号、接入
|
XML 开发框架 Java
使用JAVA开发微信公众平台接口
研究了下微信公众平台接口开发,可回复用户发来的请求 由于腾讯限制不能每天自动群发送信息
|
XML 前端开发 JavaScript
Java微信公众平台开发_07_JSSDK图片上传
一、本节要点 1.获取jsapi_ticket //2.获取getJsapiTicket的接口地址,有效期为7200秒 private static final String GET_JSAPITICKET_URL="https://api.
1149 0
|
JSON 前端开发 Java
Java微信公众平台开发_06_素材管理
一、本节要点 1.官方文档的media  这个media可以理解为文件,即我们需要以POST方式提交一个文件     2.媒体文件有效期 媒体文件在微信后台保存时间为3天,即3天后media_id失效。
1213 0
相关产品
云迁移中心
推荐文章
更多