package com.ruoyi.cwgl.service.impl; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.sign.Md5Utils; import com.ruoyi.cwgl.domain.InvoicingVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; /** * 谷神开发的应用系统调用api * @author wjw */ @Service public class GdpaasApiService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private RedisCache redisCache; private final String tokenKey = "GDPAAS_API_TOKEN_KEY"; // private String ROOT_PATH = "http://172.16.24.46:9080/"; @Value("${custom.gdpaasApi.path}") private String ROOT_PATH; @Value("${custom.gdpaasApi.appid}") private String appId; @Value("${custom.gdpaasApi.sign}") private String sign; /** * 获取token * @param appId * @param sign * @param time * @return */ public String getToken(String appId, String sign, String time) { Object token = redisCache.getCacheObject(tokenKey); if (token == null) { //签名摘要 String hash = Md5Utils.hash(appId + time + sign); String urlString = ROOT_PATH + "/gdpaas/apis/getAccessToken.htm" ; Map parm = new HashMap<>(); parm.put("appId", appId); parm.put("sign", hash); parm.put("t", time); String json = null; logger.info("获取第三方token请求参数{}",parm); try { json = HttpUtil.get(urlString, parm); } catch (Exception e) { e.printStackTrace(); logger.error("请求获取第三方token接口失败"); } if (json == null) { return null; } logger.info("获取第三方token响应参数{}",json); JSONObject jsonObject = JSONObject.parseObject(json); Integer code = (Integer) jsonObject.get("code"); if (code.equals(0)) { String data = jsonObject.getString("data"); JSONObject dataJson = JSONObject.parseObject(data); String accessToken = dataJson.getString("accessToken"); Integer expiresIn = (Integer) dataJson.get("expiresIn"); redisCache.setCacheObject(tokenKey,accessToken,expiresIn, TimeUnit.SECONDS); return accessToken; } return null; } return (String) token; } /** * 发票开具接口 */ public String invoicingApi(InvoicingVo order){ String accessToken = getToken(appId, sign, System.currentTimeMillis() + ""); if (accessToken==null){ throw new ServiceException("获取令牌失败"); } String urlString = ROOT_PATH + "/gdpaas/apis/invoke.htm?appId="+appId+"&accessToken="+accessToken+"&method=com.golden.bdp.cwzx.invoice.submitInvoice" ; String body = JSONObject.toJSONString(order); String json = null; try { json = HttpUtil.post(urlString, body); } catch (Exception e) { e.printStackTrace(); logger.error("发票开具接口接口失败"); } logger.info("开票响应{}",json); return json; // String code = jsonObject.getString("code"); // if (json == null) { // logger.info("开票失败"); // return null; // } // if ("0".equals(code)) { // String data = jsonObject.getString("data"); // // JSONObject dataJson = JSONObject.parseObject(data); // String invoiceSerialNum = dataJson.getString("invoiceSerialNum"); // logger.info("开票成功发票序列号为{}",invoiceSerialNum); // return invoiceSerialNum; // } // return null; } /** * 发票开具接口 */ public String invoicingApi(String body){ String accessToken = getToken(appId, sign, System.currentTimeMillis() + ""); if (accessToken==null){ throw new ServiceException("获取令牌失败"); } String urlString = ROOT_PATH + "/gdpaas/apis/invoke.htm?appId="+appId+"&accessToken="+accessToken+"&method=com.golden.bdp.cwzx.invoice.submitInvoice" ; // String body = JSONObject.toJSONString(order); String json = null; try { json = HttpUtil.post(urlString, body); } catch (Exception e) { e.printStackTrace(); logger.error("发票开具接口接口失败"); } logger.info("开票响应{}",json); return json; } }