wechatpay-java icon indicating copy to clipboard operation
wechatpay-java copied to clipboard

README 回调通知的例子返回值错误的问题

Open wyl086 opened this issue 1 year ago • 0 comments

错误描述

// 返回类型为 ResponseEntity.BodyBuilder 不正确
// return ResponseEntity.status(HttpStatus.OK);
// 应改为返回类型 ResponseEntity
return ResponseEntity.status(HttpStatus.OK).build();

重现bug的步骤

微信支付通知接口使用README的回调通知代码即可复现 回调通知链接引用

预期行为

不报错 No acceptable representation

导致错误的代码片段

// 构造 RequestParam
RequestParam requestParam = new RequestParam.Builder()
        .serialNumber(wechatPaySerial)
        .nonce(wechatpayNonce)
        .signature(wechatSignature)
        .timestamp(wechatTimestamp)
        .body(requestBody)
        .build();

// 如果已经初始化了 RSAAutoCertificateConfig,可直接使用
// 没有的话,则构造一个
NotificationConfig config = new RSAAutoCertificateConfig.Builder()
        .merchantId(merchantId)
        .privateKeyFromPath(privateKeyPath)
        .merchantSerialNumber(merchantSerialNumber)
        .apiV3Key(apiV3Key)
        .build();

// 初始化 NotificationParser
NotificationParser parser = new NotificationParser(config);

try {
  // 以支付通知回调为例,验签、解密并转换成 Transaction
  Transaction transaction = parser.parse(requestParam, Transaction.class);
} catch (ValidationException e) {
  // 签名验证失败,返回 401 UNAUTHORIZED 状态码
  logger.error("sign verification failed", e);
  return ResponseEntity.status(HttpStatus.UNAUTHORIZED);
}

// 如果处理失败,应返回 4xx/5xx 的状态码,例如 500 INTERNAL_SERVER_ERROR
if (/* process error */) {
  return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR);
}

// 处理成功,返回 200 OK 状态码
return ResponseEntity.status(HttpStatus.OK);

操作系统

Windows11

Java 版本

Java 17

wechatpay-java 版本

0.2.14

其他信息

No response

wyl086 avatar Oct 17 '24 07:10 wyl086