wpdesk/abstract-shipping
Composer 安装命令:
composer require wpdesk/abstract-shipping
包简介
Abstract Shipping
README 文档
README
Abstract Shipping
A library containing interfaces, abstracts and basic implementations to be used for WordPress/WooCommerce shipping plugins.
Requirements
PHP 7.0 or later.
Installation via Composer
In order to install the bindings via Composer run the following command:
composer require wpdesk/abstract-shipping
Example usage
Creating a shipment from WooCommerce cart contents
/**
* Build raw shipping data from WooCommerce
*
* @package WPDesk\ShippingBuilder
*/
class WooCommerceShippingBuilder {
/**
* Sender address
*
* @var AddressProvider
*/
private $sender_address;
/**
* Sender address
*
* @var AddressProvider
*/
private $receiver_address;
/**
* WooCommerce Package
*
* @var array
*/
protected $package;
/**
* Dimension unit.
*
* @var string
*/
private $dimension_unit;
/**
* Weight unit.
*
* @var string
*/
private $weight_unit;
/**
* Currency for items.
*
* @var string
*/
protected $currency;
/**
* Rounding precision.
*
* @var int
*/
private $rounding_precision;
/**
* @param AddressProvider $sender_address Sender address.
*/
public function set_sender_address( AddressProvider $sender_address ) {
$this->sender_address = $sender_address;
}
/**
* @param AddressProvider $receiver_address Receiver address.
*/
public function set_receiver_address( AddressProvider $receiver_address ) {
$this->receiver_address = $receiver_address;
}
/**
* @param string $dimension_unit Dimension unit.
*/
public function set_dimension_unit( $dimension_unit ) {
$this->dimension_unit = $dimension_unit;
}
/**
* @param string $weight_unit Weight unit.
*/
public function set_weight_unit( $weight_unit ) {
$this->weight_unit = $weight_unit;
}
/**
* @param string $currency Currency for items.
*/
public function set_currency( $currency ) {
$this->currency = $currency;
}
/**
* @param int $rounding_precision Rounding precision.
*/
public function set_rounding_precision( $rounding_precision ) {
$this->rounding_precision = $rounding_precision;
}
/**
* Sets WooCommerce Package to build.
*
* @param array $package Package.
*/
public function set_woocommerce_package( array $package ) {
$this->package = $package;
}
/**
* Returns WooCommerce package that is used to build shipment.
*
* @return array
*
* @deprecated Try not to use it. Better use built shipment.
*/
public function get_woocommerce_package() {
return $this->package;
}
/**
* Get dimension unit.
*
* @return string
*/
protected function get_woocommerce_dimension_unit() {
switch ( $this->dimension_unit ) {
case 'mm':
return Dimensions::DIMENSION_UNIT_MM;
case 'cm':
return Dimensions::DIMENSION_UNIT_CM;
case 'm':
return Dimensions::DIMENSION_UNIT_M;
case 'in':
return Dimensions::DIMENSION_UNIT_IN;
}
return $this->dimension_unit;
}
/**
* Get weight unit.
*
* @return string
*/
protected function get_woocommerce_weight_unit() {
switch ( $this->weight_unit ) {
case 'g':
return Weight::WEIGHT_UNIT_G;
case 'kg':
return Weight::WEIGHT_UNIT_KG;
case 'lb':
return Weight::WEIGHT_UNIT_LB;
}
return $this->weight_unit;
}
/**
* Get weight.
*
* @param array $package_item Package item.
*
* @return \WPDesk\AbstractShipping\Shipment\Weight
*/
protected function get_weight( $package_item ) {
$weight = new Weight();
$weight->weight = floatval( $package_item['data']->get_weight() );
$weight->weight_unit = $this->get_woocommerce_weight_unit();
return $weight;
}
/**
* Get item name.
*
* @param \WC_Product $package_item_data .
*
* @return string
*/
private function get_item_name( $package_item_data ) {
return $package_item_data->get_name();
}
/**
* Add package items.
*
* @param array $package_item Package item.
*
* @return Item
*/
protected function add_package_item( $package_item ) {
$item = new Item();
$item->name = $this->get_item_name( $package_item['data'] );
$item->dimensions = $this->get_dimensions( $package_item );
$item->weight = $this->get_weight( $package_item );
$item->declared_value = new Money();
$item->declared_value->amount = round( $package_item['line_total'] / $package_item['quantity'],
$this->rounding_precision );
$item->declared_value->currency = $this->currency;
return $item;
}
/**
* Get dimension.
*
* @param array $package_item Package item.
*
* @return \WPDesk\AbstractShipping\Shipment\Dimensions
*/
protected function get_dimensions( $package_item ) {
$dimension = new Dimensions();
$dimension->dimensions_unit = $this->get_woocommerce_dimension_unit();
$dimension->length = $package_item['data']->get_length();
$dimension->width = $package_item['data']->get_width();
$dimension->height = $package_item['data']->get_height();
return $dimension;
}
/**
* Get package.
*
* @return Package[]
*/
protected function get_packages() {
$shipping_package = new Package();
$shipping_package->items = [];
$package_weight = new Weight();
$package_weight->weight_unit = $this->get_woocommerce_weight_unit();
$package_weight->weight = 0.0;
foreach ( $this->package['contents'] as $item ) {
for ( $i = 0; $i < $item['quantity']; $i ++ ) {
$shipping_item = $this->add_package_item( $item );
$package_weight->weight += $shipping_item->weight->weight;
$shipping_package->items[] = $shipping_item;
}
}
$shipping_package->weight = $package_weight;
return [ $shipping_package ];
}
/**
* Return shipping. To work correctly you have set all the required elements trough setters.
*
* @return \WPDesk\AbstractShipping\Shipment\Shipment;
*/
public function build_shipment() {
$shipment = new Shipment();
$ship_from = new Client();
$ship_from->address = $this->sender_address->get_address();
$ship_to = new Client();
$ship_to->address = $this->receiver_address->get_address();
$shipment->ship_from = $ship_from;
$shipment->ship_to = $ship_to;
$shipment->packages = $this->get_packages();
return $shipment;
}
}
$packages = WC()->cart->get_shipping_packages();
foreach ( $packeges as $package ) {
$shipping_builder = new WooCommerceShippingBuilder();
$shipping_builder->set_woocommerce_package( $package );
print_r( $shiping_builder->build_shipment() );
}
wpdesk/abstract-shipping 适用场景与选型建议
wpdesk/abstract-shipping 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 26.47k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2019 年 11 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「wordpress」 「shipping」 「woocommerce」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 wpdesk/abstract-shipping 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 wpdesk/abstract-shipping 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 wpdesk/abstract-shipping 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP SDK for the Parcel Monkey UK API
PHP wrapper for DPD Germany SOAP API
Metamel Addresses is a polymorphic Laravel package, for address book management. You can add addresses to any eloquent model with ease.
A PHP (and Laravel) package to interface with the Snipcart api.
Paytrail is a payment gateway that offers 20+ payment methods for Finnish customers.
WooCommerce Rest API with Laravel
统计信息
- 总下载量: 26.47k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 16
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-11-13