一、前期准备工作
1.登录公司支付宝账号,申请开通即时到账的服务。
2.根据支付宝文档的要求生成公钥私钥并上传到公司支付宝账户中,然后就可以查询到对应的支付宝公钥了。(注意事项:将支付宝公钥复制到一个 .pem 文件如下图的中间位置,每行64个字符,若格式不匹配,后面验证签名时会报错)
-----BEGIN PUBLIC KEY-----
这里是支付宝公钥
-----END PUBLIC KEY-----
3.下载支付宝即时到账接口文档(php)。
二、接口调试
1.根据公司所有的php框架和现有的架构进行分析,设想几种对接的方式,寻找相对合理的解决方案。
2.接口对接之签名验证:常见的 MD5 和 RSA (MD5 的实现较 RSA 签名模式的实现要简单的多,推荐使用 RSA 签名验证,MD5便于伪造,而公钥和私钥则很难伪造)
3.调试过程中出现最多的错就是签名错误,要么是参数不正确,要么是证书的路径不正确,下面这个三个文件是非常重要的,缺一不可。
商户私钥文件:步骤一中生成的私钥文件
支付宝公钥文件:步骤一中上传秘钥后获取的支付宝公钥文件。
cacert.pem:直接将支付宝文档中的文件拿过来使用
4.同步通知和异步通知
同步通知只有一次,1分钟内有效。
异步通知会有8次,25小时内完成8次通知(频率是:4m,10m,10m,1h,2h,6h,15h)。商户处理接口若打印出 success 则表示交易成功了,通知id将会失效,也不会发送消息了,否则一直发送知道发送8次后失效。
5.同步通知可以在开发环境下测试,异步通知只能在线上服务器上在线测试,所以需要提前做好日志记录。
6.php处理时要注意编码格式,这种情况出现就是chrome可以发起支付,但是ie,360这样的浏览器就会包参数错误。
三、业务融合
1.同步返回和异步通知都可用于更新订单状态。
假设:支付成功后,直接关闭页面,没有发生同步通知,这样就可以测试异步通知是否对剩下的业务逻辑进行处理了。
2.在处理商户订单的时候一定要进行一下判断:
①交易状态码验证
②卖家账号是否一致
③通知id验证
④签名验证
⑤订单状态检验
⑥登录用户是否为订单关联的用户
⑦交易金额是否一致
3.经过上面一系列验证后终于可以走商户的处理逻辑了,处理逻辑也要检验,当订单状态已改变时则直接跳过处理。
4.业务逻辑是可以通过同步通知来走通的。
四、线上调试
1.根据日志记录和php错误来修正代码。
2.防钓鱼ip地址检查和防钓鱼时间戳可以根据需要来设置(anti_phishing_key,exter_invoke_ip),具体看文档中的配置。
五、总结
前期的准备工作一定要提前完成,不然代码无法调试,其它的介绍文档里面都描述的非常清楚,在开发的过程中一路下来遇到的大部分问题都是在文档中找到的,最纠结的一个问题在于签名的验证,签名的生成是根据返回的所有参数生成的,但是验证的时候我带入了多余的用户 token,所以导致签名一直验证失败。
简书的第一篇随笔,以后会坚持写下去。