使用apiv3版本,
java 使用官方的sdk
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.12</version>
</dependency>
根据这个,可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常原因等
微信开放平台的appid,签名,包名等都排查过没有问题。
我目前排查到是根据SDK的 生成的,或者自己手动生成的,使用golang生成签名都是一致的,但是与签名工具生成的不一致。
golang生成签名方法:
func Sign(data string, privateKey *rsa.PrivateKey) (string, error) {
hashed := sha256.Sum256([]byte(data))
signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:])
if err != nil {
return "", err
}
return base64.StdEncoding.EncodeToString(signature), nil
}
java 生成签名方法:
public static String sign(String data, PrivateKey privateKey) throws Exception {
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(data.getBytes(StandardCharsets.UTF_8));
byte[] signBytes = signature.sign();
return Base64.getEncoder().encodeToString(signBytes);
}
相同的参数,对待签名串进行SHA256 with RSA签名,并对签名结果进行Base64编码得到的签名值不一致。
用sdk的方法试试看看