收藏
回答

微信支付app支付 报错:Msg: requestPayment:fail payment微信-1

使用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编码得到的签名值不一致。


回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容