|
|
@@ -2,6 +2,7 @@ package com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.github.microservice.core.util.net.apache.HttpClientUtil;
|
|
|
@@ -25,6 +26,8 @@ import org.springframework.util.StopWatch;
|
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
import java.util.TreeMap;
|
|
|
|
|
|
/**
|
|
|
@@ -59,8 +62,15 @@ public class UnionRequestService extends SuperService {
|
|
|
StopWatch stopWatch = new StopWatch();
|
|
|
stopWatch.start();
|
|
|
// 发送请求
|
|
|
- ResponseModel request = HttpClientUtil.request(HttpModel.builder()
|
|
|
- .url(url).method(apiConfParam.getMethodType()).charset("utf-8").body(data).build());
|
|
|
+ HttpModel httpModel = HttpModel.builder()
|
|
|
+ .url(url).method(apiConfParam.getMethodType())
|
|
|
+ .charset("utf-8").body(data).build();
|
|
|
+
|
|
|
+ Map<String, Object> header = new HashMap<>();
|
|
|
+ header.put("Authorization", sign(JSONUtil.parseObj(JSONUtil.toJsonStr(data))));
|
|
|
+ httpModel.setHeader(header);
|
|
|
+ ResponseModel request = HttpClientUtil.request(httpModel);
|
|
|
+
|
|
|
int code = request.getCode();
|
|
|
if (code == 200) {
|
|
|
BeanUtil.copyProperties(request.getBody(), responseModel);
|
|
|
@@ -69,6 +79,7 @@ public class UnionRequestService extends SuperService {
|
|
|
} else {
|
|
|
BeanUtil.copyProperties(request.getBody(), responseModel);
|
|
|
}
|
|
|
+ responseModel.setCode(code);
|
|
|
stopWatch.stop();
|
|
|
responseModel.setMillis(stopWatch.getTotalTimeMillis());
|
|
|
} catch (Exception e) {
|
|
|
@@ -105,25 +116,71 @@ public class UnionRequestService extends SuperService {
|
|
|
StringBuffer reqPara = new StringBuffer();// 组织请求参数
|
|
|
|
|
|
for (String key : map.keySet()) {
|
|
|
+ Object o = map.get(key);
|
|
|
+ String val = "";
|
|
|
+ if (o instanceof ArrayList) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else if (o instanceof JSONArray) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else if (o instanceof JSONObject) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else {
|
|
|
+ val = String.valueOf(map.get(key));
|
|
|
+ }
|
|
|
+// val = URLEncoder.encode(val, "UTF-8");
|
|
|
if (signPara.length() == 0) {
|
|
|
- signPara.append(key + "=" + map.get(key));
|
|
|
- reqPara.append(key + "=" + URLEncoder.encode(String.valueOf(map.get(key)), "UTF-8"));
|
|
|
+ signPara.append(key + "=" + val);
|
|
|
+ reqPara.append(key + "=" + val);
|
|
|
} else {
|
|
|
- Object o = map.get(key);
|
|
|
- if (o instanceof ArrayList) {
|
|
|
- String jsonStr = JSONUtil.toJsonStr(o);
|
|
|
- signPara.append("&" + key + "=" + jsonStr);
|
|
|
- reqPara.append("&" + key + "=" + URLEncoder.encode(jsonStr, "UTF-8"));
|
|
|
- } else {
|
|
|
- signPara.append("&" + key + "=" + map.get(key));
|
|
|
- reqPara.append("&" + key + "=" + URLEncoder.encode(String.valueOf(map.get(key)), "UTF-8"));
|
|
|
- }
|
|
|
+ signPara.append("&" + key + "=" + val);
|
|
|
+ reqPara.append("&" + key + "=" + val);
|
|
|
}
|
|
|
}
|
|
|
- String sign = AesUtils.signData(signPara.toString() + UnionPaymentConfig.payKey);
|
|
|
+ String signStr = signPara.toString() + UnionPaymentConfig.payKey;
|
|
|
+ log.info("s: {}", signStr);
|
|
|
+ String sign = AesUtils.signData(signStr);
|
|
|
+ log.info("sign: {}", sign);
|
|
|
+ String md5 = AesUtils.getMD5Str(signStr);
|
|
|
+ log.info("md5: {}", md5);
|
|
|
+
|
|
|
StringBuffer append = reqPara.append("&sign=" + URLEncoder.encode(sign, "UTF-8"));
|
|
|
return append.toString();
|
|
|
}
|
|
|
|
|
|
+ @SneakyThrows
|
|
|
+ public String sign(JSONObject entries) {
|
|
|
+ TreeMap<String, Object> map = new TreeMap<>();
|
|
|
+ for (String key : entries.keySet()) {
|
|
|
+ if (!ObjectUtil.isEmpty(entries.get(key)) && !"sign".equals(key)) {
|
|
|
+ map.put(key, String.valueOf(entries.get(key)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ StringBuffer signPara = new StringBuffer();//代签名的字符串
|
|
|
+
|
|
|
+ for (String key : map.keySet()) {
|
|
|
+ Object o = map.get(key);
|
|
|
+ String val = "";
|
|
|
+ if (o instanceof ArrayList) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else if (o instanceof JSONArray) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else if (o instanceof JSONObject) {
|
|
|
+ val = JSONUtil.toJsonStr(o);
|
|
|
+ } else {
|
|
|
+ val = String.valueOf(map.get(key));
|
|
|
+ }
|
|
|
+// val = URLEncoder.encode(val, "UTF-8");
|
|
|
+ if (signPara.length() == 0) {
|
|
|
+ signPara.append(key + "=" + val);
|
|
|
+ } else {
|
|
|
+ signPara.append("&" + key + "=" + val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String signStr = signPara.toString() + UnionPaymentConfig.payKey;
|
|
|
+ String sign = AesUtils.signData(signStr);
|
|
|
+ log.info("sign: {}", sign);
|
|
|
+ return sign;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|