|
|
@ -42,6 +42,7 @@ public class WxPayController {
|
|
|
|
@Resource
|
|
|
|
@Resource
|
|
|
|
private IPaymentLogService paymentLogService;
|
|
|
|
private IPaymentLogService paymentLogService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
private IEnterpriseService enterpriseService;
|
|
|
|
private IEnterpriseService enterpriseService;
|
|
|
|
|
|
|
|
|
|
|
|
private final ReentrantLock lock = new ReentrantLock();
|
|
|
|
private final ReentrantLock lock = new ReentrantLock();
|
|
|
@ -114,15 +115,6 @@ public class WxPayController {
|
|
|
|
String result = HttpKit.readData(request);//消息体
|
|
|
|
String result = HttpKit.readData(request);//消息体
|
|
|
|
log.info("支付通知密文 {}", result);
|
|
|
|
log.info("支付通知密文 {}", result);
|
|
|
|
// 需要通过证书序列号查找对应的证书,verifyNotify 中有验证证书的序列号
|
|
|
|
// 需要通过证书序列号查找对应的证书,verifyNotify 中有验证证书的序列号
|
|
|
|
/*
|
|
|
|
|
|
|
|
* serialNo – 证书序列号
|
|
|
|
|
|
|
|
* body – 异步通知密文
|
|
|
|
|
|
|
|
* signature – 签名
|
|
|
|
|
|
|
|
* nonce – 随机字符串
|
|
|
|
|
|
|
|
* timestamp – 时间戳
|
|
|
|
|
|
|
|
* key – api 密钥
|
|
|
|
|
|
|
|
* certPath – 平台证书路径*/
|
|
|
|
|
|
|
|
//验签
|
|
|
|
|
|
|
|
String plainText = WxPayKit.verifyNotify(serialNo, result, signature, nonce, timestamp,
|
|
|
|
String plainText = WxPayKit.verifyNotify(serialNo, result, signature, nonce, timestamp,
|
|
|
|
wxPayV3Properties.getApiKey3(), wxPayV3Properties.getPlatformCertPath());
|
|
|
|
wxPayV3Properties.getApiKey3(), wxPayV3Properties.getPlatformCertPath());
|
|
|
|
log.info("支付通知明文 {}", plainText);
|
|
|
|
log.info("支付通知明文 {}", plainText);
|
|
|
@ -162,15 +154,24 @@ public class WxPayController {
|
|
|
|
return JSONUtil.toJsonStr(_feedback);
|
|
|
|
return JSONUtil.toJsonStr(_feedback);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 保证接口幂等性
|
|
|
|
// 保证接口幂等性
|
|
|
|
if (lock.tryLock()) {
|
|
|
|
try {
|
|
|
|
paymentService.updateStatus(outTradeNo, tradeState, tradeStateDesc, openid);
|
|
|
|
if (lock.tryLock()) {
|
|
|
|
//处理业务
|
|
|
|
paymentService.updateStatus(outTradeNo, tradeState, tradeStateDesc, openid);
|
|
|
|
paymentLogService.updateLogStatus(outTradeNo, transactionId, tradeType, tradeState, openid, attach, total, payerTotal, plainText);
|
|
|
|
String organizeJsonId = payment.getOrganizeJsonId();
|
|
|
|
if ("SUCCESS".equals(tradeState)) {
|
|
|
|
//处理业务
|
|
|
|
//增加商户余额
|
|
|
|
paymentLogService.updateLogStatus(outTradeNo, transactionId, tradeType, tradeState,
|
|
|
|
BigDecimal money = new BigDecimal(total).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
openid, attach, total, payerTotal, plainText, organizeJsonId);
|
|
|
|
enterpriseService.rechargeBalance(attach, money, outTradeNo);
|
|
|
|
if ("SUCCESS".equals(tradeState)) {
|
|
|
|
|
|
|
|
//增加商户余额
|
|
|
|
|
|
|
|
BigDecimal money = new BigDecimal(total).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
|
|
enterpriseService.rechargeBalance(attach, money, outTradeNo);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
throw e;
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
lock.unlock();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
response.setStatus(200);
|
|
|
|
response.setStatus(200);
|
|
|
|
_feedback.put("code", "SUCCESS");
|
|
|
|
_feedback.put("code", "SUCCESS");
|
|
|
@ -183,8 +184,6 @@ public class WxPayController {
|
|
|
|
_feedback.put("code", "ERROR");
|
|
|
|
_feedback.put("code", "ERROR");
|
|
|
|
_feedback.put("message", "失败");
|
|
|
|
_feedback.put("message", "失败");
|
|
|
|
return JSONUtil.toJsonStr(_feedback);
|
|
|
|
return JSONUtil.toJsonStr(_feedback);
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
lock.unlock();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|