新增微信支付结果通知中转接口/api/system/wx-pay/notify

This commit is contained in:
2024-07-31 09:52:49 +08:00
parent 8811894d17
commit e75d9a100a
2 changed files with 11 additions and 59 deletions

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.gxwebsoft.common.core.config.ConfigProperties; import com.gxwebsoft.common.core.config.ConfigProperties;
import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.utils.CommonUtil;
import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.utils.RedisUtil;
import com.gxwebsoft.common.core.utils.RequestUtil;
import com.gxwebsoft.common.core.utils.WxNativeUtil; import com.gxwebsoft.common.core.utils.WxNativeUtil;
import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.common.core.web.BaseController;
@@ -48,6 +49,8 @@ public class WxNativePayController extends BaseController {
@Resource @Resource
private SettingService settingService; private SettingService settingService;
@Resource @Resource
private RequestUtil requestUtil;
@Resource
private OrderService orderService; private OrderService orderService;
@@ -130,6 +133,9 @@ public class WxNativePayController extends BaseController {
System.out.println("request body = " + body); System.out.println("request body = " + body);
System.out.println("tenantId = " + tenantId); System.out.println("tenantId = " + tenantId);
// 推送微信官方支付结果(携带租户ID的POST请求)
// final String string = requestUtil.pushWxPayNotify(transaction, payment);
// 获取支付配置信息用于解密 // 获取支付配置信息用于解密
final SettingParam param = new SettingParam(); final SettingParam param = new SettingParam();
param.setSettingKey("payment"); param.setSettingKey("payment");

View File

@@ -36,27 +36,17 @@ public class WxPayNotifyController extends BaseController {
private RequestUtil requestUtil; private RequestUtil requestUtil;
@Resource @Resource
private ConfigProperties conf; private ConfigProperties conf;
// 本地证书
public static String wechatpayCertPath = "/Users/gxwebsoft/JAVA/com.gxwebsoft.core/src/main/resources/cert/wechatpay_4A3231584E93B6AE77820074D07EADEACCB7E223.pem"; // 平台证书
@ApiModelProperty("异步通知") @ApiModelProperty("异步通知")
@PostMapping("/notify/{tenantId}") @PostMapping("/notify/{tenantId}")
public String wxNotify(@RequestHeader Map<String, String> header, @RequestBody String body, @PathVariable("tenantId") Integer tenantId) { public String wxNotify(@RequestHeader Map<String, String> header, @RequestBody String body, @PathVariable("tenantId") Integer tenantId) {
System.out.println("异步通知*************** = "); System.out.println("异步通知*************** = ");
System.out.println("request header = " + header);
System.out.println("request body = " + body);
System.out.println("tenantId = " + tenantId);
// 获取支付配置信息用于解密 // 获取支付配置信息用于解密
String key = "Payment:1:".concat(tenantId.toString()); String key = "Payment:1:".concat(tenantId.toString());
final Payment payment = redisUtil.get(key, Payment.class); final Payment payment = redisUtil.get(key, Payment.class);
System.out.println("payment = " + payment);
String privateKey = payment.getApiKey(); String privateKey = payment.getApiKey();
String apiclientCert = conf.getUploadPath().concat("/file").concat(payment.getApiclientCert()); String apiclientCert = conf.getUploadPath().concat("/file").concat(payment.getApiclientCert());
// 开发环境配置
if(active.equals("dev")){
apiclientCert = wechatpayCertPath;
}
com.wechat.pay.java.core.notification.RequestParam requestParam = new com.wechat.pay.java.core.notification.RequestParam.Builder() com.wechat.pay.java.core.notification.RequestParam requestParam = new com.wechat.pay.java.core.notification.RequestParam.Builder()
.serialNumber(header.get("wechatpay-serial")) .serialNumber(header.get("wechatpay-serial"))
@@ -66,7 +56,6 @@ public class WxPayNotifyController extends BaseController {
.body(body) .body(body)
.build(); .build();
// 如果已经初始化了 RSAAutoCertificateConfig可直接使用 // 如果已经初始化了 RSAAutoCertificateConfig可直接使用
// 没有的话,则构造一个 // 没有的话,则构造一个
NotificationConfig config = new RSANotificationConfig.Builder() NotificationConfig config = new RSANotificationConfig.Builder()
@@ -77,59 +66,16 @@ public class WxPayNotifyController extends BaseController {
// 初始化 NotificationParser // 初始化 NotificationParser
NotificationParser parser = new NotificationParser(config); NotificationParser parser = new NotificationParser(config);
System.out.println("parser = " + parser);
// 以支付通知回调为例,验签、解密并转换成 Transaction // 以支付通知回调为例,验签、解密并转换成 Transaction
try { try {
Transaction transaction = parser.parse(requestParam, Transaction.class); Transaction transaction = parser.parse(requestParam, Transaction.class);
System.out.println("transaction = " + transaction);
final String outTradeNo = transaction.getOutTradeNo();
final String transactionId = transaction.getTransactionId();
final Integer total = transaction.getAmount().getTotal();
final String tradeStateDesc = transaction.getTradeStateDesc();
final Transaction.TradeStateEnum tradeState = transaction.getTradeState();
final Transaction.TradeTypeEnum tradeType = transaction.getTradeType();
System.out.println("transaction = " + transaction);
System.out.println("tradeStateDesc = " + tradeStateDesc);
System.out.println("tradeType = " + tradeType);
System.out.println("tradeState = " + tradeState);
System.out.println("outTradeNo = " + outTradeNo);
System.out.println("amount = " + total);
if (StrUtil.equals("支付成功", tradeStateDesc)) { if (StrUtil.equals("支付成功", transaction.getTradeStateDesc())) {
final String string = requestUtil.pushWxPayNotify(transaction, payment);
System.out.println("string = " + string); // 推送微信官方支付结果(携带租户ID的POST请求)
requestUtil.pushWxPayNotify(transaction, payment);
return "SUCCESS"; return "SUCCESS";
// // 1. 查询要处理的订单
// Order order = orderService.getByOutTradeNo(outTradeNo);
// // 2. 已支付则跳过
// if (order.getPayStatus().equals(1)) {
// return "SUCCESS";
// }
// // 2. 未支付则处理更新订单状态
// if (order.getPayStatus().equals(0)) {
// // 5. TODO 处理订单状态
// order.setPayTime(DateUtil.date());
// order.setPayStatus(1);
// order.setTransactionId(transactionId);
// order.setPayPrice(new BigDecimal(NumberUtil.decimalFormat("0.00", total * 0.01)));
// order.setExpirationTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, 10));
// System.out.println("实际付款金额 = " + order.getPayPrice());
// orderService.updateByOutTradeNo(order);
// // 6. TODO 同步更新订单明细的支付状态
// orderInfoService.update(new LambdaUpdateWrapper<OrderInfo>().eq(OrderInfo::getOrderId,order.getOrderId()).set(OrderInfo::getPayStatus,1));
//// orderInfoService.updateByOutTradeNo(order);
// // 7.同步会员卡状态
// if(order.getType().equals(2)){
// final UserCard userCard = userCardService.getById(order.getCardId());
// userCard.setStatus(1);
// userCardService.updateById(userCard);
// }
// // 8.发放积分
// usersService.addIntegral(order);
//
// return "SUCCESS";
// }
} }
} catch (Exception $e) { } catch (Exception $e) {
System.out.println($e.getMessage()); System.out.println($e.getMessage());