From eca9ec8d2a22f2117fcc68af6bcf92e6f555782f Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Sat, 27 May 2023 14:59:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B1=87=E4=BB=98=E9=80=80=E6=AC=BE=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/api/uniapp/PayController.java | 40 ++++++++++++++++++- .../com/jsowell/service/OrderService.java | 21 ++++++++++ .../pile/service/IOrderBasicInfoService.java | 2 + .../impl/OrderBasicInfoServiceImpl.java | 15 +++++++ 4 files changed, 76 insertions(+), 2 deletions(-) diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java index 17adf8724..f2fd95373 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java @@ -311,10 +311,32 @@ public class PayController extends BaseController { /** * 汇付支付退款 + * 用户余额退款 + * https://api.jsowellcloud.com/uniapp/pay/adapayRefund */ + @PostMapping("/adapayRefund") public RestApiResponse adapayRefund(HttpServletRequest request, @RequestBody WeChatRefundDTO dto) { - - return null; + RestApiResponse response; + try { + if (dto.getRefundAmount() == null) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } + String memberId = getMemberIdByAuthorization(request); + if (StringUtils.isBlank(memberId)) { + throw new BusinessException(ReturnCodeEnum.CODE_TOKEN_ERROR); + } + dto.setMemberId(memberId); + dto.setRefundType("2"); + orderService.adapayRefund(dto); + response = new RestApiResponse<>(); + } catch (BusinessException e) { + logger.warn("微信退款接口 warn", e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + } catch (Exception e) { + logger.error("微信退款接口 error", e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_WEIXIN_REFUND_ERROR); + } + return response; } /** @@ -329,4 +351,18 @@ public class PayController extends BaseController { logger.error("汇付支付回调失败 error", e); } } + + /** + * 汇付退款回调接口 + * https://api.jsowellcloud.com/uniapp/pay/adapayRefundCallback + * @param request + */ + @PostMapping("/adapayRefundCallback") + public void adapayRefundCallback(HttpServletRequest request) { + try { + orderService.adapayRefundCallback(request); + } catch (Exception e) { + logger.error("汇付支付退款回调失败 error", e); + } + } } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 41ba8a02e..58381cb4a 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -757,6 +757,11 @@ public class OrderService { orderBasicInfoService.weChatRefund(dto); } + public void adapayRefund(WeChatRefundDTO dto) { + log.info("汇付退款 param:{}", JSON.toJSONString(dto)); + orderBasicInfoService.adapayRefund(dto); + } + /** * 查询订单详情信息 * @param orderCode 订单编号 @@ -1313,4 +1318,20 @@ public class OrderService { memberTransactionRecordService.insertSelective(record); } + public void adapayRefundCallback(HttpServletRequest request) throws Exception { + //验签请参data + String data = request.getParameter("data"); + //验签请参sign + String sign = request.getParameter("sign"); + //验签请参publicKey + String publicKey = AdapayCore.PUBLIC_KEY; + log.info("汇付支付回调验签请参data={}, sign={}", data, sign); + //验签标记 + boolean checkSign = AdapaySign.verifySign(data, sign, publicKey); + if (!checkSign) { + log.info("汇付支付回调验签失败:{}", data); + return; + } + } + } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java index 059235812..00931feee 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java @@ -256,4 +256,6 @@ public interface IOrderBasicInfoService { String tempUpdateVirtualAmount(QueryOrderDTO dto); + + void adapayRefund(WeChatRefundDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 7d3b78953..adac895ff 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -1727,4 +1727,19 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { } return "共查询到" + orderListVOS.size() + "条订单,修改成功" + i + "条订单数据"; } + + @Override + public void adapayRefund(WeChatRefundDTO dto) { + // 退款有两种情况 1-订单结算退款 2-用户余额退款 + String refundType = dto.getRefundType(); + if (StringUtils.equals(refundType, "1")) { + WechatPayRefundResponse response = refundForOrder(dto); + logger.info("订单结算退款 result:{}", JSONObject.toJSONString(response)); + } else if (StringUtils.equals(refundType, "2")) { + WechatPayRefundResponse response = refundForBalance(dto); + logger.info("用户余额退款 result:{}", JSONObject.toJSONString(response)); + } else { + logger.warn("没有找到退款处理逻辑"); + } + } }