Verify WechatPay notification parameters, serialNumber is empty.RequestParam
微信支付文档中有个坑

显示都是大写字母开头,但是返回的头部的代码都是小写
一开始我的代码是:
@Override
public ResponseEntity<String> handlePayNotify(String requestBody, Map<String, String> headers) {
String wechatpaySerial = headers.get("Wechatpay-Serial");
String wechatpaySignature = headers.get("Wechatpay-Signature");
String wechatpayTimestamp = headers.get("Wechatpay-Timestamp");
String wechatpayNonce = headers.get("Wechatpay-Nonce");
log.info("支付通知回调:{}",requestBody);
log.info("支付通知回调头部:{}",headers);
log.info("wechatpaySerial:{}",wechatpaySerial);
log.info("wechatpaySignature:{}",wechatpaySignature);
log.info("wechatpayTimestamp:{}",wechatpayTimestamp);
log.info("wechatpayNonce:{}",wechatpayNonce);
RequestParam requestParam = new RequestParam.Builder()
.serialNumber(wechatpaySerial)
.nonce(wechatpayNonce)
.signature(wechatpaySignature)
.timestamp(wechatpayTimestamp)
.body(requestBody)
.build();
/* 通知回调配置类 该类仅在商户由平台证书切换为平台公钥的灰度阶段使用,灰度完成后请切换为RSAPublicKey,NotificationConfig */
NotificationConfig config = new RSACombinedNotificationConfig.Builder()
.merchantId(wechatPayConfig.getSpMchId())
.privateKeyFromPath(wechatPayConfig.getPrivateKeyFilePath())
.merchantSerialNumber(wechatPayConfig.getMchSerialNo())
.publicKeyFromPath(wechatPayConfig.getPublicKeyPath())
.publicKeyId(wechatPayConfig.getPublicKeyId())
.apiV3Key(wechatPayConfig.getApiV3Key())
.build();
// 验证签名
// 初始化 NotificationParser
NotificationParser parser = new NotificationParser(config);
log.info("支付通知回调:验签、解密并转换成 Transaction对象:-------{}",parser);
Transaction transaction = null;
try {
// 支付通知回调,验签、解密并转换成 Transaction
log.info("transaction = parser.parse");
transaction = parser.parse(requestParam, Transaction.class);
//记录日志信息
log.info("Transaction.TradeStateEnum state =");
Transaction.TradeStateEnum state = transaction.getTradeState();
//变订单状态,派送话费
if (StringUtils.equals("SUCCESS", state.toString())) {
//支付成功,改变订单状态
log.info("支付成功,改变订单状态");
//这里根据自己的业务编写
return ResponseEntity.status(HttpStatus.OK).build();
} catch (ValidationException e) {
// 签名验证失败,返回 401 UNAUTHORIZED 状态码
log.info("微信回调失败,JsapiPayController.payNotify.transaction:{}", e.getMessage());
//通知微信回调失败
String responseJson = "{\n"
+ " \"code\": \"FAIL\",\n"
+ " \"message\": \"失败\"\n"
+ "}";
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseJson);
}
}
改完之后:
@Override
public ResponseEntity<String> handlePayNotify(String requestBody, Map<String, String> headers) {
String wechatpaySerial = headers.get("wechatpay-serial");
String wechatpaySignature = headers.get("wechatpay-signature");
String wechatpayTimestamp = headers.get("wechatpay-timestamp");
String wechatpayNonce = headers.get("wechatpay-nonce");
RequestParam requestParam = new RequestParam.Builder()
.serialNumber(wechatpaySerial)
.nonce(wechatpayNonce)
.signature(wechatpaySignature)
.timestamp(wechatpayTimestamp)
.body(requestBody)
.build();
/* 通知回调配置类 该类仅在商户由平台证书切换为平台公钥的灰度阶段使用,灰度完成后请切换为RSAPublicKey,NotificationConfig */
NotificationConfig config = new RSACombinedNotificationConfig.Builder()
.merchantId(wechatPayConfig.getSpMchId())
.privateKeyFromPath(wechatPayConfig.getPrivateKeyFilePath())
.merchantSerialNumber(wechatPayConfig.getMchSerialNo())
.publicKeyFromPath(wechatPayConfig.getPublicKeyPath())
.publicKeyId(wechatPayConfig.getPublicKeyId())
.apiV3Key(wechatPayConfig.getApiV3Key())
.build();
// 验证签名
// 初始化 NotificationParser
NotificationParser parser = new NotificationParser(config);
log.info("支付通知回调:验签、解密并转换成 Transaction对象:-------{}",parser);
Transaction transaction = null;
try {
// 支付通知回调,验签、解密并转换成 Transaction
log.info("transaction = parser.parse");
transaction = parser.parse(requestParam, Transaction.class);
//记录日志信息
log.info("Transaction.TradeStateEnum state =");
Transaction.TradeStateEnum state = transaction.getTradeState();
//变订单状态,派送话费
if (StringUtils.equals("SUCCESS", state.toString())) {
//支付成功,改变订单状态
log.info("支付成功,改变订单状态");
//这里根据自己的业务编写
return ResponseEntity.status(HttpStatus.OK).build();
} catch (ValidationException e) {
// 签名验证失败,返回 401 UNAUTHORIZED 状态码
log.info("微信回调失败,JsapiPayController.payNotify.transaction:{}", e.getMessage());
//通知微信回调失败
String responseJson = "{\n"
+ " \"code\": \"FAIL\",\n"
+ " \"message\": \"失败\"\n"
+ "}";
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseJson);
}
}
注意呀!都是小写

&spm=1001.2101.3001.5002&articleId=148605252&d=1&t=3&u=8489f7c0be214bf1aa5c2eb93ec29b4f)
2163

被折叠的 条评论
为什么被折叠?



