Download the PHP package ddelivery/clientsdk without Composer
On this page you can find all versions of the php package ddelivery/clientsdk. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ddelivery/clientsdk
More information about ddelivery/clientsdk
Files in ddelivery/clientsdk
Package clientsdk
Short Description SDK for quick creation DDelivery client integration
License MIT
Homepage http://ddelivery.ru/
Informations about the package clientsdk
Client SDK DDelivery
Client SDK - SDK для быстрой разработки клиентских решений для сервиса доставки DDelivery.
ПАМ(панель администрирования модулей) - ресурс который организовует работу модуля и взаимодействует с Client SDK и сервисом доставки DDelivery. Client SDK привязывается к ПАМ посредством АПИ ключа, полученном в личном кабинете cabinet.ddelivery.ru. В дальнейшем в ПАМ можно настроить гибкие правила доставки модуля.
SDK ID - индентификатор, получаемый при оформлении доставки через модуль.
DDelivery ID - идентификатор, получаемый при оформлении заявки на доставку сервиса.
Адаптер - класс который организовует выдачу необходимой информации от CMS. От него нужно наследовать свой класс. (для php приложений).
Для разработки решений для систем не использующих PHP, смотрите раздел этой инструкции "Создание модуля через API", а также пункт "5. Вывод модуля доставки на странице оформления доставки"
Структура директорий
application/ Исходники сдк
example/ Пример создания расширения
Создание интеграции
Client SDK содержит все механизмы для работы модуля, необходимо выполнить несколько этапов:
-
Запустить рабочий пример в каталоге example/ .
-
Переопределить методы родительского класса Adapter(пример IntegratorAdapter.php)
-
Учитывая особенность CMS, определить точку входа в модуль, подключить нужные системные скрипты для CMS и вызвать все необходимые методы для работы Client SDK(пример example/ajax.php).
-
Создать локальное хранилище на стороне CMS вызвав метод initStorage класса Business (Далее продумать вызов этого метода при установке модуля в CMS)
-
Привязать апи ключ магазина к ПАМ.
-
Вывести способ доставки на странице оформления заказа CMS(пример index.php). Для этого к этой странице checkout необходимо подключить js файл и вызвать js метод с определенными параметрами и получить SDK ID. При выборе пункта доставки, организовать фильтрацию способов оплаты не поддерживающих наложенны платеж для пунктов доставки, которые его не поддерживают.
-
При окончании оформления заказа (в момент когда цмс вставляет в БД заказ и выбран способ оплаты клиентом) необходимо вызвать метод onCmsOrderFinish класса Business для привязки закза CMS и SDK ID.
-
При сохранении заказа перепроверить валидность данных доставки через метод viewOrder класса Business используя SDK ID.
- При изменении статуса заказа или по какомуто другому событию вызвать метод для отправки заказа (onCmsChangeStatus или cmsSendOrder соответственно) класса Business.
Запуск рабочего примера
Для запуска примера необходимо загрузить сдк в каталог в котором будет находится модуль.
example/IntegratorAdapter.php - класс в котором необходимо переопрелить указанные методы, является связующим звеном между Client SDK и CMS. example/ajax.php - файл который является точкой входа в CMS и запускает на выполнение Client SDK. example/index.php - пример кнопки для открытия модуля на странице оформления заказа. example/delivery.php - пример отправки заказа, и вызова дополнительных методов. example/db.sqlite - хранилище которое использует Client SDK
public function getApiKey(){ return 'api_key'; }
public function isAdmin(){ if($_SESSION['admin'] == 1){ return true; } return false; }
public function getCmsName(){ return "Joomla"; return "Bitrix"; ... }
public function getCmsVersion(){ return '1.1'; }
public function getProductCart(){ return array( array( "id"=>12, "name"=>"Мобильный телефон", "width"=>10, "height"=>10, "length"=>10, "weight"=>1, "price"=>1110, "quantity"=>2, "sku"=>"app2" ), array( ... ); ); }
public function getDiscount(){ return 50; }
array( 'id' => 'status', 'id2' => 'status2', );
public function changeStatus(array $orders){ foreach($orders as $key=>$item){ $query = "UPDATE orders_table_cms SET status_cms=$item WHERE order_id=$key" } }
public function getOrder($id){ return array( 'city' => 'Урюпинск', 'payment' => 22, 'status' => 'Статус', 'sum' => 2200, 'delivery' => 220, ); }
public function getOrders($from, $to){ return array( array( 'city' => 'Урюпинск', 'payment' => 22, 'status' => 'Статус', 'sum' => 2200, 'delivery' => 220, ), array( 'city' => 'г. Москва, Московская область', 'payment' => 'Пример оплаты', 'status' => 'Статус 222', 'sum' => 2100, 'delivery' => 120, ) ); }
public function getUserParams($request){ return array( self::USER_FIELD_STREET => 'Цветаевой', self::USER_FIELD_COMMENT => 'Комментарий', self::USER_FIELD_HOUSE => '2а', self::USER_FIELD_FLAT => '123', self::USER_FIELD_ZIP => '10101' ); }
public function getCmsOrderStatusList(){ return array('10' => 'Завершен', '11' => 'Куплен'); }
public function getCmsPaymentList(){ return array('14' => 'Наличными', '17' => 'Карточкой'); }
public function getCustomSettingsFields(){ return array( array( "title" => "Название (Пример кастомного поля)", "type" => self::FIELD_TYPE_TEXT, "name" => "name", //"items" => getStatusList(), "default" => 0, "data_type" => array("string"), "required" => 1 ), array( "title" => "Выводить способ доставки(Пример кастомного поля)", "type" => self::FIELD_TYPE_CHECKBOX, "name" => "checker", "default" => true, "data_type" => array("int"), "required" => 1 ) ); }
public function getDbConfig(){
return array(
'pdo' => new \PDO('mysql:host=localhost;dbname=ddelivery', 'root', '0', array(\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")),
'prefix' => '',
);
}
public function getAdminDiscount(){
//$this->getDiscount();
}
public function getAdminProductCart(){
//$this->getProductCart();
}
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter));
$container->getUi()->render($_REQUEST);
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness();
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness();
// Создаем хранилища $business->initStorage();
params{ url: 'ajax.php?action=module', width: 550, height: 440, } callbacks = { resize_event:function(data){ // событие при изменению размеров модуля // в объекте data новые размеры }, open: function(){ // Хук на открытие окна; return true; }, change: function(data){ // Хук на окончание оформления заказа и обработка результата; }, close_map: function(data){ // Хук на закрытие карты }, price: function(data){ // хук на получение цены текущей доставки при переключении // и возможность НПП в этом пункте } }; // 'ddelivery_container_place' - идентификатор div-a в котором инициализируется модуль DDeliveryModule.init(params, callbacks, 'ddelivery_container_place');
city: "151184" - id города доставки city_name: "г. Москва" - Город доставки client_price: 281.49 - Цена доставки company: "20" - id компании доставки company_name: "DPD Parcel" - Название компании доставки id: 1198 - SDK ID (не путать с ID заявки на ddelivery.ru) info: "Курьерская доставка, ул. Цветаева, 15, кв. 122, ID компании:20, г. Москва" - описание в виде строки payment_availability: 1 - возможность наложенного платежа point: 0 - id точки to_flat: "122" - квартира to_house: "15" - дом to_street: "Цветаева" - улица type: 2 - тип доставки 1 - Самовывоз, 2 - Курьерка, 3 - Почта
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness(); // $id - id заказа в сдк $business->viewOrder($id)
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness(); //$payment - id способа оплаты //$status - id статуса заказа //$id - id заказа в сдк //$cmsId - id заказа в CMS //$to_name - имя клиента //$to_phone - номер телефона //$to_email - email //$payment_price - наложенный платеж, по умолчанию берется из значения параметра настроек варианта оплаты, //но возможно выставлять и вручную $business->onCmsOrderFinish($sdkId, $cmsId, $payment, $status, $to_name, $to_phone, $to_email, $payment_price = null)
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness(); //$id - id заказа в сдк //$cmsId - id заказа в CMS //$payment - id способа оплаты //$status - id статуса заказа //$to_name - имя клиента //$to_phone - номер телефона //$to_email - email //$payment_price - наложенный платеж, по умолчанию берется из значения параметра настроек варианта оплаты, //но возможно выставлять и вручную $business->onCmsChangeStatus($id, $cmsId, $payment, $status, $to_name, $to_phone, $to_email, $payment_price = null);
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $business = $container->getBusiness(); //$id - id заказа в сдк //$cmsId - id заказа в CMS //$payment - id способа оплаты //$status - id статуса заказа //$to_name - имя клиента //$to_phone - номер телефона //$to_email - email //$payment_price - наложенный платеж, по умолчанию берется из значения параметра настроек варианта оплаты, //но возможно выставлять и вручную $business->cmsSendOrder($id, $cmsId, $payment, $status, $to_name, $to_phone, $to_email, $payment_price = null);
$adapter = new IntegratorAdapter(); $container = new Container(array('adapter' => $adapter)); $container->getSettingStorage()->getParam('param_name');
Создание модуля посредством API
================================
Раздел в процессе разработки