Procházet zdrojové kódy

微信媒资:小程序Toke更新

ZHAOXIAN před 9 měsíci
rodič
revize
cb09e0fac1

+ 14 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/AppletTokenRefreshMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.job.adq.data.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface AppletTokenRefreshMapper {
+
+    List<JSONObject> queryAppletList();
+
+    void refreshAppletTokens(@Param("list") List<JSONObject> list);
+
+}

+ 31 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/xml/AppletTokenRefreshMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.com.ctop.job.adq.data.mapper.AppletTokenRefreshMapper">
+
+    <select id="queryAppletList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.id,
+               t1.name,
+               t1.app_id AS 'appId', t1.app_secret AS 'appSecret', t2.id as 'officialAccountId'
+        FROM thirtpart.ly_applet t1
+                 LEFT JOIN thirtpart.ly_official_accounts t2 ON t1.id = t2.applet_id
+        WHERE t1.source != 2 AND t1.type =1
+    </select>
+
+    <insert id="refreshAppletTokens">
+        replace into thirtpart.applet_tokens (
+        app_id,
+        official_account_id,
+        applet_id,
+        token
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.appId},
+            #{item.officialAccountId},
+            #{item.id},
+            #{item.token}
+            )
+        </foreach>
+    </insert>
+</mapper>

+ 7 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/IAppletTokenRefreshService.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.job.adq.data.service;
+
+public interface IAppletTokenRefreshService {
+
+    void buildAppletTokens();
+
+}

+ 68 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/impl/AppletTokenRefreshServiceImpl.java

@@ -0,0 +1,68 @@
+package cn.com.ctop.job.adq.data.service.impl;
+
+import cn.com.ctop.job.adq.data.mapper.AppletTokenRefreshMapper;
+import cn.com.ctop.job.adq.data.service.IAppletTokenRefreshService;
+import cn.com.ctop.job.adq.data.utils.Check;
+import cn.com.ctop.job.adq.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Slf4j
+public class AppletTokenRefreshServiceImpl implements IAppletTokenRefreshService {
+
+    @Autowired
+    private AppletTokenRefreshMapper tokenRefreshMapper;
+
+    @Resource
+    private RedisTemplate redis2Template_db5;
+
+    @Override
+    public void buildAppletTokens() {
+        List<JSONObject> list = tokenRefreshMapper.queryAppletList();
+        for (JSONObject applet : list) {
+            buildAppletToken(applet, 0);
+        }
+        tokenRefreshMapper.refreshAppletTokens(list);
+    }
+
+    //构建小程序token
+    private void buildAppletToken(JSONObject applet, int count) {
+        String name = applet.getString("name");
+        try {
+            Map<String, Object> param = new HashMap<>();
+            String appId = applet.getString("appId");
+            param.put("appid", appId);
+            param.put("secret", applet.getString("appSecret"));
+            param.put("grant_type", "client_credential");
+            String result = HttpUtils.httpGet("https://api.weixin.qq.com/cgi-bin/token", param, null);
+            JSONObject tokenInfo = JSONObject.parseObject(result);
+            if (!Check.isNull(tokenInfo)) {
+                String accessToken = tokenInfo.getString("access_token");
+                redis2Template_db5.opsForValue().set("wechat-applet-access-token-key-" + applet.getInteger("id"), accessToken, 60, TimeUnit.MINUTES);
+                applet.put("token", accessToken);
+                log.info("小程序:{},更新token完成", name);
+            } else {
+                if (count < 3) {
+                    Thread.sleep(5000L);
+                    buildAppletToken(applet, count + 1);
+                } else {
+                    log.error("小程序:{},更新token失败!,结果:{}", name, tokenInfo);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("小程序:{},更新token异常!", name);
+        }
+    }
+
+}

+ 31 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/handler/AppletTokenRefreshJob.java

@@ -0,0 +1,31 @@
+package cn.com.ctop.job.adq.handler;
+
+import cn.com.ctop.job.adq.data.service.IAppletTokenRefreshService;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 微信小程序clientToke刷新
+ */
+@Slf4j
+@Component
+public class AppletTokenRefreshJob {
+
+    @Autowired
+    private IAppletTokenRefreshService tokenRefreshService;
+
+    @XxlJob("wechatAppletTokenRefreshJob")
+    public void wechatAppletTokenRefreshJob() {
+        log.info("[wechatAppletTokenRefreshJob] 小程序token更新任务开始...");
+        try {
+            // 生成小程序token
+            tokenRefreshService.buildAppletTokens();
+        } catch (Exception e) {
+            XxlJobHelper.handleFail("[wechatAppletTokenRefreshJob] 异常 + " + e.getMessage());
+        }
+    }
+
+}