支付宝电脑网站支付汉字乱码导致验签失败处理

由于支付宝产品的全面升级,需要将支付宝电脑网站支付的接口升级至新版接口,接口文档地址:https://docs.open.alipay.com/270/105899/,按照快速接入文档的介绍完成代码改造后,准备进行测试,由于系统的特殊性,在调用统一收单下单并支付页面接口的时候没有使用提供的SDK包生成表单页面的形式,而是自己调用AlipaySignature.rsaSign方法进行签名,实际测试的时候发现支付宝提示签名错误,尴尬!!!一开始没有注意支付宝错误页面上显示的错误信息,以为是签名写的有问题,所以该用支付宝的DEMO进行表单的生成,依然出现验签错误,在确定密钥信息无误后看了下支付宝的错误页面,部分中文出现了乱码,所以就猜想是由于双方字符编码不一致导致的验签错误。
我们系统使用的是utf-8,检查了一下请求参数,在公共参数中charset传入的确实是utf-8,这样就很诡异了,然后就考虑是不是与请求方式有关系,目前参数提交的方式是post,所有请求参数都是放在表单的隐藏域中提交,考虑是这种提交方式会导致支付宝获取编码错误导致乱码,所以就在接口的请求地址后面拼接了编码信息,即将原请求地址:https://openapi.alipay.com/gateway.do更改为:https://openapi.alipay.com/gateway.do?charset=utf-8,再次提交测试成功,验签通过,付款页面正常显示。

将原请求地址:https://openapi.alipay.com/gateway.do更改为:https://openapi.alipay.com/gateway.do?charset=utf-8
将原请求地址:https://openapi.alipay.com/gateway.do更改为:https://openapi.alipay.com/gateway.do?charset=utf-8
将原请求地址:https://openapi.alipay.com/gateway.do更改为:https://openapi.alipay.com/gateway.do?charset=utf-8

重要的事情说三遍,哈哈哈!!!

如果使用支付宝的SDK包,一定不能添加参数,否则会报空指针异常

这是目前我的解决方法,网上还有一些设置Tomcat的URI请求编码的方法,如果遇到这样的问题,大家也可以去尝试一下。

你可能感兴趣的:(杂谈)