开发者社区> 问答> 正文

#支付宝 sign check fail: check Sign and Data Fai,怎么办?

接口报错:com.alipay.api.AlipayApiException: com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail!

展开
收起
保持可爱mmm 2020-05-05 17:01:38 813 0
1 条回答
写回答
取消 提交回答
  • 问题原因

    支付宝返回内容信息验签失败。

    1、支付宝公钥错误

    2、编码格式错误

    3、验签方法错误

    解决方案 1、支付宝公钥错误

    验签使用的支付宝公钥必须是与之匹配的应用id(app_id)中的支付宝公钥。

    代码中支付宝公钥参数与开放平台上“接口加签方式”位置获取的支付宝公钥是否一致。

    (大部分商户报错是由于支付宝公钥错误导致,需在开放平台的“接口加签方式”位置的支付宝公钥中获取,注意不是通过密钥生成工具生成的)

    使用工具生成的密钥为应用私钥和应用公钥,应用公钥与支付宝公钥数据不同。

    如果应用的“接口加签方式”设置为“公钥”,则获取支付宝公钥数据,使用支付宝公钥数据进行验签。

    如果应用的“接口加签方式”设置为“公钥证书”,则获取支付宝公钥证书信息,使用支付宝公钥证书进行验签。

    支付宝公钥获取详见如何获取支付宝公钥。

    2、检查编码类型(charset)是否正确

    如果编码格式不同一,会导致返回信息中文乱码,建议查看返回信息是否存在乱码等情况。

    如果乱码请按照中文乱码的排查流程自行检查自己项目和服务器等环境的编码格式。

    3、验签方法错误

    接口报错sign check fail: check Sign and Data Fail!,都是商户通过sdk初始化调用接口,接口中已经自动封装验签代码,会对返回的同步响应参数进行验签,因此会存在支付成功,但是返回数据验签失败报错。

    验签代码错误,主要会存在于.net开发语言初始化代码设置错误:.net版本调用sdk报错,建议检查初始化代码末尾是否为false。

    示例代码:

    IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", "app_id", "merchant_private_key", "json", "1.0", "RSA2", "alipay_public_key", "GBK", false);

    4、运行环境有误

    如果本地测试成功,但是服务器上报错,那就应该不是代码问题,可能是操作系统运行环境不同导致的,建议检查你的运行环境版本是否过低,过低建议升级,.net的话需要.net framework 4.0的。

    2020-05-05 17:01:46
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Sketching Data With T-Digest 立即下载
How to Build a Successful Data 立即下载
低代码开发师(初级)实战教程 立即下载