Java中的微信支付(3):API V3微信支付签名验证
1. 前言
2. 为什么要对响应验签
HTTP/1.1 200 OK Server: nginx Date: Tue, 02 Apr 2019 12:59:40 GMT Content-Type: application/json; charset=utf-8 Content-Length: 2204 Connection: keep-alive Keep-Alive: timeout=8 Content-Language: zh-CN Request-ID: e2762b10-b6b9-5108-a42c-16fe2422fc8a Wechatpay-Nonce: c5ac7061fccab6bf3e254dcf98995b8c Wechatpay-Signature: CtcbzwtQjN8rnOXItEBJ5aQFSnIXESeV28Pr2YEmf9wsDQ8Nx25ytW6FXBCAFdrr0mgqngX3AD9gNzjnNHzSGTPBSsaEkIfhPF4b8YRRTpny88tNLyprXA0GU5ID3DkZHpjFkX1hAp/D0fva2GKjGRLtvYbtUk/OLYqFuzbjt3yOBzJSKQqJsvbXILffgAmX4pKql+Ln+6UPvSCeKwznvtPaEx+9nMBmKu7Wpbqm/+2ksc0XwjD+xlvlECkCxfD/OJ4gN3IurE0fpjxIkvHDiinQmk51BI7zQD8k1znU7r/spPqB+vZjc5ep6DC5wZUpFu5vJ8MoNKjCu8wnzyCFdA== Wechatpay-Timestamp: 1554209980 Wechatpay-Serial: 5157F09EFDC096DE15EBE81A47057A7232F1B8E1 Cache-Control: no-cache, must-revalidate {"prepay_id":"wx2922034726858082fbd40b511c67630000"}
检查平台证书序列号
构造验签名串
从响应结果中获取对应下面方法的三个参数就可以构造出验签名串。
/** * 构造验签名串. * * @param wechatpayTimestamp HTTP头 Wechatpay-Timestamp 中的应答时间戳。 * @param wechatpayNonce HTTP头 Wechatpay-Nonce 中的应答随机串 * @param body 响应体 * @return the string */ public String responseSign(String wechatpayTimestamp, String wechatpayNonce, String body) { return Stream.of(wechatpayTimestamp, wechatpayNonce, body) .collect(Collectors.joining(" ", "", " ")); }