Merge remote-tracking branch 'origin/dev/dev' into dev/dev

This commit is contained in:
shahaibo
2025-01-07 15:30:33 +08:00
12 changed files with 47 additions and 26 deletions

View File

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

View File

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

View File

@@ -1,6 +1,7 @@
package com.ai.da.controller; package com.ai.da.controller;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.AlipayHKService; import com.ai.da.service.AlipayHKService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -9,6 +10,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
@CrossOrigin @CrossOrigin
@RestController @RestController
@@ -21,9 +23,9 @@ public class AlipayHKController {
private AlipayHKService alipayHKService; private AlipayHKService alipayHKService;
@ApiOperation(value = "创建订单") @ApiOperation(value = "创建订单")
@PostMapping(value = "/createOrder/{wallet}/{amount}") @PostMapping(value = "/createOrder")
public Response<String> createOrder(@PathVariable Integer amount, @PathVariable String wallet, HttpServletRequest request) { public Response<String> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
String order = alipayHKService.createOrder(amount, wallet, request); String order = alipayHKService.createOrder(productPurchaseDTO, request);
return Response.success(order); 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.QuestionnaireFeedbackVO;
import com.ai.da.model.vo.QuestionnaireVO; import com.ai.da.model.vo.QuestionnaireVO;
import com.ai.da.model.vo.QueryUserConditionsVO; import com.ai.da.model.vo.QueryUserConditionsVO;
import com.ai.da.service.AccountService;
import com.ai.da.service.ConvenientInquiryService; import com.ai.da.service.ConvenientInquiryService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.netty.util.internal.StringUtil; import io.netty.util.internal.StringUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -36,13 +36,19 @@ public class ConvenientInquiryController {
private DesignMapper designMapper; private DesignMapper designMapper;
@Resource @Resource
private ConvenientInquiryService convenientInquiryService; private ConvenientInquiryService convenientInquiryService;
@Resource
private AccountService accountService;
@ApiOperation("获取当前所有试用用户") @ApiOperation("获取当前所有试用用户")
@PostMapping("/getTrial") @PostMapping("/getTrial")
public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) { public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
Long accountId = UserContext.getUserHolder().getId(); 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)); return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO));
} else { } else {
return Response.fail("Sorry, you don't have permission"); return Response.fail("Sorry, you don't have permission");

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,6 @@
package com.ai.da.service; package com.ai.da.service;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.paypal.http.exceptions.SerializeException; import com.paypal.http.exceptions.SerializeException;
import com.paypal.orders.Order; import com.paypal.orders.Order;
@@ -8,11 +9,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
public interface PayPalCheckoutService { 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); // 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.common.enums.PayTypeEnum;
import com.ai.da.mapper.primary.entity.OrderInfo; import com.ai.da.mapper.primary.entity.OrderInfo;
import com.ai.da.mapper.primary.entity.RefundInfo; import com.ai.da.mapper.primary.entity.RefundInfo;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayApiException;
@@ -55,12 +56,12 @@ public class AliPayServiceImpl implements AliPayService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public String tradeCreate(Integer amount, String returnUrl, HttpServletRequest request) { public String tradeCreate(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
try { try {
//生成订单 //生成订单
log.info("生成订单"); 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(); AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
@@ -69,7 +70,7 @@ public class AliPayServiceImpl implements AliPayService {
alipayRequest.setNotifyUrl(config.getProperty("alipay.notify-url")); alipayRequest.setNotifyUrl(config.getProperty("alipay.notify-url"));
//支付完成后我们想让页面跳转回aida的页面配置returnUrl //支付完成后我们想让页面跳转回aida的页面配置returnUrl
// alipayRequest.setReturnUrl(config.getProperty("alipay.return-url")); // alipayRequest.setReturnUrl(config.getProperty("alipay.return-url"));
alipayRequest.setReturnUrl(returnUrl); alipayRequest.setReturnUrl(productPurchaseDTO.getReturnUrl());
//组装当前业务方法的请求参数 //组装当前业务方法的请求参数
JSONObject bizContent = new JSONObject(); 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.mapper.primary.entity.OrderInfo;
import com.ai.da.model.dto.AlipayHKCallbackDTO; import com.ai.da.model.dto.AlipayHKCallbackDTO;
import com.ai.da.model.dto.AlipayHKRequestDTO; import com.ai.da.model.dto.AlipayHKRequestDTO;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@@ -65,23 +66,23 @@ public class AlipayHKServiceImpl implements AlipayHKService {
* 创建订单 * 创建订单
*/ */
@Override @Override
public String createOrder(Integer amount, String wallet , HttpServletRequest request){ public String createOrder(ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request){
try{ try{
HashMap<String, Object> param = new HashMap<>(); HashMap<String, Object> param = new HashMap<>();
String orderRef = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String orderRef = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
param.put("order_ref", orderRef); 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"); param.put("subject", "AiDA Credits Purchase");
// ALIPAYHK 或者 ALIPAYCN // ALIPAYHK 或者 ALIPAYCN
param.put("wallet", wallet); param.put("wallet", productPurchaseDTO.getWallet());
param.put("segment_id", segmentId); param.put("segment_id", segmentId);
// param.put("payment_solution", "WAP"); // param.put("payment_solution", "WAP");
param.put("payment_solution", "PC2MOBILE"); param.put("payment_solution", "PC2MOBILE");
log.info("alipay-hk 创建订单,参数信息: {}", param); log.info("alipay-hk 创建订单,参数信息: {}", param);
// 生成订单 // 生成订单
log.info("创建订单"); 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); AlipayHKRequestDTO alipayHKRequestDTO = alipayHKEncryptionUtil.AESCBCWithRSA(param, AlipayHKConstant.CREATE_ORDER);
// 请求Alipay服务端 // 请求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.common.utils.paypalRequest.WebhookVerifyRequest;
import com.ai.da.mapper.primary.entity.OrderInfo; import com.ai.da.mapper.primary.entity.OrderInfo;
import com.ai.da.mapper.primary.entity.RefundInfo; import com.ai.da.mapper.primary.entity.RefundInfo;
import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.*; import com.ai.da.service.*;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson; import com.google.gson.Gson;
@@ -84,14 +85,14 @@ public class PayPalCheckoutServiceImpl implements PayPalCheckoutService {
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @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("生成订单"); 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(); OrdersCreateRequest paypalRequest = new OrdersCreateRequest();
paypalRequest.header("prefer", "return=representation"); 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; HttpResponse<Order> response = null;
try { try {
response = payPalClient.client(mode, clientId, clientSecret).execute(paypalRequest); response = payPalClient.client(mode, clientId, clientSecret).execute(paypalRequest);