标签为 "api" 的存档

支付宝集成经验之技术支持问题

经过三天的努力,终于把接口调通了。在调试的过程中,遇到了一些文档中未提到的问题。而且也发现了文档和PHP编程接口的一些缺陷和错误。
这些缺陷和错误可能给开发者带来了一些误导。

文档错误:
1)所有的文档中都把错误代码HAS_NO_PRIVILEGE(没有权限访问该服务)写成HASNO_PRIVILEGE。

 
文档缺陷:
1)文档《标准快速付款接口文档 V2.0》和《批量付款到帐号》中关于数字签名部分有内容不明确。
《标准快速付款接口文档 V2.0》5.2.4. 支付宝系统返回处理结果:

支付宝系统接收到商户系统发起的请求,处理成功后返回的参数中同样包含有参数sign、sign_type,商户需根据sign_type 计算sign 值,最终检验支付宝系统返回的sign 值,这里要注意的是商户需要对每一个返回参数的值先进行decode 后再验证sign。

这里的decode我的理解应该是转换编码的意思吧?!但第一次看会很直觉地以为是urldecode。

2)文档中没有提到,本地以某种编码提交给支付宝,支付宝在发通知的时候就会以该编码对数据进行编码并发回本地。虽然这是比较容易想到的,但是文档还是应该说清楚。毕竟,搞错编码是网络传输中经常会出问题。
3)支付宝返回到我的return_url中的参数中,is_success这个参数没有说明,虽然字面就看得出来,但是写到文档里也没什么不好吧。
4)文档《标准快速付款接口文档 V2.0》中没有错误代码TRADE_SELLER_NOT_MATCH,网上查了好像是网址不匹配还是什么原因,不清楚。重现方法:用测试帐号***@***.com发个out_trade_no为1的请求就会出现。
5)文档中还没提到,当网站使用非第三方权威机构签名的SSL证书时,将收不到支付宝的notify。确认已经加了notify_url。

PHP编程接口缺陷:
1)编程接口及示例代码写得过于随便,出现明显的错误
批量支付示例代码index.php中

"pay_date" => date(Ymd),  //付款日期 格式20070412

应为

"pay_date" => date('Ymd'),  //付款日期 格式20070412
"batch_no"  => date(Ymdhms) , //批量付款订单号

应为

"batch_no"  => date('Ymdhms') , //批量付款订单号

出现这个错误,说明了支付宝在发demo代码给用户时没有先测试,至少是发给我的这份没有,因为这个demo是不可能运行得起来的。

2)alipay_service.php中

if($parameter['_input_charset'] == "")

应为

if (array_key_exists('_input_charset', $parameter))

否则,当传进来的$parameter不包含_input_charset项是会出现错误Undefined index: _input_charset

3)编程接口能写得完善一些,实现DSA签名和RAS签名功能

另外,demo代码中把提交表单的按钮放到form外面了。一开始我没注意为什么要这么做,后来遇到签名错误时,弄了一个小时才发现,原来的我把提交按钮放到了FORM里面,并给了提交按钮一个name属性。这导致了提交到支付宝的数据中多了一项,导致签名错误。这是一个很隐蔽的陷阱,在文档中明确提醒集成开发者,相信会对集成开发者有很大的帮助。避免像我一样浪费了一个小时才找到错误原因。