|
@@ -2,7 +2,6 @@ package com.llisoft.pay.controller;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.charset.StandardCharsets;
|
|
-import java.util.Enumeration;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
@@ -53,34 +52,16 @@ public class CallbackWxPayController {
|
|
|
|
|
|
// https://github.com/wechatpay-apiv3/wechatpay-java/README.md
|
|
// https://github.com/wechatpay-apiv3/wechatpay-java/README.md
|
|
private RequestParam notify(HttpServletRequest request) throws IOException {
|
|
private RequestParam notify(HttpServletRequest request) throws IOException {
|
|
-
|
|
|
|
- System.out.println();
|
|
|
|
- System.out.println("*************************************************");
|
|
|
|
- System.out.println();
|
|
|
|
- Enumeration<String> headerNames = request.getHeaderNames();//获得 n个键名,放回一个Enumeration<String>类型的数据
|
|
|
|
- while(headerNames.hasMoreElements()){//.hasMoreElements()返回的是布尔类型的数据
|
|
|
|
- String headerName = headerNames.nextElement();//获得键
|
|
|
|
- String headerValue = request.getHeader(headerName);//获得值
|
|
|
|
- System.out.println(headerName+":"+headerValue);
|
|
|
|
- }
|
|
|
|
- System.out.println();
|
|
|
|
- System.out.println("*************************************************");
|
|
|
|
- System.out.println();
|
|
|
|
-
|
|
|
|
String signature = request.getHeader("wechatpay-signature"); // - HTTP 头 `Wechatpay-Signature`。应答的微信支付签名。
|
|
String signature = request.getHeader("wechatpay-signature"); // - HTTP 头 `Wechatpay-Signature`。应答的微信支付签名。
|
|
String serial = request.getHeader("wechatpay-serial"); // - HTTP 头 `Wechatpay-Serial`。微信支付平台证书的序列号,验签必须使用序列号对应的微信支付平台证书。
|
|
String serial = request.getHeader("wechatpay-serial"); // - HTTP 头 `Wechatpay-Serial`。微信支付平台证书的序列号,验签必须使用序列号对应的微信支付平台证书。
|
|
String nonce = request.getHeader("wechatpay-nonce"); // - HTTP 头 `Wechatpay-Nonce`。签名中的随机数。
|
|
String nonce = request.getHeader("wechatpay-nonce"); // - HTTP 头 `Wechatpay-Nonce`。签名中的随机数。
|
|
String timestamp = request.getHeader("wechatpay-timestamp"); // - HTTP 头 `Wechatpay-Timestamp`。签名中的时间戳。
|
|
String timestamp = request.getHeader("wechatpay-timestamp"); // - HTTP 头 `Wechatpay-Timestamp`。签名中的时间戳。
|
|
- System.out.println("signature ^^^^^^^^^^^^^ "+ signature);
|
|
|
|
- System.out.println("serial ^^^^^^^^^^^^^ "+ serial);
|
|
|
|
- System.out.println("nonce ^^^^^^^^^^^^^ "+ nonce);
|
|
|
|
- System.out.println("timestamp ^^^^^^^^^^^^^ "+ timestamp);
|
|
|
|
// String signatureType = headers.getFirst("wechatpay-signature-type"); // - HTTP 头 `Wechatpay-Signature-Type`。签名类型。
|
|
// String signatureType = headers.getFirst("wechatpay-signature-type"); // - HTTP 头 `Wechatpay-Signature-Type`。签名类型。
|
|
// **切记使用原始报文**,不要用 JSON 对象序列化后的字符串,避免验签的 body 和原文不一致。
|
|
// **切记使用原始报文**,不要用 JSON 对象序列化后的字符串,避免验签的 body 和原文不一致。
|
|
String body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
|
|
String body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
|
|
logger.debug("收到微信支付异步通知: {}", body);
|
|
logger.debug("收到微信支付异步通知: {}", body);
|
|
- return new RequestParam.Builder().serialNumber(signature)
|
|
|
|
- .nonce(serial).signature(nonce).timestamp(timestamp).body(body).build();
|
|
|
|
|
|
+ return new RequestParam.Builder().serialNumber(serial)
|
|
|
|
+ .nonce(nonce).signature(signature).timestamp(timestamp).body(body).build();
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|