philipbrown/merchant

此包已被废弃且不再维护。作者建议使用 philipbrown/basket 包。

电商产品、订单和销售抽象处理

v1.0.0 2014-06-25 18:14 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:29:35 UTC


README

电商产品、订单和销售抽象处理

Build Status

Merchant 是一个用于在电商应用中处理产品、订单和销售的简单抽象。它旨在解决处理多个产品订单及其关联数据的问题,这些数据您需要在客户生命周期中存储和使用。

安装

philipbrown/merchant 添加到 composer.json 的需求中

{
  "require": {
    "philipbrown/merchant": "1.0.*"
  }
}

使用 composer update 更新您的包。

使用

Merchant 的主要目的是通过简单接口存储和组织与订单或销售相关的每个产品的数据,然后找到汇总总数。

区域

由于世界金融规则和法规的碎片化情况,Merchant 被拆分为单独的区域。每个区域都有适用于该区域的具体数据集作为属性。

例如,英格兰表示为

<?php namespace Philipbrown\Merchant\Region;

use Philipbrown\Merchant\AbstractRegion;
use Philipbrown\Merchant\RegionInterface;

class England extends AbstractRegion implements RegionInterface {

  /**
   * @var string
   */
  protected $name = 'England';

  /**
   * @var string
   */
  protected $currency = 'GBP';

  /**
   * @var boolean
   */
  protected $tax = true;

  /**
   * @var integer
   */
  protected $taxRate = 20;

}

如果您想将您的区域添加到 Merchant 中

  • 提交一个拉取请求
  • src\Philipbrown\Merchant\Region 下为您的区域创建一个新的类
  • 确保您的类扩展 AbstractRegion 并实现 RegionInterface

货币和货币单位

在 Merchant 中,货币和货币单位被抽象为 Money。有关完整详细信息、用法和文档,请参阅该存储库。

简要概述

  • 值以整数形式表示,以避免浮点数问题
  • 对象是不可变的
  • 货币详情封装在其自己的类中

创建新的 Merchant 实例

要创建一个新的 Merchant 实例进行工作,只需将您要创建的 Region 传递给 order 方法

$o = Merchant::order('England');

添加产品

将产品添加到您的订单,只需指定一个 SKU 和产品的整数值

$o->add('123', 1000);

税收(如果适用)的值以及正确的 Currency 实例将自动为您处理,这些值来自您在创建 Merchant 实例时指定的 Region

add 方法还接受一个可选的第三个参数,该参数可以是 arrayclosure。第三个参数允许您对产品执行操作,例如设置折扣、使此特定产品免税、免费赠品或设置优惠券

// Using an array
$o->add('456', 1000, array(
  'discount' => 200,
  'coupon' => 'SUMMERSALE2014'
));

// Using a closure
$o->add('789', 1000, function($item){
  $item->taxable(false);
  $item->quantity(10);
});

移除产品

要移除产品,只需将 sku 传递给 remove 方法

$o->remove('456');

更新产品

当您更新产品时,首先删除产品实例,然后用您传递的新数据替换它

// Add product with a discount
$o->add('123', 1000, array(
  'discount' => 200
));

$o->total_value->cents; // 1000
$o->total_discount->cents; // 200

// Update the product to a lower price without a discount
$o->update('123', 800);

$o->total_value->cents; // 800
$o->total_discount->cents; // 200

订单总额

当您添加、更新或从订单中删除产品时,商户将自动计算您需要在数据库中记录并在收据和发票上显示的各种总额。每个总额都是 Money 的一个实例。

$o->add('123', 1000);
$o->add('456', 200, array(
  'freebie' => true
));
$o->add('789', 2000, array(
  'discount' => 500
));
$o->add('101112', 1000, array(
  'taxable' => false
));

// Total value of the products (before freebies/discounts/tax)
$o->total_value->cents; // 4200

// Total discount for all products with discounts
$o->total_discount->cents; // 500

// Total tax for taxable products
$o->total_tax->cents; // 500

// Subtotal of all products (before discounts/tax)
$o->subtotal->cents; // 4000

// Total of all products (including discounts/tax)
$o->total->cents; // 4000

未来开发

目前商户不处理任何在线销售的物理属性。例如,运费、国际运输等。

我没有计划添加这些属性,因为我没有这方面的需求。如果您有,并且想要扩展商户,请随意提交一个Pull Request。

许可

MIT许可 (MIT)

版权(c)2014 Philip Brown

特此授予任何获取本软件及其相关文档文件(以下简称“软件”)副本的人,免费、无限制地使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许向软件提供者提供软件的人进行此类操作,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和不侵犯版权。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他原因,以及与软件或其使用或其他操作有关。