String wechatSignature = request.getHeader("Wechatpay-Signature");
String wechatPaySerial = request.getHeader("Wechatpay-Serial");
String wechatpayNonce = request.getHeader("Wechatpay-Nonce");
String wechatTimestamp = request.getHeader("Wechatpay-Timestamp");
// inputSteam转为string
String requestBody = null;
InputStream inputStream = null;
try {
inputStream = request.getInputStream();
StringBuilder sb = new StringBuilder();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
while ((line = br.readLine()) != null) {
sb.append(line);
}
requestBody = sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
// 构造 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);
这是回调的代码。用的官方api
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.12</version>
</dependency>
关键的地方是 我在商户平台看不到这个报错触发的时间的附近 2个小时之内 都没有支付的订单,因为功能是早上的。报错是晚上报错的。
有没有可能别人的回调到我这里来了?然后解密失败。我在报错之后 自己尝试了一下支付 是没有问题的。
这是官方探测流量,标识别为 WECHATPAY/SIGNTEST
文档底部有说明,商户平台健壮性探测功能启用日期大约是在23年中期左右