package com.management.controller; import com.alibaba.fastjson.JSONObject; import com.management.constant.ERPURLConstant; import com.management.utils.CaffeineCacheUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import java.util.LinkedHashMap; /** * 金蝶APP授权码获取 * * @param * @return null * @Author weiloong_zhang */ @RestController @RequestMapping @Slf4j public class KDTokenController { private RestTemplate restTemplate = new RestTemplate(); /** * 测试入口 * * @param args * @return void * @Author weiloong_zhang */ public static void main(String[] args) { new KDTokenController().getKDAppToken(); //new KDTokenController().getKDAccessToken(); } /** * 金蝶APP授权码获取 * * @return void * @Author weiloong_zhang */ public String getKDAppToken() { log.info("开始获取金蝶的AppToken"); //开始封装 //接口地址 String appTokenUrl = "https://lxr2.zhydsp.cn:40448/ierp/api/getAppToken.do"; //请求参数 LinkedHashMap appTokenParams = new LinkedHashMap<>(); appTokenParams.put("appId", "erpapi"); appTokenParams.put("appSecret", "ZHYkdERPapi@2025"); appTokenParams.put("tenantid", "zyierp"); appTokenParams.put("accountId", "2095350818281620480"); //开始发起请求 String appTokenRes = ""; try { appTokenRes = restTemplate.postForObject(appTokenUrl, appTokenParams, String.class); } catch (RestClientException e) { e.printStackTrace(); } //转换为JSONObject JSONObject appTokenJSON = JSONObject.parseObject(appTokenRes); if (!"success".equals(appTokenJSON.getString("state")) || appTokenJSON.getJSONObject("data") == null) { log.error("获取金蝶的AppToken失败,{}", appTokenRes); return ""; } //获取apptoken成功 String appToken = appTokenJSON.getJSONObject("data").getString("app_token"); log.info("获取金蝶的AppToken成功,{}", appToken); return appToken; } /** * 金蝶access_token获取 * * @return java.lang.String * @Author weiloong_zhang */ public String getKDAccessToken() { log.info("开始获取金蝶accessToken"); //用来接收token的字符串 String accessToken = ""; //判断咖啡因中是否存在accessToken if (CaffeineCacheUtil.get("kd_access_token") != null && !"".equals(CaffeineCacheUtil.get("kd_access_token"))) { log.info("获取到缓存中的accessToken,{}", accessToken); accessToken = CaffeineCacheUtil.get("kd_access_token").toString(); return accessToken; } //不存在,将执行获取accessToken的逻辑 //开始封装参数 //URL String accessTokenUrl = "https://lxr2.zhydsp.cn:40448/ierp/api/login.do"; //请求参数 LinkedHashMap accessTokenParams = new LinkedHashMap<>(); accessTokenParams.put("user", "19819780536"); accessTokenParams.put("usertype", "Mobile"); accessTokenParams.put("apptoken", getKDAppToken()); accessTokenParams.put("tenantid", "zyierp"); accessTokenParams.put("accountId", "2095350818281620480"); accessTokenParams.put("language", "zh_CN"); //开始向金蝶发起请求 String accessTokenRes = ""; try { accessTokenRes = restTemplate.postForObject(accessTokenUrl, accessTokenParams, String.class); } catch (RestClientException e) { e.printStackTrace(); } JSONObject accessTokenJSON = JSONObject.parseObject(accessTokenRes); if (!"success".equals(accessTokenJSON.getString("state")) || accessTokenJSON.getJSONObject("data") == null) { log.error("获取金蝶的accessToken失败,{}", accessTokenRes); return ""; } log.info("获取金蝶的accessToken成功,{}", accessTokenJSON.getJSONObject("data").getString("access_token")); accessToken = accessTokenJSON.getJSONObject("data").getString("access_token"); //存放到咖啡因之中 CaffeineCacheUtil.put("kd_access_token", accessToken); return accessToken; } /** * 金蝶测试系统App授权码获取 * @return java.lang.String * @Author weiloong_zhang */ public String getKDAppTokenTest() { log.info("开始获取金蝶的AppToken"); //开始封装 //接口地址 String appTokenUrl = ERPURLConstant.ERP_URL + "/ierp/api/getAppToken.do"; //请求参数 LinkedHashMap appTokenParams = new LinkedHashMap<>(); appTokenParams.put("appId", "FXXKCRM"); appTokenParams.put("appSecret", "FXXKCRM20251234a!"); appTokenParams.put("tenantid", "zyierp"); appTokenParams.put("accountId", ERPURLConstant.ACCOUNT_ID); //开始发起请求 String appTokenRes = ""; try { appTokenRes = restTemplate.postForObject(appTokenUrl, appTokenParams, String.class); } catch (RestClientException e) { e.printStackTrace(); } //转换为JSONObject JSONObject appTokenJSON = JSONObject.parseObject(appTokenRes); if (!"success".equals(appTokenJSON.getString("state")) || appTokenJSON.getJSONObject("data") == null) { log.error("获取金蝶的AppToken失败,{}", appTokenRes); return ""; } //获取apptoken成功 String appToken = appTokenJSON.getJSONObject("data").getString("app_token"); log.info("获取金蝶的AppToken成功,{}", appToken); return appToken; } /** * 金蝶a测试access_token获取 * * @return java.lang.String * @Author weiloong_zhang */ public String getKDAccessTokenTest() { log.info("开始获取金蝶accessToken"); //用来接收token的字符串 String accessToken = ""; //判断咖啡因中是否存在accessToken if (CaffeineCacheUtil.get("kd_access_token") != null && !"".equals(CaffeineCacheUtil.get("kd_access_token"))) { log.info("获取到缓存中的accessToken,{}", accessToken); accessToken = CaffeineCacheUtil.get("kd_access_token").toString(); return accessToken; } //不存在,将执行获取accessToken的逻辑 //开始封装参数 //URL String accessTokenUrl = ERPURLConstant.ERP_URL + "/ierp/api/login.do"; //请求参数 LinkedHashMap accessTokenParams = new LinkedHashMap<>(); accessTokenParams.put("user", "19819780536"); accessTokenParams.put("usertype", "Mobile"); accessTokenParams.put("apptoken", getKDAppTokenTest()); accessTokenParams.put("tenantid", "zyierp"); accessTokenParams.put("accountId", ERPURLConstant.ACCOUNT_ID); accessTokenParams.put("language", "zh_CN"); //开始向金蝶发起请求 String accessTokenRes = ""; try { accessTokenRes = restTemplate.postForObject(accessTokenUrl, accessTokenParams, String.class); } catch (RestClientException e) { e.printStackTrace(); } JSONObject accessTokenJSON = JSONObject.parseObject(accessTokenRes); if (!"success".equals(accessTokenJSON.getString("state")) || accessTokenJSON.getJSONObject("data") == null) { log.error("获取金蝶的accessToken失败,{}", accessTokenRes); return ""; } log.info("获取金蝶的accessToken成功,{}", accessTokenJSON.getJSONObject("data").getString("access_token")); accessToken = accessTokenJSON.getJSONObject("data").getString("access_token"); //存放到咖啡因之中 CaffeineCacheUtil.put("kd_access_token", accessToken); return accessToken; } }