uranum/yii2-delivery-calculator

Yii2 扩展,帮助从聚合的物流服务中获取计算结果

v1.0.5 2020-05-04 07:29 UTC

This package is auto-updated.

Last update: 2024-09-04 17:00:22 UTC


README

Yii2 扩展,帮助从聚合的物流服务中获取计算结果

正在开发中...

安装

安装此扩展的首选方式是通过 composer

运行以下命令之一

php composer.phar require --prefer-dist uranum/yii2-delivery-calculator

或者

"uranum/yii2-delivery-calculator": "*"

将以下内容添加到您的 composer.json 文件的 require 部分。

配置模块

迁移(用于在管理后台创建物流模块)

应用迁移 yii migrate --migrationPath=@uranum/delivery/migration

必须!设置物流服务

'modules'             => [
		'delivery' => [
			'class' => 'uranum\delivery\module\Module',
			'params' => [...],
            'components'             => [
                $code['POST']       => [
                    'class' => 'uranum\delivery\services\PostDelivery',
                ],
                $code['NALOJ']      => [
                    'class' => 'uranum\delivery\services\PostNalojDelivery',
                ],
                $code['CDEK_STORE'] => [
                    'class' => 'uranum\delivery\services\CdekStore',
                ],
                $code['CDEK_DOOR']  => [
                    'class' => 'uranum\delivery\services\CdekDoor',
                ],
                $code['COURIER']    => [
                    'class' => 'uranum\delivery\services\CourierDelivery',
                ],
                $code['PICKUP']     => [
                    'class' => 'uranum\delivery\services\PickupDelivery',
                ],
                $code['ENERGY']     => [
                    'class' => 'uranum\delivery\services\EnergyDelivery',
                ],
                $code['ON_CHOICE']     => [
                    'class' => 'uranum\delivery\services\OnChoiceDelivery',
                ],
            ],
        ],
]

postcalc 设置参数

'modules'             => [
		'delivery' => [
			'class' => 'uranum\delivery\module\Module',
		    'params' => [
			    'locationFrom' => 'Новосибирск',        // Город отправки
			    /** Параметры для postcalc (Почта России) */
			    'siteName'     => 'site.ru',            // Название сайта (ОБЯЗАТЕЛЬНЫЙ)
			    'key'          => 'domen-XXXXX',        // ключ для доступа к API (ОБЯЗАТЕЛЬНЫЙ c 25 декабря 2019 года)
			    'email'        => 'your@mail.ru',       // Контактный email. Самый принципиальный параметр для postcalc (ОБЯЗАТЕЛЬНЫЙ)
			    'contactName'  => 'Eugeny_Emelyanov',   // Контактное лицо. Имя_фамилия, только латиница через подчеркивание (НЕобязательный)
			    'insurance'    => 'f',                  // База страховки - полная f или частичная p (НЕобязательный)
			    'round'        => 1,                    // Округление вверх. 0.01 - округление до копеек, 1 - до рублей (НЕобязательный)
			    'pr'           => 0,                    // Наценка в рублях за обработку заказа (НЕобязательный)
			    'pk'           => 0,                    // Наценка в рублях за упаковку одного отправления (НЕобязательный)
			    'encode'       => 'utf-8',              // Кодировка - utf-8 или windows-1251 (НЕобязательный)
			    'sendDate'     => 'now',                // Дата - в формате, который понимает strtotime(), например, '+7days','10.10.2020' (НЕобязательный)
			    'respFormat'   => 'json',               // Формат ответа (html, php, arr, wddx, json, plain) (НЕобязательный)
			    'country'      => 'Ru',                 // Страна (список стран: http://postcalc.ru/countries.php) (НЕобязательный)
			    'servers'      => [
				    //'api.postcalc.ru',                // После тестовых запросов включить "боевой" сервер (ОБЯЗАТЕЛЬНО)
				    'test.postcalc.ru',
			    ],                                      // Список серверов для беcплатной версии (ОБЯЗАТЕЛЬНЫЙ)
			    'httpOptions'  => [
				    'http' => [
					    'header'     => 'Accept-Encoding: gzip',
					    'timeout'    => 5,              // Время ожидания ответа сервера в секундах
					    'user_agent' => 'PostcalcLight_1.04 ' . phpversion(),
				    ],
			    ],                                      // Опции запроса (НЕобязательный)
		    ]
		],
	],

使用示例

$services    = Yii::$app->getModule('delivery')->getComponents();
$data        = new DeliveryCargoData(659300, 'Бийск', 2000, 1000, 275); // zip, locationTo, cartCost, weight, innerCode (own carrier code)
$resultArray = new DeliveryCalculator($data, $services);
VarDumper::dump($resultArray->calculate());

结果是

[
    0 => [
        'name' => 'Почта России'
        'terms' => '9-13 дн.'
        'cost' => '314.60'
        'info' => null
    ]
    1 => [
        'name' => 'Почта России наложенным'
        'terms' => '9-13 дн.'
        'cost' => 487.18
        'info' => null
    ]
    2 => false
    3 => [
        'name' => 'Самовывоз'
        'terms' => false
        'cost' => 0
        'info' => 'Самостоятельно забираете в офисе.'
    ]
]

在 src/services 文件夹中有从 YiiModuleDelivery 继承的示例,可以创建自己的类,也可以从 YiiModuleDelivery 继承并实现自己的 calculate() 方法,其中包含自己的计算逻辑(或通过 API 获取计算数据)。

创建新的物流服务

  • 创建迁移,添加新的物流(请参阅 migration 文件夹中的示例 - InitialDeliveryServices)
  • 创建一个新的类 NewDeliveryService,继承自 YiiModuleDelivery,它将返回计算数据数组(请参阅 services 文件夹中的示例)
  • 如果需要特殊的计算(例如,通过 API),则创建一个 NewDeliveryCalc 类,它应该返回计算结果
  • 在配置文件中添加创建的物流,在 components 部分
'components' => [
        // ...
        'field_code_of_new_delivery' => [
            'class' => 'my\extended\class\NewDeliveryService',
        ],
    ],

创建自己的控制器

如果需要设置自己的物流控制器权限,请执行以下操作

  • 在管理后台创建自己的控制器,继承自 \uranum\delivery\module\controllers\DeliveryController
  • 在这个控制器中创建自己的过滤器和行为(access,verbs)
  • 创建自己的视图(index,create,update)或
  • 从扩展中添加视图,添加 init() 方法并添加以下代码
public function init()
{
    $this->module->setViewPath('@uranum/delivery/module/views');
    \Yii::$app->i18n->translations['module'] = [
        'class'          => 'yii\i18n\PhpMessageSource',
        'sourceLanguage' => 'en-US',
        'basePath'       => '@vendor/uranum/yii2-delivery-calculator/src/module/messages'
    ];
}