2015-07-07 Tuesday

最近我手头有一个iOS项目要集成支付宝SDK,集成过程中,遇到了ALI64和ALI59错误。

ALI64错误,此类错误一般都是签名不正确。

  1. 通常是没有把公钥上传到支付宝后台,解决方法就是要到支付宝的后台上传公钥就ok了。
  2. AlipayOrder对象(2015版本支付宝的Demo中给的辅助类,这个版本的Demo使用的是mobile.securitypay.pay)的productDescription没有设置或者设置了但是设置成为@”“,这个和支付宝的签名机制有关。
  3. 2016年11月14日更新:mobile.securitypay.pay)中在服务器端计算签名的字符串和返回给客户端的字符串不一致,例如,服务器端计算签名的subject参数是”A%20B”,但是返回给客户端的却是”A B”,这就会造成签名不对,尽管按照URL转义编码的角度来说”A%20B”和”A B”是一回事,但是,支付宝签名认为这两者是不同的。
  4. 2016年11月14日更新:2016版本的支付宝Demo使用的是alipay.trade.app.pay,这个API的签名计算方式与mobile.securitypay.pay的有所不同,请大家严格参照支付宝给出的Demo和新版本的AlipayOrder类和BizContent类进行编码,切勿自己实现。

至于ALI59错误,则是由于传给支付宝的参数有问题:不外乎以下几种情形

  1. 订单金额不是两位小数,alipayOrder.amount的类型是NSString,不是float,所以用stringWithFormat的时候千万不要忘了%.02f,否则就会出现意外的99999结尾的字符串了。具体可以参考:浮点数运算:问题和局限 
  2. out_trade_no有中文字符

以上都是笔者遇到过的情形,如果你也遇到了,可以参考一下,如果你遇到的情形本文没有包含,欢迎补漏。下一期笔者将讲讲微信支付的话题。