黄宽的blog

宁可十年不将军,不可一日不拱卒



laravel使用OmniPay支付宝支付

        支付是很多网站必不可少的一个功能,用得最多的支付平台就是支付宝和微信,在laravel学院中推荐使用omnipay中的omnipay-alipay插件来进行支付,上个月我已经将项目中的支付宝扫码支付和微信的扫码支付和js支付彻底做完了,学习到了很多。在laravel学院中的支付宝支付篇的留言中发现了很多遇到的一些问题,这些问题我也遇到过,可能有一部分人就放弃了使用这个插件转原生sdk开发去了。总结了一下,基本上这些留言遇到的问题基本有一条, does not have a method 'gateway' ,没有这个gateway,其实这个问题很好解决,你点开这个项目的github地址打开文档就会发现,官方文档已经没用gateway这个方法了,而是使用create。其他如果找laravel学院的还没做好的话,你可以看一下你的vender里面有没有一个叫omnipay的文件和一个叫lokielse的文件夹,没有的话说明你的composer还没跑成功继续跑吧。

        我对于这个插件的理解是omnipay相当于一个平台,omnipay-laravel是基于这个平台做的一个插件,还有下一篇要讲的微信支付也是,这个平台要求插件将所有复杂的处理不用通过程序员来处理,程序员只需要将参数填入配置文件再做下单和回调操作即可完成,各种插件的数据验证要求使用ominpay的验证要求,所以我们会看到不管是微信还是支付宝,下单和回调的各种获取配置和验证的代码几乎一样。比如下单的create方法获取网管配置和其他操作,比如回调中的数据验证是否通过$response->isSuccessful() && $response->isTradeStatusOk(),都是一样的。我们只用处理最重要的业务逻辑即可。

        不管是原生sdk还是插件还是各种平台,基本上步骤分为两步,第一步就是下订单,传配置,第二步就是回调。使用omnipay-alipay完成支付很简单,看laravel学院的介绍即可。下面说说与插件无关的,下单方法中我们需要做什么操作,回调中我们需要怎么处理自己的业务逻辑。支付一般有两张表,一张表给用户看,一张表对账用,下单成功后我们需要在用户的充值记录表中填充一条状态为未支付的数据,异步回调成功后需要在对账表中添加一条数据,添加成功后再将用户的充值记录中的那条记录的支付状态改为已支付成功。

        支付宝中的回调有两种方式,一种是同步回调,一种是异步回调,同步回调支付宝会向你的服务器发起get请求,异步回调支付宝会向你的服务器发起post请求,同步回调不确保会成功,异步回调保证百分之九十九点九的成功率,经测试可以同时使用两种回调。我的同步回调地址直接是返回一个用户支付完成后的页面,没有任何数据操作。

        支付宝做得很好,直接在手机端中的浏览器打开,支付宝会自动调起你的支付宝app进行支付,没有app,则会调到支付宝页面的支付宝登录页面进行支付,若是调起手机app支付支付成功后,并不会自动跳转到你的项目中,而是还会停留在支付宝app中,退出app会返回到你的项目当中,若要完成调起app支付完成后自动跳转则需要另外一个网关,手机网站支付,流程还是一样,但是会多了许多步骤各种验证,所以也没太大必要做这个手机网站支付,手机网站支付仅仅比pc的多一个跳转而已,也能支付。使用omnipay-alipay支付相对比微信扫码支付模式二,简直简单得不要不要的了。

  Laravel

作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接