接口报错:com.alipay.api.AlipayApiException: com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail!
问题原因
支付宝返回内容信息验签失败。
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的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。