🐛 #2246 【微信支付】修复微信支付V3签名/验签的换行符错误问题

参考微信支付文档:
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml
https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml

签名时使用的换行符必须是\n,因此不应使用%n,这会导致windows平台下签名错误
This commit is contained in:
猪蹄宝宝 2021-08-13 13:39:35 +08:00 committed by GitHub
parent 2b92b6fdc2
commit 60c9df46f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 4 additions and 4 deletions

View File

@ -83,7 +83,7 @@ public class WxPayUnifiedOrderV3Result implements Serializable {
private String paySign;
private String getSignStr() {
return String.format("%s%n%s%n%s%n%s%n", appId, timeStamp, nonceStr, packageValue);
return String.format("%s\n%s\n%s\n%s\n", appId, timeStamp, nonceStr, packageValue);
}
}

View File

@ -46,7 +46,7 @@ public class BusinessCircleServiceImpl implements BusinessCircleService {
* @return true:校验通过 false:校验不通过
*/
private boolean verifyNotifySign(SignatureHeader header, String data) {
String beforeSign = String.format("%s%n%s%n%s%n", header.getTimeStamp(), header.getNonce(), data);
String beforeSign = String.format("%s\n%s\n%s\n", header.getTimeStamp(), header.getNonce(), data);
return payService.getConfig().getVerifier().verify(header.getSerialNo(),
beforeSign.getBytes(StandardCharsets.UTF_8), header.getSigned());
}

View File

@ -177,7 +177,7 @@ public class MarketingFavorServiceImpl implements MarketingFavorService {
* @return true:校验通过 false:校验不通过
*/
private boolean verifyNotifySign(SignatureHeader header, String data) {
String beforeSign = String.format("%s%n%s%n%s%n", header.getTimeStamp(), header.getNonce(), data);
String beforeSign = String.format("%s\n%s\n%s\n", header.getTimeStamp(), header.getNonce(), data);
return payService.getConfig().getVerifier().verify(header.getSerialNo(),
beforeSign.getBytes(StandardCharsets.UTF_8), header.getSigned());
}

View File

@ -303,7 +303,7 @@ public class PayScoreServiceImpl implements PayScoreService {
* @return true:校验通过 false:校验不通过
*/
private boolean verifyNotifySign(SignatureHeader header, String data) {
String beforeSign = String.format("%s%n%s%n%s%n", header.getTimeStamp(), header.getNonce(), data);
String beforeSign = String.format("%s\n%s\n%s\n", header.getTimeStamp(), header.getNonce(), data);
return payService.getConfig().getVerifier().verify(header.getSerialNo(),
beforeSign.getBytes(StandardCharsets.UTF_8), header.getSigned());
}