Skip to content

Commit 10cd5c1

Browse files
committed
增加debug日志
1 parent 55e4159 commit 10cd5c1

File tree

3 files changed

+47
-12
lines changed

3 files changed

+47
-12
lines changed

src/main/java/com/wechat/pay/contrib/apache/httpclient/SignatureExec.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import static org.apache.http.HttpStatus.SC_MULTIPLE_CHOICES;
55
import static org.apache.http.HttpStatus.SC_OK;
66

7+
import java.io.ByteArrayOutputStream;
78
import java.io.IOException;
9+
import java.util.Arrays;
810
import org.apache.http.HttpEntity;
911
import org.apache.http.HttpEntityEnclosingRequest;
1012
import org.apache.http.HttpException;
@@ -16,13 +18,16 @@
1618
import org.apache.http.conn.routing.HttpRoute;
1719
import org.apache.http.entity.BufferedHttpEntity;
1820
import org.apache.http.impl.execchain.ClientExecChain;
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
1923

2024
/**
2125
* @author xy-peng
2226
*/
2327
public class SignatureExec implements ClientExecChain {
2428

2529
private static final String WECHAT_PAY_HOST_NAME_SUFFIX = ".mch.weixin.qq.com";
30+
private static final Logger log = LoggerFactory.getLogger(SignatureExec.class);
2631
private final ClientExecChain mainExec;
2732
private final Credentials credentials;
2833
private final Validator validator;
@@ -41,11 +46,9 @@ protected void convertToRepeatableResponseEntity(CloseableHttpResponse response)
4146
}
4247

4348
protected void convertToRepeatableRequestEntity(HttpRequestWrapper request) throws IOException {
44-
if (request instanceof HttpEntityEnclosingRequest) {
45-
HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
46-
if (entity != null) {
47-
((HttpEntityEnclosingRequest) request).setEntity(new BufferedHttpEntity(entity));
48-
}
49+
HttpEntity entity = getRequestEntity(request);
50+
if (entity != null) {
51+
((HttpEntityEnclosingRequest) request).setEntity(new BufferedHttpEntity(entity));
4952
}
5053
}
5154

@@ -59,26 +62,45 @@ public CloseableHttpResponse execute(HttpRoute route, HttpRequestWrapper request
5962
}
6063
}
6164

65+
private HttpEntity getRequestEntity(HttpRequestWrapper request) {
66+
HttpEntity entity = null;
67+
if (request instanceof HttpEntityEnclosingRequest) {
68+
entity = ((HttpEntityEnclosingRequest) request).getEntity();
69+
}
70+
return entity;
71+
}
72+
73+
private boolean isUploadHttpPost(HttpRequestWrapper request) {
74+
return request.getOriginal() instanceof WechatPayUploadHttpPost;
75+
}
76+
6277
private CloseableHttpResponse executeWithSignature(HttpRoute route, HttpRequestWrapper request,
6378
HttpClientContext context,
6479
HttpExecutionAware execAware) throws IOException, HttpException {
6580
// 上传类不需要消耗两次故不做转换
66-
if (!(request.getOriginal() instanceof WechatPayUploadHttpPost)) {
81+
if (!isUploadHttpPost(request)) {
6782
convertToRepeatableRequestEntity(request);
6883
}
6984
// 添加认证信息
7085
request.addHeader(AUTHORIZATION, credentials.getSchema() + " " + credentials.getToken(request));
71-
7286
// 执行
7387
CloseableHttpResponse response = mainExec.execute(route, request, context, execAware);
74-
7588
// 对成功应答验签
7689
StatusLine statusLine = response.getStatusLine();
7790
if (statusLine.getStatusCode() >= SC_OK && statusLine.getStatusCode() < SC_MULTIPLE_CHOICES) {
7891
convertToRepeatableResponseEntity(response);
7992
if (!validator.validate(response)) {
8093
throw new HttpException("应答的微信支付签名验证失败");
8194
}
95+
} else {
96+
// 错误应答需要打日志
97+
log.debug("request header[{}]", Arrays.toString(request.getAllHeaders()));
98+
HttpEntity entity = getRequestEntity(request);
99+
if (entity != null && !isUploadHttpPost(request)) {
100+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
101+
entity.writeTo(outputStream);
102+
log.debug("request body[{}]", outputStream.toString("UTF-8"));
103+
}
82104
}
83105
return response;
84106
}

src/main/java/com/wechat/pay/contrib/apache/httpclient/WechatPayUploadHttpPost.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@
66
import java.io.InputStream;
77
import java.net.URI;
88
import java.net.URLConnection;
9+
import org.apache.http.HttpEntity;
910
import org.apache.http.client.methods.HttpPost;
1011
import org.apache.http.entity.ContentType;
1112
import org.apache.http.entity.mime.HttpMultipartMode;
1213
import org.apache.http.entity.mime.MultipartEntityBuilder;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
1316

1417
/**
1518
* @author xy-peng
1619
*/
1720
public class WechatPayUploadHttpPost extends HttpPost {
1821

1922
private final String meta;
23+
private static final Logger log = LoggerFactory.getLogger(WechatPayUploadHttpPost.class);
2024

2125
private WechatPayUploadHttpPost(URI uri, String meta) {
2226
super(uri);
@@ -80,10 +84,12 @@ public WechatPayUploadHttpPost build() {
8084
WechatPayUploadHttpPost request = new WechatPayUploadHttpPost(uri, meta);
8185
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
8286
entityBuilder.setMode(HttpMultipartMode.RFC6532)
83-
.addBinaryBody("file", fileInputStream, fileContentType, fileName)
84-
.addTextBody("meta", meta, APPLICATION_JSON);
85-
request.setEntity(entityBuilder.build());
87+
.addTextBody("meta", meta, APPLICATION_JSON)
88+
.addBinaryBody("file", fileInputStream, fileContentType, fileName);
89+
HttpEntity entity = entityBuilder.build();
90+
request.setEntity(entity);
8691
request.addHeader(ACCEPT, APPLICATION_JSON.toString());
92+
log.debug("request[{}]", entity.getContentType());
8793
return request;
8894
}
8995
}

src/main/java/com/wechat/pay/contrib/apache/httpclient/auth/CertificatesVerifier.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@
1313
import java.util.List;
1414
import java.util.Map;
1515
import java.util.NoSuchElementException;
16+
import org.slf4j.Logger;
17+
import org.slf4j.LoggerFactory;
1618

1719
/**
1820
* @author xy-peng
1921
*/
2022
public class CertificatesVerifier implements Verifier {
2123

24+
private static final Logger log = LoggerFactory.getLogger(CertificatesVerifier.class);
2225
protected final HashMap<BigInteger, X509Certificate> certificates = new HashMap<>();
2326

2427
public CertificatesVerifier(List<X509Certificate> list) {
@@ -57,7 +60,11 @@ protected boolean verify(X509Certificate certificate, byte[] message, String sig
5760
public boolean verify(String serialNumber, byte[] message, String signature) {
5861
BigInteger val = new BigInteger(serialNumber, 16);
5962
X509Certificate cert = certificates.get(val);
60-
return cert != null && verify(cert, message, signature);
63+
if (cert == null) {
64+
log.debug("Cert is null.serialNumber:{}", serialNumber);
65+
return false;
66+
}
67+
return verify(cert, message, signature);
6168
}
6269

6370
@Override

0 commit comments

Comments
 (0)