unisharp/cart

let buyable item can add to cart

dev-master / 1.0.x-dev 2018-09-26 06:42 UTC

This package is auto-updated.

Last update: 2020-10-06 10:20:30 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

Let buyable item can add to cart, and make order with cart's items, and also provide payment feature.

This package depends on:

Installation

composer require unisharp/cart dev-master

Cart Usages

Use Api

Include api into api.php

Route::group(['prefix' => 'v1'], function () {
    CartManager::route();
});

route lists:

Method Uri Comment
POST api/v1/carts Create the cart
DELETE api/v1/carts/{cart} Delete the cart and cart's items
GET api/v1/carts/{cart} Get the cart and cart's items
PUT api/v1/carts/{cart} Add item(s) to the cart
POST api/v1/carts/{cart} Refresh cart and add item(s) to the cart
DELETE api/v1/carts/{cart}/{item} Remove a item from the cart

Use CartManager

Create a new cart

$cart = CartManager::make();

Get a exist cart

$cart = CartManager::make($cart);

Add item to the cart

$item = new Item([
    'id' => 1,
    '$quantity' => 10,
    'extra' => [
        'comment' => '...'
    ]
]);

$cart->add($item->id, $item->quantity, $item->extra)->save();

Get cart's items

$cart->getCartInstance()->getItems();

Remove item from the cart

$cart->remove($item)->save();

Clean cart's items

$cart->clean();

Destroy the cart

$cart->delete();

Order Usages

Use Api

Include api into api.php

Route::group(['prefix' => 'v1'], function () {
    OrderManager::route();
});

route lists:

Method Uri Comment
POST api/v1/orders Create an order
GET api/v1/orders List all orders
DELETE api/v1/orders/{order} Delete the order
PUT api/v1/orders/{order} Update the order's status, price and shipping_status
GET api/v1/orders/{order} Get the order
DELETE api/v1/orders/{order}/{item} Remove a item from the order
GET api/v1/user/me/order-items Get current user's orders

Use OrderManager

Create an order manager

// Get order manager
$order = OrderManager::make();

// Assign operator
$order->assign(auth()->user());

// Checkout cart's items and buyer and receiver's information
$items = CartManager::make($cart)->getItems();
$information = [
    'buyer' => [],
    'receiver' => [],
    'payment' => 'credit'
];
$order->checkout(items, informations)

Get an exist order

$order = OrderManager::make($order)->getOrderInstance();

Pricing Usages

Both of CartManager and OrderManager already have trait

class CartManager
{
    use CanPricing;
    ...
}

Customize pricing module

use UniSharp\Pricing\Pricing;
use UniSharp\Pricing\ModuleContract;

class CustomPricingModule implements ModuleContract
{
    public function handle(Pricing $pricing, Closure $next)
    {
        ...
        return $next($pricing);
    }

    public function finish(Pricing $pricing)
    {
        ...
    }
}

Set Custom pricing module in config/pricing.php

return [
    'modules' => [
        CustomPricingModule::class
    ],
];

Get pricing

// get original price
$cart->getOriginalPrice();

// get total price
$cart->getPrice();

// get fee
$cart->getFee();

More details on unisharp/pricing

Payment Usages

Set payment gateway config

return [
    'payment' => [
        'driver'         => 'EcPay',
        'merchantId'     => '2000132',
        'hashKey'        => '5294y06JbISpM5x9',
        'hashIV'         => 'v77hoKGq4kWxNNIS',
        'actionUrl'      => 'https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/',
        'returnUrl'      => 'https://localhost/payment/confirm',
        'notifyUrl'      => 'https://localhost/payment/notify',
        'clientBackUrl'  => 'https://localhost/payment/return',
        'paymentInfoUrl' => 'https://localhost/payment/information' 
    ],
]

Set api into api.php

// Include payment api
Route::group(['prefix' => 'v1'], function () {
    OrderManager::route();
});

// Implement payment response url
Route::group(['prefix' => 'v1/payment'], function () {
    Route::get('confirm', function () {...});
    Route::get('notify', function () {...});
    Route::get('return', function () {...});
    Route::get('information', function () {...});
});
Method Uri Comment
GET api/v1/orders/{order}/pay Call payment
GET api/v1/payment/confirm Payment completed url
GET api/v1/payment/notify Notify url
GET api/v1/payment/return Client back url
GET api/v1/payment/information Payment Information url