bozboz / checkout
此包已被弃用且不再维护。未建议替代包。
最新版本(v2.0.0)的此包没有提供许可信息。
v2.0.0
2018-01-30 16:51 UTC
Requires
- illuminate/routing: 5.2.*
- illuminate/session: 5.2.*
- illuminate/support: 5.2.*
This package is auto-updated.
Last update: 2021-06-04 10:22:43 UTC
README
定义一系列相互连接的屏幕,这些屏幕作为连续过程的一部分连接在一起。
有关实现的示例,请查看以下仓库
设置
- 通过在Composer中运行
composer require bozboz/checkout
来要求此包 - 在app/config/app.php中添加服务提供者
Bozboz\Ecommerce\Checkout\Providers\CheckoutServiceProvider::class,
- 在app/config/app.php中将Checkout外观添加到别名数组中
'Checkout' => Bozboz\Ecommerce\Checkout\Facades\Checkout::class,
用法
- 使用Checkout外观在
app/Http/routes.php
中注册新的结账流程 - 使用
using
方法在外观上设置一个存储库。该存储库必须实现Bozboz\Ecommerce\Checkout\CheckoutableRepository
接口,其目的是获取可结账实例。实例必须实现Checkoutable接口。(订单包有一个默认实现,用于从会话中获取订单实例,Bozboz\Ecommerce\Orders\OrderRepository
)。 - 在返回的对象上调用
add
以添加屏幕。add方法接受4个参数- 屏幕将响应的URL
- 要使用的屏幕类(解析IoC容器)
- 一个可选的附加标签,用于识别屏幕,主要用于进度条
- 路由参数(uses、as、before等)
例如。
<?php Checkout::using('App\Ecommerce\Orders\OrderRepository')->register(['prefix' => 'checkout'], function($checkout) { $checkout->add('/', 'App\Screens\Start', 'Start'); $checkout->add('customer', 'App\Screens\CustomerDetails', 'Personal Info'); $checkout->add('address', 'App\Screens\AddressSelection', 'Addresses'); $checkout->add('delivery', 'App\Screens\ShippingSelection', 'Delivery'); $checkout->add('billing', 'App\Screens\IframeBilling', 'Payment'); $checkout->add('complete', 'App\Screens\OrderCompleted', 'Complete'); });
上面的示例将注册以下URL
GET /checkout
POST /checkout
GET /checkout/customer
POST /checkout/customer
GET /checkout/address
POST /checkout/address
GET /checkout/delivery
POST /checkout/delivery
GET /checkout/billing
POST /checkout/billing
GET /checkout/complete
POST /checkout/complete
屏幕
屏幕必须扩展Bozboz\Ecommerce\Checkout\Screen
,并且必须定义一个view()方法。
此外,支持canSkip
方法,该方法必须返回一个布尔值。如果此方法返回true
,则屏幕将在过程中被跳过。
处理屏幕
要定义处理操作(当屏幕URL被POST时触发),屏幕类必须实现Bozboz\Ecommerce\Checkout\Processable
。此接口要求定义一个process()
方法。
提供此方法不抛出Bozboz\Ecommerce\Checkout\ValidationException
实例,则结账过程将在完成时继续到下一个屏幕。
故障排除
当使用测试支付时,如果在点击'拿走我的钱'时出现500内部服务器错误,请尝试排除checkout/billing路由的csrf保护。
在App\Http\Middleware\VerifyCsrfToken中添加
protected $except = [ 'checkout/billing', ];