parent
a1956b40d3
commit
8448331791
|
@ -0,0 +1,105 @@
|
|||
package shkd.sys.sys.common;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description
|
||||
* @Author Tao
|
||||
* @Date 2024/11/14
|
||||
*/
|
||||
public class ApiEntity {
|
||||
private String URL;//链接
|
||||
private String method;//请求方式
|
||||
private Map<String, Object> queryParams;//请求参数
|
||||
private Map<String, Object> headers;//请求头参数
|
||||
private JSONObject requestBody;//请求体
|
||||
|
||||
public String getURL() {
|
||||
return URL;
|
||||
}
|
||||
|
||||
public void setURL(String URL) {
|
||||
this.URL = URL;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public Map<String, Object> getQueryParams() {
|
||||
return queryParams;
|
||||
}
|
||||
|
||||
public void setQueryParams(Map<String, Object> queryParams) {
|
||||
this.queryParams = queryParams;
|
||||
}
|
||||
|
||||
public Map<String, Object> getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
public void setHeaders(Map<String, Object> headers) {
|
||||
this.headers = headers;
|
||||
}
|
||||
|
||||
public JSONObject getRequestBody() {
|
||||
return requestBody;
|
||||
}
|
||||
|
||||
public void setRequestBody(JSONObject requestBody) {
|
||||
this.requestBody = requestBody;
|
||||
}
|
||||
|
||||
public ApiEntity(String URL, String method, Map<String, Object> queryParams, Map<String, Object> headers, JSONObject requestBody) {
|
||||
this.URL = URL;
|
||||
this.method = method;
|
||||
this.queryParams = queryParams;
|
||||
this.headers = headers;
|
||||
this.requestBody = requestBody;
|
||||
}
|
||||
|
||||
public ApiEntity() {
|
||||
}
|
||||
|
||||
public static JSONObject getResponseBody(ApiEntity apiEntity) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
Map<String, Object> heads = apiEntity.getHeaders();
|
||||
if (heads != null) {
|
||||
for (String key : heads.keySet()) {
|
||||
httpHeaders.add(key, heads.get(key).toString());
|
||||
}
|
||||
}
|
||||
|
||||
HttpEntity<Object> objectHttpEntity = new HttpEntity<>(httpHeaders);
|
||||
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(apiEntity.getURL());
|
||||
Map<String, Object> params = apiEntity.getQueryParams();
|
||||
if (params != null) {
|
||||
for (String key : params.keySet()) {
|
||||
uriComponentsBuilder.queryParam(key, params.get(key));
|
||||
}
|
||||
}
|
||||
|
||||
HttpMethod method;
|
||||
if (apiEntity.getMethod().equals("POST")) {
|
||||
method = HttpMethod.POST;
|
||||
} else {
|
||||
method = HttpMethod.GET;
|
||||
}
|
||||
ResponseEntity<String> exchange = restTemplate.exchange(uriComponentsBuilder.build().toString(), method, objectHttpEntity, String.class);
|
||||
return JSONObject.parseObject(exchange.getBody());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
package shkd.sys.sys.mservice;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import shkd.sys.sys.common.ApiEntity;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
import javax.crypto.Mac;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description
|
||||
* @Author Tao
|
||||
* @Date 2024/11/11
|
||||
*/
|
||||
public class BIPService {
|
||||
private static final Log logger = LogFactory.getLog(BIPService.class);
|
||||
|
||||
public static String getBIPToken() {
|
||||
String access_token = null;
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
try {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
HttpEntity<Object> objectHttpEntity = new HttpEntity<>(httpHeaders);
|
||||
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("https://biptest.ctny.com.cn/iuap-api-auth/open-auth/selfAppAuth/getAccessToken")
|
||||
.queryParam("appKey", "22564a240d3140d0b15582aca71a748c")
|
||||
.queryParam("timestamp", currentTimeMillis)
|
||||
.queryParam("signature", generateSignature("appKey22564a240d3140d0b15582aca71a748ctimestamp" + currentTimeMillis));
|
||||
ResponseEntity<String> exchange = restTemplate.exchange(builder.build().toString(), HttpMethod.GET, objectHttpEntity, String.class);
|
||||
JSONObject jsonObject = JSON.parseObject(exchange.getBody());
|
||||
if ("00000".equals(jsonObject.getString("code"))){
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
access_token = data.getString("access_token");
|
||||
logger.info("getBIPToken → access_token:{}", access_token);
|
||||
return access_token;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return access_token;
|
||||
}
|
||||
|
||||
private static RestTemplate createRestTemplateIgnoringSsl() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
|
||||
SSLContext sslContext = new SSLContextBuilder()
|
||||
.loadTrustMaterial(null, (chain, authType) -> true)
|
||||
.build();
|
||||
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
|
||||
CloseableHttpClient httpClient = HttpClients.custom()
|
||||
.setSSLSocketFactory(socketFactory)
|
||||
.build();
|
||||
|
||||
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
return new RestTemplate(factory);
|
||||
}
|
||||
|
||||
private static String generateSignature(String toSign) throws Exception {
|
||||
// 计算 HmacSHA256 签名
|
||||
byte[] hmacData = computeHmacSha256(toSign);
|
||||
|
||||
// Base64 编码
|
||||
String base64Encoded = Base64.getEncoder().encodeToString(hmacData);
|
||||
|
||||
// URL 编码
|
||||
return URLEncoder.encode(base64Encoded, StandardCharsets.UTF_8.toString());
|
||||
}
|
||||
|
||||
private static byte[] computeHmacSha256(String data) throws Exception {
|
||||
SecretKeySpec secretKey = new SecretKeySpec("79f0b7daa428c1abd9272565dbc65486ab565c80".getBytes(StandardCharsets.UTF_8), "HmacSHA256");
|
||||
Mac mac = Mac.getInstance("HmacSHA256");
|
||||
mac.init(secretKey);
|
||||
return mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装推送BIP付款单JSON
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static JSONObject paymentSlipsJson() {
|
||||
ApiEntity apiEntity = new ApiEntity();
|
||||
|
||||
JSONObject root = new JSONObject();
|
||||
|
||||
// 创建"data"节点
|
||||
JSONObject data = new JSONObject();
|
||||
|
||||
// 设置"data"节点的属性
|
||||
data.put("accentity_code", "SIG1040100");
|
||||
data.put("vouchdate", "2022-04-20");
|
||||
data.put("tradetype_code", "cmp_fund_payment_other");
|
||||
data.put("exchangeRateType_code", "01");
|
||||
data.put("exchRate", 1);
|
||||
data.put("currency_code", "CNY");
|
||||
data.put("_status", "Insert");
|
||||
|
||||
// 创建"FundPayment_b"列表
|
||||
JSONArray fundPaymentList = new JSONArray();
|
||||
|
||||
// 创建"FundPayment_b"列表中的第一个对象
|
||||
JSONObject fundPayment = new JSONObject();
|
||||
fundPayment.put("quickType_code", "6");
|
||||
fundPayment.put("settlestatus", "1");
|
||||
fundPayment.put("oriSum", 5000);
|
||||
fundPayment.put("caobject", 2);
|
||||
fundPayment.put("oppositeobjectname", "11510107MB1526717D");
|
||||
fundPayment.put("_status", "Insert");
|
||||
|
||||
// 将"FundPayment_b"对象添加到列表中
|
||||
fundPaymentList.add(fundPayment);
|
||||
// 将"FundPayment_b"列表添加到"data"节点中
|
||||
data.put("FundPayment_b", fundPaymentList);
|
||||
// 将"data"节点添加到根JSON对象中
|
||||
root.put("data", data);
|
||||
|
||||
apiEntity.setURL("");
|
||||
apiEntity.setRequestBody(root);
|
||||
apiEntity.setMethod("POST");
|
||||
|
||||
Map<String, Object> queryParams = new HashMap<>();
|
||||
queryParams.put("access_token", getBIPToken());
|
||||
apiEntity.setQueryParams(queryParams);
|
||||
|
||||
Map<String, Object> headers = new HashMap<>();
|
||||
headers.put("Content-Type", "application/json");
|
||||
apiEntity.setHeaders(headers);
|
||||
|
||||
return ApiEntity.getResponseBody(apiEntity);
|
||||
}
|
||||
}
|
|
@ -65,7 +65,9 @@ public class PayBillApiSavePlugin implements ApiSavePlugin, ApiSerializerPlugin
|
|||
|
||||
|
||||
Object payeebankObj = map.get("payeebank");
|
||||
logger.info("payeebankObj:{}", payeebankObj);
|
||||
Map<String, Object> payeebankMap = (Map<String, Object>) payeebankObj;
|
||||
logger.info("payeebankMap:{}", payeebankMap);
|
||||
bankNumber = (String) payeebankMap.get("number");
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue