simaland/delivery-calculator

为 sima-land.ru 提供配送计算器


README

Build Status StyleCI

计算配送成本的主要方法是使用 API https://www.sima-land.ru/api/v3/help/#Стоимость-доставки

然而,在某些情况下,更倾向于在不使用 API 的情况下计算配送成本。例如

  • 对 API 的请求次数超出了设定的限制。
  • 所需的工作速度不允许等待 API 的响应。

在上述情况下,建议使用此组件,它允许在“实时”计算配送成本。

计算商品配送成本需要三个实体

为了计算商品配送成本,需要创建一个指定配送点和包装系数的计算器类对象。

$calc = new Calculator($defaultVolumeFactor, $point, false)

第三个参数表示配送点相对于仓库的“本地性”标志。如果 true,则配送对于除那些返回 trueisPaidDeliveryLocal() 方法的商品外,所有商品都是免费的

使用 addItem($item, $qty) 函数将商品添加到配送成本计算中,使用 getResult() 获取结果。要重置结果,请使用 reset()。如果 addItem($item, $qty) 方法出现错误,将返回 false。之后可以使用 getErrors() 方法查看错误信息。

示例

$calc->addItem($item1, 10)
$calc->addItem($item2, 1000)
echo $calc->getResult();  // вывод стоимости доставки item1 10 шт. и item2 1000 шт.

$calc->reset();
$calc->addItem($item3, 1)
echo $calc->getResult(); // вывод стоимости доставки item3 1 шт. 

// $item4->getWeight() = 0
if (!$calc->addItem($item4, 1000)) {
	return $calc->getErrors() // ['Weight must be positive, weight=0']
}

配送点

配送点由实现了 PointInterface 的对象表示,大多数城市的配送数据可以通过 API https://www.sima-land.ru/api/v3/help/#Города-доставки 获取

特殊情况

  • 在莫斯科市的自提点计算配送成本使用 MoscowPointAbstract 类。需要扩展此类,重定义 hasDiscount 方法
  • 在计算在叶卡捷琳堡的配送时,应将“本地性”标志设置为 true

商品

实现 ItemInterface 所需的所有数据可以通过 API https://www.sima-land.ru/api/v3/help/#Товар 获取

包装系数数据

包装系数数据由实现了 VolumeFactorSourceInterface 的对象表示。可以使用预定义的 DefaultVolumeFactorSource 模型实现