diff --git a/pom.xml b/pom.xml index e2a8d0f6..8ec5336d 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,19 @@ 4.0.0 1.1.1 1.6.2 + 2.20.43 + + + + software.amazon.awssdk + bom + ${aws.java.sdk.version} + pom + import + + + org.springframework.boot @@ -239,6 +251,28 @@ 25.0.0 + + + + software.amazon.awssdk + s3 + + + software.amazon.awssdk + s3-transfer-manager + 2.17.103-PREVIEW + + + software.amazon.awssdk + kms + + + software.amazon.awssdk + s3control + + + + diff --git a/src/main/java/com/ai/da/common/constant/CommonConstant.java b/src/main/java/com/ai/da/common/constant/CommonConstant.java index ac139e98..252350c5 100644 --- a/src/main/java/com/ai/da/common/constant/CommonConstant.java +++ b/src/main/java/com/ai/da/common/constant/CommonConstant.java @@ -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; + } + } diff --git a/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java b/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java index 8a63d880..0b00fa84 100644 --- a/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java +++ b/src/main/java/com/ai/da/common/enums/CreditsEventsEnum.java @@ -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"), diff --git a/src/main/java/com/ai/da/common/utils/AlipayHKEncryptionUtil.java b/src/main/java/com/ai/da/common/utils/AlipayHKEncryptionUtil.java index 5e8662a3..a26d60a0 100644 --- a/src/main/java/com/ai/da/common/utils/AlipayHKEncryptionUtil.java +++ b/src/main/java/com/ai/da/common/utils/AlipayHKEncryptionUtil.java @@ -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); diff --git a/src/main/java/com/ai/da/common/utils/AlipayHKRequestUtil.java b/src/main/java/com/ai/da/common/utils/AlipayHKRequestUtil.java index a980e477..3bfcf9a4 100644 --- a/src/main/java/com/ai/da/common/utils/AlipayHKRequestUtil.java +++ b/src/main/java/com/ai/da/common/utils/AlipayHKRequestUtil.java @@ -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轮训间隔(单位:秒) diff --git a/src/main/java/com/ai/da/controller/AlipayHKController.java b/src/main/java/com/ai/da/controller/AlipayHKController.java index 38f2da9b..602096a6 100644 --- a/src/main/java/com/ai/da/controller/AlipayHKController.java +++ b/src/main/java/com/ai/da/controller/AlipayHKController.java @@ -21,8 +21,8 @@ public class AlipayHKController { private AlipayHKService alipayHKService; @ApiOperation(value = "创建订单") - @PostMapping(value = "/createOrder") - public Response createOrder(@RequestParam Integer amount, @RequestParam String wallet) { + @PostMapping(value = "/createOrder/{wallet}/{amount}") + public Response 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 queryOrder(@PathVariable String orderRef){ + String s = alipayHKService.queryDetail(orderRef); + return Response.success(s); + } diff --git a/src/main/java/com/ai/da/service/AlipayHKService.java b/src/main/java/com/ai/da/service/AlipayHKService.java index 47f06d2b..e0aad9c4 100644 --- a/src/main/java/com/ai/da/service/AlipayHKService.java +++ b/src/main/java/com/ai/da/service/AlipayHKService.java @@ -11,4 +11,6 @@ public interface AlipayHKService { String callback(Map params); void processOrder(AlipayHKCallbackDTO alipayHKCallbackDTO); + + String queryDetail(String orderRef); } diff --git a/src/main/java/com/ai/da/service/impl/AlipayHKServiceImpl.java b/src/main/java/com/ai/da/service/impl/AlipayHKServiceImpl.java index 53c58d5d..038168ec 100644 --- a/src/main/java/com/ai/da/service/impl/AlipayHKServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AlipayHKServiceImpl.java @@ -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 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 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; }