This commit is contained in:
quyixiao 2025-11-07 23:28:01 +08:00
parent a8059593ce
commit 9a1cc9fba1
2 changed files with 4 additions and 6 deletions

View File

@ -150,5 +150,5 @@ public interface VvTradeOrderLineDao extends BaseMapper<VvTradeOrderLineEntity>
List<VvTradeOrderLineEntity> selectVvTradeOrderLineByBuyerIdTrackNumber(Long buyerId, String trackNumber); List<VvTradeOrderLineEntity> selectVvTradeOrderLineByBuyerIdTrackNumber(Long buyerId, String trackNumber);
List<VvTradeOrderLineEntity> selectByTradeOrderIdAndTransactionId(Long tradeOrderId, String transactionId); List<VvTradeOrderLineEntity> selectByTradeOrderIdAndTransactionId(Long tradeOrderId, @IF String transactionId);
} }

View File

@ -46,19 +46,18 @@ public class AppWeiXinPayNotifyController {
// Step 1: 解析微信支付回调通知的JSON // Step 1: 解析微信支付回调通知的JSON
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(requestBody); JsonNode rootNode = objectMapper.readTree(requestBody);
// 获取加密数据 // 获取加密数据
String ciphertext = rootNode.get("resource").get("ciphertext").asText(); String ciphertext = rootNode.get("resource").get("ciphertext").asText();
String associatedData = rootNode.get("resource").get("associated_data").asText(); String associatedData = rootNode.get("resource").get("associated_data").asText();
String nonce = rootNode.get("resource").get("nonce").asText(); String nonce = rootNode.get("resource").get("nonce").asText();
// Step 2: 解密加密数据使用AES-GCM解密 // Step 2: 解密加密数据使用AES-GCM解密
String decryptedData = decrypt(ciphertext, associatedData, nonce); String decryptedData = decrypt(ciphertext, associatedData, nonce);
// Step 3: 处理解密后的数据 // Step 3: 处理解密后的数据
JsonNode resultData = objectMapper.readTree(decryptedData); JsonNode resultData = objectMapper.readTree(decryptedData);
String transactionId = resultData.get("transaction_id").asText(); // 微信支付订单号 String transactionId = resultData.get("transaction_id").asText(); // 微信支付订单号
String outTradeNo = resultData.get("out_trade_no").asText(); // 商户订单号 String outTradeNo = resultData.get("out_trade_no").asText(); // 商户订单号
String tradeState = resultData.get("trade_state").asText(); // 支付状态 String tradeState = resultData.get("trade_state").asText(); // 支付状态
log.info("handleWeChatPayCallback outTradeNo:{},tradeState:{},transactionId:{},decryptedData:{}", outTradeNo, tradeState,transactionId,decryptedData);
// 根据支付结果处理商户业务逻辑 // 根据支付结果处理商户业务逻辑
if ("SUCCESS".equals(tradeState)) { if ("SUCCESS".equals(tradeState)) {
// 支付成功的逻辑更新订单状态 // 支付成功的逻辑更新订单状态
@ -66,7 +65,6 @@ public class AppWeiXinPayNotifyController {
} }
// Step 4: 返回处理结果通知微信支付停止回调 // Step 4: 返回处理结果通知微信支付停止回调
return "{\"code\":\"SUCCESS\",\"message\":\"OK\"}"; return "{\"code\":\"SUCCESS\",\"message\":\"OK\"}";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
// 如果处理失败返回错误信息 // 如果处理失败返回错误信息
@ -94,8 +92,8 @@ public class AppWeiXinPayNotifyController {
private void updateOrderStatus(String outTradeNo, String transactionId) { private void updateOrderStatus(String outTradeNo, String transactionId) {
// 这里是更新商户订单状态的逻辑例如标记订单已支付 // 这里是更新商户订单状态的逻辑例如标记订单已支付
log.info("订单 " + outTradeNo + " 已支付,交易号:" + transactionId + "开始更新子订单信息"); log.info("handleWeChatPayCallback 订单 " + outTradeNo + " 已支付,交易号:" + transactionId + "开始更新子订单信息");
List<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectByTradeOrderIdAndTransactionId(NumberUtil.objToLong(outTradeNo), transactionId); List<VvTradeOrderLineEntity> vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(NumberUtil.objToLong(outTradeNo));
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) { for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) {
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.wait_shipping.getStatus()); vvTradeOrderLineEntity.setStatus(OrderStatusEnums.wait_shipping.getStatus());
vvTradeOrderLineEntity.setGmtPay(new Date()); vvTradeOrderLineEntity.setGmtPay(new Date());