【Laravel】集成支付宝

最近公司的项目中加入了用户打赏,以次为目的花了点时间学习了如何向Laravel中使用支付宝,再次基础上借鉴了公司公司开发人员的博客laravel为网站添加支付功能(支付宝),下面是我的一点学习总结。

5.jpg

首先在composer.json中添加如下依赖:

"lokielse/omnipay-alipay": "^2.0",

更新依赖(运行composer update安装这些依赖)

composer update -vvv

支付宝商户帐号和密钥配置:

1.png

支付宝SDK支持如下接口:

https://github.com/lokielse/omnipay-alipay

Usage

Purchase (购买)

2.png

通知页面notify_url、返回页面return_url是怎么工作的?

3.png

1、 构造请求数据

商户通过提供的接口代码示例,通过代码示例的规则,程序构造与运算得到sign加密结果以及构造后的请求给支付宝的数据集合。

2、 发送请求数据

把构造完成的数据集合,通过页面链接跳转或表单提交的方式传递给支付宝。

3、 请求的交易

支付宝得到这些集合后,会先做安全校验等验证,一系列验证通过后便会处理完成这次发送过来的数据请求。

4、 返回相应数据

支付宝对处理完成的交易,程序上自动进行重新构造成URL地址链接,以自动跳转的方式跳回商家在请求时设定好的页面路径地址(参数return_url,商家没设定,则不会跳回)。

5、 对相应的数据进行处理

商家的返回页面(参数return_url指定页面文件)得到支付宝返回的数据,把这些数据结合自身网站情况,进行数据处理(如:订单更新)。

返回页面(notify_url文件)工作原理

4.png

前提:若要支付宝能主动通知,需商户在请求时设定好通知的页面路径(参数notify_url),且该页面文件完全空白,无任何字符。

1、 发起通知

一旦交易状态发生变更(如:买家已付款,等待卖家发货),支付宝便会根据自动进行数据处理,并主动调用商户在请求时设定好通知的页面路径(参数notify_url)

2、 对通知数据进行处理

商户网站收到支付宝发送过来的通知数据,把这些数据结合自身网站情况,进行数据处理,如:处理返回页(参数return_url)漏掉的订单,做订单更新,即补单措施。

3、 在页面上输出success

商户网站处理完成所有的数据处理以后,即程序运行最后,返回写页面“success”这7个字符(页面上只允许输出success),以表示自己已经成功处理完成自己的业务。

4、 完成处理该次通知,不再发送通知

支付宝得到商户反馈回来的“success”7个字符信息,进行核对与验证,结束此次通知流程。

注意:

如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。在25小时内完成6~10次通知(通知频率:5s,2m,10m,15m,1h,2h,6h,15h)

支付宝接口中notify_url 与 return_url 的区别

一、return_url

1、同步返回接口,作为参数传递给支付宝

2、用户付款成功后,从支付宝跳转到这个页面

3、在这个页面中加入相关业务处理,比如更新记录,标记付款成功信息。

4、需要对支付宝传递过来的签名进行认证。

5、用来展现成功付款信息给前台付款用户。

6、支付宝那边只返回一次。

7、由于用户在付款完成后,直接关闭付款页面,不跳转到return_url的页面,会导致return_url的相关业务处理不了。

二、notify_url

1、异步通知接口,作为参数传递给支付宝。

2、如果不传递,则不通知。

3、相关业务逻辑应该和return_url中相同。

4、返回字符串"success"或者"fail",不能带有任何HTML信息。

5、付款成功后就通知一次,如果不成功,1分钟、3分钟、10分钟、半个小时。。。后再通知,直到返回success。

6、过期时间是48小时,如果48小时内都通知不成功,那么就不再通知。

三、notify_url 与 return_url使用说明

1、当从支付宝返回success时,在两者的业务逻辑的判断中,都需要判断是否已经处理,避免重复处理

2、如果不传递notify_url,支付宝付款成功,但是没有收到成功的返回信息率在20-30%,notify_url可以保证99.99%的通知成功率。

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容