统一多种支付方式创建订单的入参

This commit is contained in:
2025-01-07 14:31:43 +08:00
parent de73536d1c
commit ee676614f8
12 changed files with 47 additions and 26 deletions

View File

@@ -7,7 +7,7 @@ import lombok.Getter;
@AllArgsConstructor
public enum ProductEnum {
// 积分购买
CreditsProduct("AiDA credits purchase", 6L),
CreditsProduct("AiDA credits purchase", 1L),
// 年度订阅
AnnualSubscription("AiDA Annual Subscription", 5000L),
// 月度订阅

View File

@@ -1,6 +1,7 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.AliPayService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -9,6 +10,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Map;
@CrossOrigin
@@ -22,12 +24,12 @@ public class AliPayController {
private AliPayService aliPayService;
@ApiOperation("统一收单下单并支付页面接口的调用")
@PostMapping("/trade/page/pay/{amount}")
public Response<String> tradePagePay(@PathVariable Integer amount, @RequestParam String returnUrl, HttpServletRequest request){
@PostMapping("/trade/page/pay")
public Response<String> tradePagePay(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request){
log.info("统一收单下单并支付页面接口的调用");
//支付宝开放平台接受 request 请求对象后
// 会为开发者生成一个html 形式的 form表单包含自动提交的脚本
String formStr = aliPayService.tradeCreate(amount, returnUrl, request);
String formStr = aliPayService.tradeCreate(productPurchaseDTO, request);
//我们将form表单字符串返回给前端程序之后前端将会调用自动提交脚本进行表单的提交
//此时表单会自动提交到action属性所指向的支付宝开放平台中从而为用户展示一个支付页面
return Response.success(formStr);

View File

@@ -1,6 +1,7 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.AlipayHKService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -9,6 +10,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
@CrossOrigin
@RestController
@@ -21,9 +23,9 @@ public class AlipayHKController {
private AlipayHKService alipayHKService;
@ApiOperation(value = "创建订单")
@PostMapping(value = "/createOrder/{wallet}/{amount}")
public Response<String> createOrder(@PathVariable Integer amount, @PathVariable String wallet, HttpServletRequest request) {
String order = alipayHKService.createOrder(amount, wallet, request);
@PostMapping(value = "/createOrder")
public Response<String> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
String order = alipayHKService.createOrder(productPurchaseDTO, request);
return Response.success(order);
}

View File

@@ -11,9 +11,9 @@ import com.ai.da.model.dto.UserDesignStatisticDTO;
import com.ai.da.model.vo.QuestionnaireFeedbackVO;
import com.ai.da.model.vo.QuestionnaireVO;
import com.ai.da.model.vo.QueryUserConditionsVO;
import com.ai.da.service.AccountService;
import com.ai.da.service.ConvenientInquiryService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.netty.util.internal.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -36,13 +36,19 @@ public class ConvenientInquiryController {
private DesignMapper designMapper;
@Resource
private ConvenientInquiryService convenientInquiryService;
@Resource
private AccountService accountService;
@ApiOperation("获取当前所有试用用户")
@PostMapping("/getTrial")
public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
Long accountId = UserContext.getUserHolder().getId();
if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)) {
String userEmail = accountService.getById(accountId).getUserEmail();
if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L)
|| accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)
|| userEmail.equals("joho8228@hotmail.com")
) {
return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO));
} else {
return Response.fail("Sorry, you don't have permission");

View File

@@ -1,6 +1,7 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.PayPalCheckoutService;
import com.paypal.http.HttpResponse;
import com.paypal.http.exceptions.SerializeException;
@@ -14,6 +15,7 @@ import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.HashMap;
@@ -26,9 +28,9 @@ public class PayPalCheckoutController {
private PayPalCheckoutService payPalCheckoutService;
@ApiOperation(value = "创建订单")
@PostMapping(value = "/trade/{amount}")
public Response<HashMap<String, String>> createOrder(@PathVariable Integer amount, @RequestParam String returnUrl, HttpServletRequest request) throws SerializeException {
HashMap<String, String> approvalUrl = payPalCheckoutService.createOrder(amount, returnUrl, request);
@PostMapping(value = "/trade")
public Response<HashMap<String, String>> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException {
HashMap<String, String> approvalUrl = payPalCheckoutService.createOrder(productPurchaseDTO, request);
return Response.success(approvalUrl);
}

View File

@@ -27,4 +27,7 @@ public class ProductPurchaseDTO {
@ApiModelProperty("是否自动续订 one_time || recurring")
private Boolean autoRenewal;
@ApiModelProperty("使用Alipay-HK时需要选择 ALIPAYHK || ALIPAYCN")
private String wallet;
}

View File

@@ -1,10 +1,12 @@
package com.ai.da.service;
import com.ai.da.model.dto.ProductPurchaseDTO;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
public interface AliPayService {
String tradeCreate(Integer amount,String returnUrl, HttpServletRequest request);
String tradeCreate(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request);
String tradeNotify(Map<String, String> params);

View File

@@ -1,12 +1,13 @@
package com.ai.da.service;
import com.ai.da.model.dto.AlipayHKCallbackDTO;
import com.ai.da.model.dto.ProductPurchaseDTO;
import javax.servlet.http.HttpServletRequest;
public interface AlipayHKService {
String createOrder(Integer amount, String wallet, HttpServletRequest request);
String createOrder(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request);
String callback(String paramString);

View File

@@ -1,5 +1,6 @@
package com.ai.da.service;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.paypal.http.exceptions.SerializeException;
import com.paypal.orders.Order;
@@ -8,11 +9,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public interface PayPalCheckoutService {
HashMap<String, String> createOrder(Integer amount,String returnUrl, HttpServletRequest request) throws SerializeException;
HashMap<String, String> createOrder(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException;
// String callback(@SuppressWarnings("rawtypes") Map map);

View File

@@ -7,6 +7,7 @@ import com.ai.da.common.enums.OrderStatusEnum;
import com.ai.da.common.enums.PayTypeEnum;
import com.ai.da.mapper.primary.entity.OrderInfo;
import com.ai.da.mapper.primary.entity.RefundInfo;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
@@ -55,12 +56,12 @@ public class AliPayServiceImpl implements AliPayService {
@Transactional(rollbackFor = Exception.class)
@Override
public String tradeCreate(Integer amount, String returnUrl, HttpServletRequest request) {
public String tradeCreate(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
try {
//生成订单
log.info("生成订单");
OrderInfo orderInfo = orderInfoService.createOrderByProductId(amount, PayTypeEnum.ALIPAY.getType(), request);
OrderInfo orderInfo = orderInfoService.createOrderByProductId(productPurchaseDTO.getQuantity(), PayTypeEnum.ALIPAY.getType(), request);
//调用支付宝接口
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
@@ -69,7 +70,7 @@ public class AliPayServiceImpl implements AliPayService {
alipayRequest.setNotifyUrl(config.getProperty("alipay.notify-url"));
//支付完成后我们想让页面跳转回aida的页面配置returnUrl
// alipayRequest.setReturnUrl(config.getProperty("alipay.return-url"));
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setReturnUrl(productPurchaseDTO.getReturnUrl());
//组装当前业务方法的请求参数
JSONObject bizContent = new JSONObject();

View File

@@ -11,6 +11,7 @@ import com.ai.da.mapper.primary.AccountMapper;
import com.ai.da.mapper.primary.entity.OrderInfo;
import com.ai.da.model.dto.AlipayHKCallbackDTO;
import com.ai.da.model.dto.AlipayHKRequestDTO;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject;
@@ -65,23 +66,23 @@ public class AlipayHKServiceImpl implements AlipayHKService {
* 创建订单
*/
@Override
public String createOrder(Integer amount, String wallet , HttpServletRequest request){
public String createOrder(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request){
try{
HashMap<String, Object> param = new HashMap<>();
String orderRef = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
param.put("order_ref", orderRef);
param.put("amount", Float.parseFloat(CreditsEventsEnum.PRICE.getValue()) * amount);
param.put("amount", Float.parseFloat(CreditsEventsEnum.PRICE.getValue()) * productPurchaseDTO.getQuantity());
param.put("subject", "AiDA Credits Purchase");
// ALIPAYHK 或者 ALIPAYCN
param.put("wallet", wallet);
param.put("wallet", productPurchaseDTO.getWallet());
param.put("segment_id", segmentId);
// param.put("payment_solution", "WAP");
param.put("payment_solution", "PC2MOBILE");
log.info("alipay-hk 创建订单,参数信息: {}", param);
// 生成订单
log.info("创建订单");
OrderInfo orderInfo = orderInfoService.createOrderByProductId(amount, PayTypeEnum.ALIPAY_HK.getType(), request);
OrderInfo orderInfo = orderInfoService.createOrderByProductId(productPurchaseDTO.getQuantity(), PayTypeEnum.ALIPAY_HK.getType(), request);
/*// 加密
AlipayHKRequestDTO alipayHKRequestDTO = alipayHKEncryptionUtil.AESCBCWithRSA(param, AlipayHKConstant.CREATE_ORDER);
// 请求Alipay服务端

View File

@@ -9,6 +9,7 @@ import com.ai.da.common.utils.paypalRequest.AuthenticationRequest;
import com.ai.da.common.utils.paypalRequest.WebhookVerifyRequest;
import com.ai.da.mapper.primary.entity.OrderInfo;
import com.ai.da.mapper.primary.entity.RefundInfo;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
@@ -84,14 +85,14 @@ public class PayPalCheckoutServiceImpl implements PayPalCheckoutService {
*/
@Override
@Transactional(rollbackFor = Exception.class)
public HashMap<String, String> createOrder(Integer amount, String returnUrl, HttpServletRequest request) throws SerializeException {
public HashMap<String, String> createOrder(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException {
// 生成订单
log.info("生成订单");
OrderInfo orderInfo = orderInfoService.createOrderByProductId(amount, PayTypeEnum.PAYPAL.getType(), request);
OrderInfo orderInfo = orderInfoService.createOrderByProductId(productPurchaseDTO.getQuantity(), PayTypeEnum.PAYPAL.getType(), request);
OrdersCreateRequest paypalRequest = new OrdersCreateRequest();
paypalRequest.header("prefer", "return=representation");
paypalRequest.requestBody(buildRequestBody(String.valueOf(orderInfo.getTotalFee()), returnUrl));
paypalRequest.requestBody(buildRequestBody(String.valueOf(orderInfo.getTotalFee()), productPurchaseDTO.getReturnUrl()));
HttpResponse<Order> response = null;
try {
response = payPalClient.client(mode, clientId, clientSecret).execute(paypalRequest);