uranum / yii2-delivery-calculator
Yii2 扩展,帮助从聚合的物流服务中获取计算结果
v1.0.5
2020-05-04 07:29 UTC
Requires
- php: ^7.1.0
- yiisoft/yii2: ~2.0.11
Requires (Dev)
- codeception/codeception: ^2.2.3
- codeception/specify: ~0.4.3
- codeception/verify: ~0.3.1
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' ]; }