Răsfoiți Sursa

Add getStableAccessToken

tsurumure 5 luni în urmă
părinte
comite
8e2157cdf2

+ 25 - 1
src/main/java/com/backendsys/modules/sdk/wechat/miniprogram/utils/WechatUtil.java

@@ -21,7 +21,9 @@ public class WechatUtil {
      *
      * 微信 - 小程序登录
      * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html
-     * 返回值:{ "openid":"xxxxxx", "session_key":"xxxxx", "unionid":"xxxxx", "errcode":0, "errmsg":"xxxxx" }
+     * - errcode: 错误码,请求失败时返回
+     * [失败] 返回值:{"errcode":40164,"errmsg":"invalid ip 116.31.165.86 ipv6 ::ffff:116.31.165.86, not in whitelist, rid: 67d15951-5b3f2778-79d6f047"}
+     * [成功] 返回值:{"session_key":"uQAcry2PC1Lx/Krp+6rr0g==","openid":"oSB9r7T7kN1bC7PabJ7RmTUiaJmo"}
      */
     public JSONObject getCode2Session(String code) {
         String url = "https://api.weixin.qq.com/sns/jscode2session";
@@ -34,4 +36,26 @@ public class WechatUtil {
         return JSONUtil.parseObj(result);
     }
 
+    /**
+     * 获取接口调用凭据
+     * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
+     * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getStableAccessToken.html
+     * 返回值:{ access_token, expires_in }
+     */
+    public JSONObject getStableAccessToken() {
+        String url = "https://api.weixin.qq.com/cgi-bin/stable_token";
+        Map<String, Object> params = new LinkedHashMap<>();
+        params.put("appid", APPID);
+        params.put("secret", APP_SECRET);
+        params.put("grant_type", "client_credential");
+        // - force_refresh: 默认使用 false。
+        // 1. force_refresh = false 时为普通调用模式,access_token 有效期内重复调用该接口不会更新 access_token;
+        // 2. 当force_refresh = true 时为强制刷新模式,会导致上次获取的 access_token 失效,并返回新的 access_token
+        String result = HttpUtil.post(url, params);
+
+        // 再写个缓存,这里是开发者调用接口时的凭证
+
+        return JSONUtil.parseObj(result);
+    }
+
 }