遇到主要的问题是两个:1. 发送订单给支付宝接口,接口验证签名失败。 2.支付宝付款结束后,发送信息给网站接收方进行二次验签,还是签名过不了。验签的方式是RSA非对称加密的验证方式。
遇到的两个问题都是一个原因:网站的数据编码和支付宝的支付接口的编码对不上。网站的编码是GBK编码,按理来说支付宝给出了编码的配置项,也的确配置成了GBK编码,结果数据发送过去签名过不了。这个问题绊了很久,我舅舅一眼看出来这是发送过去的数据到了支付宝接口的url里有少量乱码,推测出来是编码的问题。于是就在发送请求的时候,修改了编码,第一次验签通过了。
后来我想清楚了问题出在了哪里:咱们的网站是gb2312的编码,不是gbk的编码。gb2312是gbk的一个子集。支付宝只支持UTF-8 和 GBK的 编码,不支持gb2312。所以在发送请求的时候把编码改成GBK就签名通过了。
这个gb2312属于中国比较老的一种编码,可能是咱们的这一套网站源程序比较老的原因,编码就使用了gb2312.现在想换编码风险也比较大。 比较新的项目大多都是采用utf-8的编码格式,接口平台,服务器,网站都默认采用utf-8编码就不用担心这个编码的问题。
这个编码的问题还是我第一次遇到,可以说是为以后的工作涨姿势了。
第二次验签不过我也想清楚了原因:同样是编码问题。接口返回的数据是gbk编码,网站是gb2312编码ÿ