AlipayHK 新增指定订单查询接口

This commit is contained in:
2024-05-30 09:54:49 +08:00
parent 804dc9b1b4
commit 1aea8e93f2
8 changed files with 88 additions and 68 deletions

34
pom.xml
View File

@@ -28,7 +28,19 @@
<jaxb-core>4.0.0</jaxb-core>
<activation>1.1.1</activation>
<easy-captcha>1.6.2</easy-captcha>
<aws.java.sdk.version>2.20.43</aws.java.sdk.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.java.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -239,6 +251,28 @@
<version>25.0.0</version>
</dependency>
<!-- aws s3 -->
<!-- S3 dependency -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
<version>2.17.103-PREVIEW</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>kms</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3control</artifactId>
</dependency>
</dependencies>
<build>

View File

@@ -11,4 +11,10 @@ public class CommonConstant {
// 单位 秒 一天过期 in redis
public static final Long GENERATE_RESULT_EXPIRE_TIME = 24 * 60 * 60L;
public static class Numbers{
public static final Integer NUMBER_10 = 10;
public static final Integer NUMBER_1000 = 1000;
public static final Integer NUMBER_10080 = 10080;
}
}

View File

@@ -7,9 +7,11 @@ import lombok.Getter;
@Getter
public enum CreditsEventsEnum {
PRICE("price","6"),
// PRICE("price","6"),
PRICE("price","0.1"),
BUY_CREDITS("Buy Credits","600"),
// BUY_CREDITS("Buy Credits","600"),
BUY_CREDITS("Buy Credits","10"),
INIT("init", "500"),

View File

@@ -96,6 +96,7 @@ public class AlipayHKEncryptionUtil {
// Serialize message body
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String content = gson.toJson(requestMessage);
log.info("alipay-hk request 加密前:{}", content);
// Secure random iv 获取随机种子
SecureRandom secureRandom = new SecureRandom();
@@ -153,7 +154,7 @@ public class AlipayHKEncryptionUtil {
// Encode to json
String jsonEncoded = JSONObject.toJSONString(alipayHKRequestDTO);
log.info(jsonEncoded);
log.info("alipay-hk request 加密加签后:{}",jsonEncoded);
// String info = AlipayHKRequestUtil.createOrder(alipayHKRequestDTO);
// log.info(info);

View File

@@ -17,7 +17,7 @@ import org.springframework.stereotype.Component;
@Component
public class AlipayHKRequestUtil {
public String createOrder(AlipayHKRequestDTO alipayHKRequestDTO) throws IOException {
public String requestAlipayHK(AlipayHKRequestDTO alipayHKRequestDTO) throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(30, TimeUnit.SECONDS)
.pingInterval(5, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒)

View File

@@ -21,8 +21,8 @@ public class AlipayHKController {
private AlipayHKService alipayHKService;
@ApiOperation(value = "创建订单")
@PostMapping(value = "/createOrder")
public Response<String> createOrder(@RequestParam Integer amount, @RequestParam String wallet) {
@PostMapping(value = "/createOrder/{wallet}/{amount}")
public Response<String> createOrder(@PathVariable Integer amount, @PathVariable String wallet) {
String order = alipayHKService.createOrder(amount, wallet);
return Response.success(order);
}
@@ -33,7 +33,12 @@ public class AlipayHKController {
return alipayHKService.callback(params);
}
@ApiOperation("订单查询")
@PostMapping("/trade/query/{orderRef}")
public Response<String> queryOrder(@PathVariable String orderRef){
String s = alipayHKService.queryDetail(orderRef);
return Response.success(s);
}

View File

@@ -11,4 +11,6 @@ public interface AlipayHKService {
String callback(Map<String, String> params);
void processOrder(AlipayHKCallbackDTO alipayHKCallbackDTO);
String queryDetail(String orderRef);
}

View File

@@ -11,7 +11,6 @@ import com.ai.da.model.dto.AlipayHKCallbackDTO;
import com.ai.da.model.dto.AlipayHKRequestDTO;
import com.ai.da.service.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -19,11 +18,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@@ -80,10 +76,10 @@ public class AlipayHKServiceImpl implements AlipayHKService {
// 生成订单
log.info("创建订单");
OrderInfo orderInfo = orderInfoService.createOrderByProductId(amount, PayTypeEnum.ALIPAY_HK.getType());
// 加密
/*// 加密
AlipayHKRequestDTO alipayHKRequestDTO = alipayHKEncryptionUtil.AESCBCWithRSA(param, AlipayHKConstant.CREATE_ORDER);
// 请求Alipay服务端
String response = alipayHKRequestUtil.createOrder(alipayHKRequestDTO);
String response = alipayHKRequestUtil.requestAlipayHK(alipayHKRequestDTO);
// 获取response中的加密数据
JSONObject responseObj = JSONObject.parseObject(response);
JSONObject resultObj = JSONObject.parseObject(responseObj.get("result").toString());
@@ -91,18 +87,36 @@ public class AlipayHKServiceImpl implements AlipayHKService {
String message = resultObj.get("message").toString();
// 解密
String s = alipayHKEncryptionUtil.decryptAES(message, nonce);
JSONObject jsonObject = JSONObject.parseObject(s);*/
String s = enAndDecryption(param, AlipayHKConstant.CREATE_ORDER);
JSONObject jsonObject = JSONObject.parseObject(s);
String orderId = jsonObject.get("out_trade_no").toString();
orderInfoService.updateOrderNoById(orderInfo.getId(), orderId);
log.info("create_order 接口返回信息 {}", s);
return s;
}catch (Exception e){
log.error("订单创建失败 {}", e.getMessage());
// todo 或者抛异常
return null;
}
}
private String enAndDecryption(HashMap<String,Object> param, String serviceName){
try{
// 加密
AlipayHKRequestDTO alipayHKRequestDTO = alipayHKEncryptionUtil.AESCBCWithRSA(param, serviceName);
// 请求Alipay服务端
String response = alipayHKRequestUtil.requestAlipayHK(alipayHKRequestDTO);
// 获取response中的加密数据
JSONObject responseObj = JSONObject.parseObject(response);
JSONObject resultObj = JSONObject.parseObject(responseObj.get("result").toString());
String nonce = resultObj.get("nonce").toString();
String message = resultObj.get("message").toString();
// 解密
return alipayHKEncryptionUtil.decryptAES(message, nonce);
}catch (Exception e){
log.error("订单创建失败 {}", e.getMessage());
// todo 或者抛异常
@@ -234,59 +248,15 @@ public class AlipayHKServiceImpl implements AlipayHKService {
}
}
// 查询订单详情
public String queryDetail(String orderRef){
HashMap<String, Object> param = new HashMap<>();
param.put("order_ref", orderRef);
String s = enAndDecryption(param, AlipayHKConstant.ORDER_DETAILS);
JSONObject jsonObject = JSONObject.parseObject(s);
log.info("订单:{},状态为:{}", orderRef, jsonObject.get("status"));
public static String decrypt(String message){
String text = "{\"success\":true,\"reference_id\":\"d4f55a35-8725-40f3-8279-37ea95837741\",\"result\":{\"nonce\":\"tUsbfFrNWcZZYrN3dWQHNQ==\",\"message\":\"6wCHtIMRXXgj0TOV7jtvCzbKc+gWEnqbgAD5pMx4sIvliL65EF+btKRheJI/0gssOj0PdwUPYLlgjTdSWQZraQLU4F05FGSYJ7lNxFZ1tXLvhUv4ukiCz0xyPJIQ5vvNH/SmQ5iIQvMO/fTg6ZiZj2I+Oahzy5h2/cXmrXBEedNFZSGIVFKMuipul3QcFEO+qQQcOHOiRDAXrhF1+qoq4GROBpcKhu5WMHxUGDHj0l/tY2Rp004FNwfArbOeR5TusgMMgm7aE8IqpFJ6w4zES1lS903fHJzFWcqKMwB9tYoxnegoHSNmOVeokgBCvLOI2uVJCWN4ZqVq1mmhoib4zVxjex+pgoMtHPvV+Gjy+IB2PA5YCid0vH9WymkBkYZIioW1KH587G3lTTEWrzTc+JWWd+yIxD1nofZxAi0t+EFOgyab2HRawdpWpkwKH5XqoZ05yj0Vl0u7nWcF4GLytC5wTWyPOU3Ua/ePlniU/z5BWZkUQGWXWSKhyEmt53mx3UUXbC6/zfk1jcbyEGHonCimmf88Xl9yE3ae02xoRsDO8bcnzCRD88UWUi3UySWNmxdYDTdWj0wCU27nmLMLjkXvesRl2CfuZbkbDxDQHHKkT1DX4XoSU+vmUmSpH7IBCHXoq+SYHfRmfDsAYv7WmiJOQeo7i3RogLnBej0bFimY5JHhWBT69FVPc0aRi19eTz9L7grjLKz92+hbb4Qj7yvb08RvMUabv1juy4YHGulE73EVoLS6+FRBdEY8ZmIFq5lQcwMKb63/v+V/63AHP+oCDMzZZ7wKmQ5+UkgKcXgxToTOzulesQXD8urGcjGUwLnJviilIQywH1XFdcnDNWv95DdOB3nQ3HorqTFC+0kZMdTCO1L7zRbZQxWoExB41wQW3CNLvEkJlpaUv5TWKkep1wcT2PKFbuSVPnFnVnxZ7qNdlVLmBzEs9nX15C61+a28gFij4wj6ed8LIJwT4KapfZAFWwl2V2KmonqiXKk60/StBK9/dWHGfZ4ysPvXBB+fxJj3hR36Vu4HceNVYg+9tf5zEJ79J664iiyEFdyKzORlXnsJF33oPKC0+cuH1qhBzyf/o6t86F4DbpMBb2xhFRt1mDgFrV40JhT+2+iLCIqUmATBYsAYZZ9XIyi3vyaRGhgdd1ND/bhddALm/GKD4AJUo8FKtdkerYSbk/TpPLhvbrEFSDpkCT+JoOLiF4EzqRwZOrQklaXBOS67aaATRBzDxKJuFSGuFAWAIdLHhXcj/wDmnh1fqj03D4NmNmVSw7wKmt1OjI9arh6Ua1Mp7+1g+NT4BEdRnPYQX3CeiyRa0RUNyWxFDYZPGGpjSVNLf0vrzRh3hLEGBUlHXCza0SWuARkGmS6YdsvJr3gt+RlxXtrnI0LC0lgi9/Vw5zM5dGYX24tUOqCEA/9/FVvVZddfimYhmP44+ST1xTDgDw0rtVZQrcQjEg4UCcFq\"}}\n";
String str = "6wCHtIMRXXgj0TOV7jtvCzbKc+gWEnqbgAD5pMx4sIvliL65EF+btKRheJI/0gssOj0PdwUPYLlgjTdSWQZraQLU4F05FGSYJ7lNxFZ1tXLvhUv4ukiCz0xyPJIQ5vvNH/SmQ5iIQvMO/fTg6ZiZj2I+Oahzy5h2/cXmrXBEedNFZSGIVFKMuipul3QcFEO+qQQcOHOiRDAXrhF1+qoq4GROBpcKhu5WMHxUGDHj0l/tY2Rp004FNwfArbOeR5TusgMMgm7aE8IqpFJ6w4zES1lS903fHJzFWcqKMwB9tYoxnegoHSNmOVeokgBCvLOI2uVJCWN4ZqVq1mmhoib4zVxjex+pgoMtHPvV+Gjy+IB2PA5YCid0vH9WymkBkYZIioW1KH587G3lTTEWrzTc+JWWd+yIxD1nofZxAi0t+EFOgyab2HRawdpWpkwKH5XqoZ05yj0Vl0u7nWcF4GLytC5wTWyPOU3Ua/ePlniU/z5BWZkUQGWXWSKhyEmt53mx3UUXbC6/zfk1jcbyEGHonCimmf88Xl9yE3ae02xoRsDO8bcnzCRD88UWUi3UySWNmxdYDTdWj0wCU27nmLMLjkXvesRl2CfuZbkbDxDQHHKkT1DX4XoSU+vmUmSpH7IBCHXoq+SYHfRmfDsAYv7WmiJOQeo7i3RogLnBej0bFimY5JHhWBT69FVPc0aRi19eTz9L7grjLKz92+hbb4Qj7yvb08RvMUabv1juy4YHGulE73EVoLS6+FRBdEY8ZmIFq5lQcwMKb63/v+V/63AHP+oCDMzZZ7wKmQ5+UkgKcXgxToTOzulesQXD8urGcjGUwLnJviilIQywH1XFdcnDNWv95DdOB3nQ3HorqTFC+0kZMdTCO1L7zRbZQxWoExB41wQW3CNLvEkJlpaUv5TWKkep1wcT2PKFbuSVPnFnVnxZ7qNdlVLmBzEs9nX15C61+a28gFij4wj6ed8LIJwT4KapfZAFWwl2V2KmonqiXKk60/StBK9/dWHGfZ4ysPvXBB+fxJj3hR36Vu4HceNVYg+9tf5zEJ79J664iiyEFdyKzORlXnsJF33oPKC0+cuH1qhBzyf/o6t86F4DbpMBb2xhFRt1mDgFrV40JhT+2+iLCIqUmATBYsAYZZ9XIyi3vyaRGhgdd1ND/bhddALm/GKD4AJUo8FKtdkerYSbk/TpPLhvbrEFSDpkCT+JoOLiF4EzqRwZOrQklaXBOS67aaATRBzDxKJuFSGuFAWAIdLHhXcj/wDmnh1fqj03D4NmNmVSw7wKmt1OjI9arh6Ua1Mp7+1g+NT4BEdRnPYQX3CeiyRa0RUNyWxFDYZPGGpjSVNLf0vrzRh3hLEGBUlHXCza0SWuARkGmS6YdsvJr3gt+RlxXtrnI0LC0lgi9/Vw5zM5dGYX24tUOqCEA/9/FVvVZddfimYhmP44+ST1xTDgDw0rtVZQrcQjEg4UCcFq";
try {
// String s = decryptAES(str, "tUsbfFrNWcZZYrN3dWQHNQ==");
// log.info(s);
} catch (Exception e) {
throw new RuntimeException(e);
}
return null;
}
// public static void main(String[] args) throws Exception {
//// test();
//// AESCBCWithRSA();
//// decrypt();
// }
public static void main(String[] args) {
System.out.println("Supported TLS versions:");
String[] tlsVersions = getSupportedTLSVersions();
Arrays.stream(tlsVersions).forEach(System.out::println);
}
public static String[] getSupportedTLSVersions() {
try {
SSLContext context = SSLContext.getDefault();
SSLSocketFactory factory = context.getSocketFactory();
String[] supportedProtocols = factory.getDefaultCipherSuites();
return supportedProtocols;
} catch (Exception e) {
e.printStackTrace();
return new String[0];
}
return s;
}