微信支付通知 完善

master
guochaojie 3 months ago
parent 46fdc53eb1
commit b702d48c69

@ -42,6 +42,7 @@ public class WxPayController {
@Resource
private IPaymentLogService paymentLogService;
@Resource
private IEnterpriseService enterpriseService;
private final ReentrantLock lock = new ReentrantLock();
@ -114,15 +115,6 @@ public class WxPayController {
String result = HttpKit.readData(request);//消息体
log.info("支付通知密文 {}", result);
// 需要通过证书序列号查找对应的证书verifyNotify 中有验证证书的序列号
/*
* serialNo
* body
* signature
* nonce
* timestamp
* key api
* certPath */
//验签
String plainText = WxPayKit.verifyNotify(serialNo, result, signature, nonce, timestamp,
wxPayV3Properties.getApiKey3(), wxPayV3Properties.getPlatformCertPath());
log.info("支付通知明文 {}", plainText);
@ -162,16 +154,25 @@ public class WxPayController {
return JSONUtil.toJsonStr(_feedback);
}
// 保证接口幂等性
try {
if (lock.tryLock()) {
paymentService.updateStatus(outTradeNo, tradeState, tradeStateDesc, openid);
String organizeJsonId = payment.getOrganizeJsonId();
//处理业务
paymentLogService.updateLogStatus(outTradeNo, transactionId, tradeType, tradeState, openid, attach, total, payerTotal, plainText);
paymentLogService.updateLogStatus(outTradeNo, transactionId, tradeType, tradeState,
openid, attach, total, payerTotal, plainText, organizeJsonId);
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);
_feedback.put("code", "SUCCESS");
_feedback.put("message", "成功");
@ -183,8 +184,6 @@ public class WxPayController {
_feedback.put("code", "ERROR");
_feedback.put("message", "失败");
return JSONUtil.toJsonStr(_feedback);
} finally {
lock.unlock();
}
}

@ -31,9 +31,9 @@ public class Payment {
@TableField(value = "AMOUNT")
@ApiModelProperty("订单金额")
private BigDecimal amount;
@TableField(value = "ORDER_TYPE")
@TableField(value = "ORDER_TYPE_ID")
@ApiModelProperty("订单类型")
private String orderType;
private String orderTypeId;
@TableField(value = "ORDER_STATUS")
@ApiModelProperty("订单状态")
private String orderStatus;

@ -27,5 +27,6 @@ public interface IPaymentLogService extends IService<PaymentLog> {
* @param payerTotal
* @param body
*/
void updateLogStatus(String outTradeNo, String transactionId, String tradeType, String tradeState, String openId, String attach, Integer total, Integer payerTotal, String body);
void updateLogStatus(String outTradeNo, String transactionId, String tradeType, String tradeState,
String openId, String attach, Integer total, Integer payerTotal, String body,String organizeJsonId);
}

@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@Service
public class PaymentLogServiceImpl extends ServiceImpl<PaymentLogMapper, PaymentLog> implements IPaymentLogService {
@ -73,7 +74,8 @@ public class PaymentLogServiceImpl extends ServiceImpl<PaymentLogMapper, Payment
String attach,
Integer total,
Integer payerTotal,
String body) {
String body,
String organizeJsonId) {
PaymentLog entity = getByOrderNo(outTradeNo);
if (null == entity) {
PaymentLog log = new PaymentLog();
@ -82,11 +84,13 @@ public class PaymentLogServiceImpl extends ServiceImpl<PaymentLogMapper, Payment
log.setOrderNo(outTradeNo);
log.setTransactionId(transactionId);
log.setTradeType(tradeType);
log.setPaymentType("WXPAY");
log.setTradeState(tradeState);
log.setTotal(total);
log.setPayerTotal(payerTotal);
log.setCompanyId(attach);
log.setCreatorTime(new Date());
log.setOrganizeJsonId(organizeJsonId);
log.setContent(body);
this.save(log);
} else {

@ -18,7 +18,6 @@ import java.util.List;
public class PaymentServiceImpl extends ServiceImpl<PaymentMapper, Payment> implements IPaymentService {
@Override
public Payment getUsablePayment(String enterpriseId, BigDecimal amount) {
return null;
@ -62,11 +61,11 @@ public class PaymentServiceImpl extends ServiceImpl<PaymentMapper, Payment> impl
@Override
@Transactional
public void updateStatus(String outTradeNo, String tradeState,String tradeStateDesc, String openid) {
public void updateStatus(String outTradeNo, String tradeState, String tradeStateDesc, String openid) {
Payment payment = getByOrderNo(outTradeNo);
payment.setOrderStatus(tradeState);
payment.setOpenId(openid);
payment.setRemark(tradeStateDesc);
payment.setRemark("微信平台:" + tradeStateDesc);
payment.setLastModifyTime(new Date());
this.updateById(payment);
}

Loading…
Cancel
Save