From 8eb8ab6c1caea06e66fc496558c81e494c15d529 Mon Sep 17 00:00:00 2001 From: jieyuu <645634619@qq.com> Date: Sun, 29 Sep 2024 15:54:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E7=BB=93=E6=9E=9C=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=9B=9E=E8=B0=83controller=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jieyuu/controller/CallbackController.java | 96 +++++++++++++++++++ .../jieyuu/service/ProductOrderService.java | 13 +++ .../service/impl/ProductOrderServiceImpl.java | 14 +++ 3 files changed, 123 insertions(+) create mode 100644 xdclass-order-service/src/main/java/net/jieyuu/controller/CallbackController.java diff --git a/xdclass-order-service/src/main/java/net/jieyuu/controller/CallbackController.java b/xdclass-order-service/src/main/java/net/jieyuu/controller/CallbackController.java new file mode 100644 index 0000000..f654392 --- /dev/null +++ b/xdclass-order-service/src/main/java/net/jieyuu/controller/CallbackController.java @@ -0,0 +1,96 @@ +package net.jieyuu.controller; + + +import com.alipay.api.AlipayApiException; +import com.alipay.api.internal.util.AlipaySignature; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import net.jieyuu.config.AlipayConfig; +import net.jieyuu.enums.ProductOrderPayTypeEnum; +import net.jieyuu.service.ProductOrderService; +import net.jieyuu.utils.JsonData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +@Api("订单回调通知模块") +@Controller +@RequestMapping("/api/callback/order/v1") +@Slf4j +public class CallbackController { + + @Autowired + private ProductOrderService productOrderService; + +// @Autowired +// private AlipayConfig alipayConfig; + + + /** + * 支付宝支付回调通知 post + * + * @param request + * @param response + * @return + */ + @PostMapping("alipay") + public String alipayCallback(HttpServletRequest request, HttpServletResponse response) { +// return productOrderService.alipayCallback(); + // 将异步通知中收到的所有参数转化为map + Map paramsMap = convertRequestParamsToMap(request); + + log.info("支付宝回调通知请求:{}", paramsMap); + + + try { + boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, AlipayConfig.ALIPAY_PUB_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGN_TYPE); + if (signVerified) { + JsonData jsonData = productOrderService.handlerOrderCallbackMsg(ProductOrderPayTypeEnum.ALIPAY, paramsMap); + if (jsonData.getCode() == 0) { + // 通知结果确认成功,不然一直通知 + // 八次都没返回success判断为交易失败 + return "success"; + } + + } + } catch (AlipayApiException e) { + log.info("支付宝回调验证签名失败:异常:{}", e, paramsMap); + } + + return "failure"; + } + + + /** + * 将request中的参数转换成Map + * + * @param request + * @return + */ + private static Map convertRequestParamsToMap(HttpServletRequest request) { + Map paramsMap = new HashMap<>(16); + Set> entrySet = request.getParameterMap().entrySet(); + + for (Map.Entry entry : entrySet) { + String name = entry.getKey(); + String[] values = entry.getValue(); + int size = values.length; + if (size == 1) { + paramsMap.put(name, values[0]); + } else { + paramsMap.put(name, ""); + } + } + System.out.println(paramsMap); + return paramsMap; + } + +} diff --git a/xdclass-order-service/src/main/java/net/jieyuu/service/ProductOrderService.java b/xdclass-order-service/src/main/java/net/jieyuu/service/ProductOrderService.java index 659cb60..cde371e 100644 --- a/xdclass-order-service/src/main/java/net/jieyuu/service/ProductOrderService.java +++ b/xdclass-order-service/src/main/java/net/jieyuu/service/ProductOrderService.java @@ -1,11 +1,14 @@ package net.jieyuu.service; +import net.jieyuu.enums.ProductOrderPayTypeEnum; import net.jieyuu.model.OrderMessage; import net.jieyuu.model.ProductOrderDO; import com.baomidou.mybatisplus.extension.service.IService; import net.jieyuu.request.ConfirmOrderRequest; import net.jieyuu.utils.JsonData; +import java.util.Map; + /** *

* 服务类 @@ -38,4 +41,14 @@ public interface ProductOrderService extends IService { * @param orderMessage */ boolean closeProductOrder(OrderMessage orderMessage); + + /** + * 支付结果回调通知 + * + * @param productOrderPayTypeEnum + * @param paramsMap + * @return + */ + JsonData handlerOrderCallbackMsg(ProductOrderPayTypeEnum productOrderPayTypeEnum, Map paramsMap); + } diff --git a/xdclass-order-service/src/main/java/net/jieyuu/service/impl/ProductOrderServiceImpl.java b/xdclass-order-service/src/main/java/net/jieyuu/service/impl/ProductOrderServiceImpl.java index c1601e4..da7fb94 100644 --- a/xdclass-order-service/src/main/java/net/jieyuu/service/impl/ProductOrderServiceImpl.java +++ b/xdclass-order-service/src/main/java/net/jieyuu/service/impl/ProductOrderServiceImpl.java @@ -35,6 +35,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -405,4 +406,17 @@ public class ProductOrderServiceImpl extends ServiceImpl paramsMap) { + return null; + } }