天天看点

支付宝-移动支付

  本人是个努力中的PHP程序员,公司接了个电商项目,B2B2C类型又参杂O2O的感觉,不管了,还是调一调支付宝吧。   目前测试调通,支付成功,服务器收到支付宝异步通知,下面总结几点:

1、使用支付宝接口前须知

  首先,刚开始调支付宝时,不知道用支付宝的哪个接口,不知道用WAP还是支付宝钱包还是其他什么的。总的来说,第一次调支付宝还是不清楚,于是在支付宝网站里(网站感觉挺乱的)下载了两个技术文档。一个是移动支付,一个是手机网站支付。 ----------------------------------------------------------------------------------------------   这里说明一下,要使用支付宝接口功能,必须先签约支付宝对应产品,如移动支付和手机网站支付 ----------------------------------------------------------------------------------------------   当时以为客户端如果安装了支付宝钱包就会调移动支付的接口,没有支付宝钱包的话就调手机网站支付接口,我还在纠结服务器端的接口怎么实现。但是后来发现客户端只要集成移动支付SDK就行了,客户端装没装支付宝钱包,移动支付SDK自动判断,有就调钱包没有就走WAP。这下就好了,只用关心移动支付的接口了,手机网站支付接口是针对WAP手机网站的接口,和移动支付接口是两个东西。

2、参数签名须知(本人做的是服务器端做的)

  接下来就说移动支付了,支付宝提供的PHPdemo中只需要做异步通知的操作,拼接请求参数、签名等操作放在客户端。但是为了安全(商户账号、合作者ID、私钥等)起见,拼接参数、签名等工作放在服务端进行,把拼接好的字符串返给客户端,客户端再拿着它去请求支付宝。

  具体公私钥生成、上传请参照支付宝相关说明。下面说下服务端RSA签名,PHP按照支付宝要求生产RSA私钥(不需要PKCS8编码),除sign,sign_type参数外,其他参数拼接好和RSA私钥签名,签名结果作为参数sign的值。 ----------------------------------------------------------------------------------------------   这里说明一下,所有参数的值只有sign的值需要urlencode,但是坑爹的支付宝demo里的方法把所有参数的值都做了urlencode ----------------------------------------------------------------------------------------------   大家可以验证一下生成的公私钥是否配对(支付宝有工具http://yun.baidu.com/share/link?shareid=3003251250&uk=1896356688,验证的私钥必须是PKCS8编码),或把服务端的签名结果和客户端的签名结果对比一下,如果一样就没问题。客户端的私钥做了PKCS8编码,跟PHP服务端的私钥不一样,但最总签名结果是一样的。 ----------------------------------------------------------------------------------------------   还有一点需要注意,签名需要拼接的参数字符串,所以说签名前参数顺序不一样,签名结果也不一样。 ----------------------------------------------------------------------------------------------   参数拼接签名好就可以请求支付宝了。

3、支付宝异步通知

  客户端支付成功后,服务器会收到支付宝异步通知。 ----------------------------------------------------------------------------------------------   看到之前别人写的,是获取支付宝post过来的’notify_data’中的xml数据解析的,但是我收到的参数中没有notify_data,问了支付宝技术客服,说是老版本的有,现在没有。现在直接post接收对应的相关参数处理就行了。 ----------------------------------------------------------------------------------------------   异步通知的参数,我们要做验证,一是验证sign签名,用支付宝公钥和待签名数据验证签名结果是否为true;二是验证是否是支付宝的请求,通过通知校验ID(notify_id)http请求支付宝判断返回结果是否为true。这两个都为true才验证通过,如果过程中有问题可以打开日志记录信息。

  好了,以上就是小弟第一次接触支付宝的一些心得,也是我的第一篇文章,都是自己一字字敲出来的,希望大家多多指导。 

-------------------------------------------------------------------如需转载请附上转载地址---------------------------------------------------------------------------