错误描述
接口报错:com.alipay.api.AlipayApiException: com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail!
问题原因
- 支付宝返回内容信息验签失败。
- 支付宝公钥错误
- 编码格式错误
- 验签方法错误
解决方案
支付宝公钥错误
支付宝公钥错误
验签使用的支付宝公钥必须是与之匹配的应用id(app_id)中的支付宝公钥。代码中支付宝公钥参数与开放平台上 接口加签方式 位置获取的支付宝公钥是否一致。大部分商户报错是由于支付宝公钥错误导致,需在开放平台的 接口加签方式 位置的支付宝公钥中获取,注意不是通过密钥生成工具生成的。
使用工具生成的密钥为应用私钥和应用公钥,应用公钥与支付宝公钥数据不同。
- 如果应用的 接口加签方式 设置为 公钥,则获取支付宝公钥数据,使用支付宝公钥数据进行验签。
- 如果应用的 接口加签方式 设置为 公钥证书,则获取支付宝公钥证书信息,使用支付宝公钥证书进行验签。
支付宝公钥获取详见 如何获取支付宝公钥。
检查编码类型(charset)是否正确
如果编码格式不同一,会导致返回信息中文乱码,建议查看返回信息是否存在乱码等情况。如果乱码请按照中文乱码的排查流程自行检查自己项目和服务器等环境的编码格式。
验签方法错误
接口报错 sign check fail: check Sign and Data Fail!,是因为商户通过 SDK 初始化调用接口,接口中已经自动封装验签代码,会对返回的同步响应参数进行验签,从而存在支付成功,但是返回数据验签失败报错。
验签代码错误,主要会存在于 .net 开发语言初始化代码设置错误,建议检查初始化代码末尾是否为 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);
运行环境有误
如果本地测试成功但是服务器上报错,建议检查你的运行环境版本是否过低,过低建议升级,如果使用 .net 语言需要升级到 .net framework 4.0。



