bozboz/checkout

此包已被弃用且不再维护。未建议替代包。
最新版本(v2.0.0)的此包没有提供许可信息。

v2.0.0 2018-01-30 16:51 UTC

This package is auto-updated.

Last update: 2021-06-04 10:22:43 UTC


README

定义一系列相互连接的屏幕,这些屏幕作为连续过程的一部分连接在一起。

有关实现的示例,请查看以下仓库

  1. http://gitlab.lab/bozboz/finecut
  2. http://gitlab.lab/bozboz/drusillas
  3. http://gitlab.lab/bozboz/benton

设置

  1. 通过在Composer中运行 composer require bozboz/checkout 来要求此包
  2. 在app/config/app.php中添加服务提供者
    Bozboz\Ecommerce\Checkout\Providers\CheckoutServiceProvider::class,
  1. 在app/config/app.php中将Checkout外观添加到别名数组中
    'Checkout' => Bozboz\Ecommerce\Checkout\Facades\Checkout::class,

用法

  1. 使用Checkout外观在app/Http/routes.php中注册新的结账流程
  2. 使用using方法在外观上设置一个存储库。该存储库必须实现Bozboz\Ecommerce\Checkout\CheckoutableRepository接口,其目的是获取可结账实例。实例必须实现Checkoutable接口。(订单包有一个默认实现,用于从会话中获取订单实例,Bozboz\Ecommerce\Orders\OrderRepository)。
  3. 在返回的对象上调用add以添加屏幕。add方法接受4个参数
    1. 屏幕将响应的URL
    2. 要使用的屏幕类(解析IoC容器)
    3. 一个可选的附加标签,用于识别屏幕,主要用于进度条
    4. 路由参数(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',
    ];