我现在做的功能是微信商家转账到个人微信,然后用证书的方式验签,因为之后还有充值
现在开通的是平台证书,然后这是我的请求代码:
private static TransferResponse doRequest(TransferRequest request) {
String uri = "/v3/fund-app/mch-transfer/transfer-bills";
String reqBody = new Gson().toJson(request);
Request.Builder builder = new Request.Builder()
.url(HOST + uri)
.addHeader("Accept", "application/json")
.addHeader("Wechatpay-Serial", WECHAT_PAY_PUBLIC_KEY_ID)
.addHeader("Authorization", WXPayUtility.buildAuthorization(
MCHID, CERT_SERIAL_NO, PRIVATE_KEY, "POST", uri, reqBody))
.addHeader("Content-Type", "application/json")
.post(RequestBody.create(reqBody, JSON));
Request httpRequest = builder.build();
try (Response response = HTTP_CLIENT.newCall(httpRequest).execute()) {
String respBody = WXPayUtility.extractBody(response);
if (response.code() >= 200 && response.code() < 300) {
WXPayUtility.validateResponse(WECHAT_PAY_PUBLIC_KEY_ID,WECHAT_PAY_PUBLIC_KEY,
response.headers(), respBody);
return WXPayUtility.fromJson(respBody, TransferResponse.class);
} else {
throw new WXPayUtility.ApiException(response.code(), respBody, response.headers());
}
} catch (IOException e) {
throw new RuntimeException("网络请求失败", e);
}
现在是String respBody = WXPayUtility.extractBody(response);这里能正常返回,返回的是需要用户确认收款,看着数据是正常的,但是走到
WXPayUtility.validateResponse(WECHAT_PAY_PUBLIC_KEY_ID,WECHAT_PAY_PUBLIC_KEY,
response.headers(), respBody);这里的时候就报错了,Validate response failed,the WechatPay signature is incorrect.
下面是打印出来的信息:
Validate response failed,the WechatPay signature is incorrect.
Request-ID[08C7CBBFCD0610B3031895A2E7AE0120EE6928E063-0] responseHeader[Server: nginx
Date: Tue, 10 Mar 2026 09:35:04 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=8
Cache-Control: no-cache, must-revalidate
X-Content-Type-Options: nosniff
Request-ID: 08C7CBBFCD0610B3031895A2E7AE0120EE6928E063-0
Content-Language: zh-CN
Wechatpay-Nonce: a4a4b2e90ef65b6e3b6dacdaeca63fb8
Wechatpay-Signature: oHDL1TeXWCqnK4QAMGgoWx9UrLPdHMwA8XKMqEM/Mb/eMVuL8iOPrUIUsos/BH7AsIdq43Vh22MDgUm1xoQG/6cNol9QZGs7uaewzSedLHwFKTBIU4LDcgQvqA665u96oETQm0TN7BXaHU4MIxp83uVGOlqcM1V2aivKBLLHb64HkmSbCkt6rU43MvnZSqdYIxzaJmDgFkyO++xY+02x7alUwELRQPWIdDZWhHI1f02/QVpnfQOqitOhMv2D5Yzzit54+mQUH34CQyggAjK7c3RA3oC5RLqDS/7m5KinzAz7KOByWpRpaTk0mwg==
Wechatpay-Timestamp: 1773135304
Wechatpay-Serial: 6DC460738B90CABC5DE03A6AB571DA5C3B6706EF
Wechatpay-Signature-Type: WECHATPAY2-SHA256-RSA2048
] responseBody[{"create_time":"2026-03-10T17:35:03+08:00","out_bill_no":"2031302779488616450","package_info":"ABBQO+oYAAABAAAAAABCF7MimPkG7pRNyOWvaRAAAADnGpersQufepexx7NdSGndT6G2jJFI+z7WJgopxEJwc8JOIahG27WxYVOJ+HTqdtgqFUmS79YjsIEMgHuWXGQ=","state":"WAIT_USER_CONFIRM","transfer_bill_no":"1330007938065842603100047147535391"}]
我现在不知道哪里有问题,一直调用不成功
你应答的Wechatpay-Serial 是平台证书序列号,你代码取值是微信支付公钥 ID
代码响应的证书是这个Wechatpay-Serial: 6DC460738B90CABC5DE03A6AB571DA5C3B6706EF你验签要用对应的这个证书验