From d8fb82111f08f7f3be1d9cff9e7a11dfc120ad77 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 27 Sep 2021 19:06:20 +0800
Subject: [PATCH] fix alipay callback
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 11 ++++-
src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java | 40 ++++++++++++++++++++
src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java | 40 +++++++++++++++++---
sql/xc_mall.sql | 5 ++
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java | 2 +
src/main/java/cc/mrbird/febs/pay/service/IPayService.java | 4 ++
6 files changed, 92 insertions(+), 10 deletions(-)
diff --git a/sql/xc_mall.sql b/sql/xc_mall.sql
index c044606..04fa050 100644
--- a/sql/xc_mall.sql
+++ b/sql/xc_mall.sql
@@ -350,4 +350,7 @@
createtime datetime null comment '更新时间',
address varchar(255) null comment '下载地址',
type tinyint null comment '类型:1安卓,2苹果'
-)comment '版本表';
\ No newline at end of file
+)comment '版本表';
+
+alter table mall_order_info add pay_trade_no text null comment '支付交易单号';
+
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
index 28e19fa..2dc801e 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
@@ -71,4 +71,6 @@
private List<MallOrderItem> items;
private String payImage;
+
+ private String payTradeNo;
}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 5cfa585..91b7378 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -174,27 +174,32 @@
orderInfo.setPayMethod("微信支付");
break;
case "2":
- payResultStr = payService.aliPay(orderInfo);
+ if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
+ payResultStr = orderInfo.getPayOrderNo();
+ } else {
+ payResultStr = payService.aliPay(orderInfo);
+ }
orderInfo.setPayOrderNo(payResultStr);
orderInfo.setPayMethod("支付宝支付");
+
break;
case "3":
payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd());
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
orderInfo.setPayMethod("积分支付");
-
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
orderInfo.setPayTime(new Date());
orderInfo.setPayResult("1");
- this.baseMapper.updateById(orderInfo);
memberService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null);
default:
}
+ this.baseMapper.updateById(orderInfo);
+
Map<String, Object> map = new HashMap<>();
map.put("orderInfo", payResultStr);
map.put("orderNo", orderInfo.getOrderNo());
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
index b9655e0..ea26df0 100644
--- a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
+++ b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
@@ -1,14 +1,20 @@
package cc.mrbird.febs.pay.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.internal.util.AlipaySignature;
import com.ijpay.alipay.AliPayApi;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@@ -21,14 +27,36 @@
@RequestMapping(value = "/api/pay")
public class PayCallBackController {
+ @Autowired
+ private IPayService payService;
+
+ @Resource
+ private AliPayProperties aliPayProperties;
+
@RequestMapping("/aliCallBack")
- public FebsResponse aliPayCallBack(HttpServletRequest request) {
- log.info("进入回调");
+ public String aliPayCallBack(HttpServletRequest request){
+ log.info("进入支付宝回调");
Map<String, String> params = AliPayApi.toMap(request);
- log.info("回调参数:{}", JSONObject.toJSONString(params));
- for (Map.Entry<String, String> entry : params.entrySet()) {
- log.info("支付宝回调:{}===={}", entry.getKey(), entry.getValue());
+
+ boolean verifyResult = false;
+ try {
+ verifyResult = AlipaySignature.verifyV1(params, aliPayProperties.getPublicKey(), "UTF-8", "RSA2");
+ } catch (AlipayApiException e) {
+ log.info("验证失败==");
+ return "failure";
}
- return new FebsResponse().success();
+
+ if (verifyResult) {
+ if ("TRADE_SUCCESS".equals(params.get("trade_status")) || "TRADE_FINISHED".equals(params.get("trade_status"))) {
+ payService.aliCallback(params);
+ return "success";
+ } else {
+ log.info("支付失败");
+ return "failure";
+ }
+ } else {
+ log.info("验证失败");
+ return "failure";
+ }
}
}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
index cd10f45..155cfb7 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
@@ -2,6 +2,8 @@
import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import java.util.Map;
+
/**
* @author wzy
* @date 2021-09-27
@@ -9,4 +11,6 @@
public interface IPayService {
String aliPay(MallOrderInfo orderInfo);
+
+ void aliCallback(Map<String, String> params);
}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
index e940f38..68d7505 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
@@ -1,20 +1,30 @@
package cc.mrbird.febs.pay.service.impl;
+import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.service.IApiMallMemberService;
+import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import cc.mrbird.febs.pay.model.AliPayPassbackModel;
import cc.mrbird.febs.pay.properties.AliPayProperties;
import cc.mrbird.febs.pay.service.IPayService;
+import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.ijpay.alipay.AliPayApi;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Map;
/**
* @author wzy
@@ -26,6 +36,13 @@
@Resource
private AliPayProperties aliPayProperties;
+
+ @Autowired
+ private IApiMallMemberService memberService;
+ @Autowired
+ private MallOrderInfoMapper orderInfoMapper;
+ @Autowired
+ private AgentProducer agentProducer;
@Value("${spring.profiles.active}")
private String active;
@@ -59,4 +76,27 @@
}
return resp.getBody();
}
+
+ @Override
+ public void aliCallback(Map<String, String> params) {
+ String modelStr = params.get("passback_params");
+
+ AliPayPassbackModel passback = JSONObject.parseObject(modelStr, AliPayPassbackModel.class);
+
+ MallOrderInfo orderInfo = orderInfoMapper.selectById(passback.getOrderId());
+ if ("1".equals(orderInfo.getPayResult())) {
+ return;
+ }
+
+ orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+ orderInfo.setPayResult("1");
+ orderInfo.setPayTime(new Date());
+ orderInfo.setPayTradeNo(params.get("trade_no"));
+ orderInfoMapper.updateById(orderInfo);
+
+ agentProducer.sendReturnMoneyMsg(orderInfo.getId());
+ agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId());
+
+ memberService.addMoneyFlow(orderInfo.getMemberId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), null, null, null, null);
+ }
}
--
Gitblit v1.9.1