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<String, Object> 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;
|
}
|
|
}
|