[Из песочницы] PHP библиотека для интеграции с API Новой Почты
Выбираем город отправителя:
$data = new \NovaPoshta\MethodParameters\Address_getCities();
$data->setFindByString('Полтава');
$result = \NovaPoshta\ApiModels\Address::getCities($data);
$citySender = $result->data[0]->Ref;
Выбираем город получателя:
$result = \NovaPoshta\ApiModels\Address::getCities(); // список городов
$cityRecipient = $result->data[60]->Ref;
Выбираем тип контрагента:
$result = \NovaPoshta\ApiModels\Common::getTypesOfCounterparties();
$counterpartyType = $result->data[1]->Ref; // со списка выбираем тип PrivatePerson
Создаем контрагента получателя:
$counterparty = new \NovaPoshta\ApiModels\Counterparty();
$counterparty->setCounterpartyProperty(\NovaPoshta\ApiModels\Counterparty::RECIPIENT);
$counterparty->setCityRef($cityRecipient);
$counterparty->setCounterpartyType($counterpartyType);
$counterparty->setFirstName('Пилипко');
$counterparty->setLastName('Вася');
$counterparty->setMiddleName('Сергеевич');
$counterparty->setPhone('+380661122333');
$counterparty->setEmail('test@i.ua');
$result = $counterparty->save();
$counterpartyRecipient = $result->data[0]->Ref;
Если нет контрагента отправителя в городе Полтава, создаем там контрагента отправителя. Контрагент создастся через несколько минут:
$data = new \NovaPoshta\MethodParameters\Counterparty_cloneLoyaltyCounterpartySender();
$data->setCityRef($citySender);
$result = \NovaPoshta\ApiModels\Counterparty::cloneLoyaltyCounterpartySender($data);
Если у Вас есть контрагент отправитель, то получаем его так же как контрагента получателя, только сюда: setCounterpartyProperty передаем \NovaPoshta\ApiModels\Counterparty: SENDER. Методом cloneLoyaltyCounterpartySender можно использовать только если Вы клиент лояльности, если Вы корпоративный клиент, то у Вас уже должен быть контрагент отправитель в нужном городе.
Теперь получим контрагента отправителя:
$data = new \NovaPoshta\MethodParameters\Counterparty_getCounterparties();
$data->setCityRef($citySender);
$data->setCounterpartyProperty(\NovaPoshta\ApiModels\Counterparty::SENDER);
$result = \NovaPoshta\ApiModels\Counterparty::getCounterparties($data);
$counterpartySender = $result->data[0]->Ref;
Получим контактных персон для контрагентов:
$data = new \NovaPoshta\MethodParameters\Counterparty_getCounterpartyContactPersons();
$data->setRef($counterpartySender);
$result = \NovaPoshta\ApiModels\Counterparty::getCounterpartyContactPersons($data);
$contactPersonSender = $result->data[0]->Ref;
$data = new \NovaPoshta\MethodParameters\Counterparty_getCounterpartyContactPersons();
$data->setRef($counterpartyRecipient);
$result = \NovaPoshta\ApiModels\Counterparty::getCounterpartyContactPersons($data);
$contactPersonRecipient = $result->data[0]->Ref;
Для контрагента отправителя получим склад отправки:
$data = new \NovaPoshta\MethodParameters\Address_getWarehouses();
$data->setCityRef($citySender);
$result = \NovaPoshta\ApiModels\Address::getWarehouses($data);
$addressSender = $result->data[5]->Ref;
Создадим адрес для получателя:
$address = new \NovaPoshta\ApiModels\Address();
$address->setCounterpartyRef($counterpartyRecipient);
$address->setBuildingNumber('2/2');
$address->setFlat('22');
$address->setNote('Первый подъезд');
$address->setStreetRef('c55c9056-4148-11dd-9198-001d60451983');
$result = $address->save();
$addressRecipient = $result->data[0]->Ref;
Теперь получим тип услуги:
$result = \NovaPoshta\ApiModels\Common::getServiceTypes();
$serviceType = $result->data[3]->Ref; // Выбрали: WarehouseDoors
Выбираем плательщика:
$result = \NovaPoshta\ApiModels\Common::getTypesOfPayers();
$payerType = $result->data[1]->Ref; // Выбрали: Recipient
Форму оплаты:
$result = \NovaPoshta\ApiModels\Common::getPaymentForms();
$paymentMethod = $result->data[1]->Ref; // Выбрали: Cash
Тип груза:
$result = \NovaPoshta\ApiModels\Common::getCargoTypes();
$cargoType = $result->data[0]->Ref; // Выбрали: Cargo
Мы выбрали все данные которые нам нужны для создания ЭН. Создаем ЭН:
// Контрагент отправитель
$sender = new \NovaPoshta\Models\CounterpartyContact();
$sender->setCity($citySender)
->setRef($counterpartySender)
->setAddress($addressSender)
->setContact($contactPersonSender)
->setPhone('+380660000000');
// Контрагент получатель
$recipient = new \NovaPoshta\Models\CounterpartyContact();
$recipient->setCity($cityRecipient)
->setRef($counterpartyRecipient)
->setAddress($addressRecipient)
->setContact($contactPersonRecipient)
->setPhone('+380660000000');
// Выбираем тип
$result = \NovaPoshta\ApiModels\Common::getTypesOfPayersForRedelivery();
$redeliveryPayer = $result->data[1]->Ref;
// Выбираем тип обратной доставки
$result = \NovaPoshta\ApiModels\Common::getBackwardDeliveryCargoTypes();
$redeliveryCargoType = $result->data[1]->Ref;
// Обратная доставка ценные бумаги
$backwardDeliveryData = new \NovaPoshta\Models\BackwardDeliveryData();
$backwardDeliveryData->setPayerType($redeliveryPayer);
$backwardDeliveryData->setCargoType($redeliveryCargoType);
$backwardDeliveryData->setRedeliveryString(452);
$internetDocument = new \NovaPoshta\ApiModels\InternetDocument();
$internetDocument->setSender($sender)
->setRecipient($recipient)
->setServiceType($serviceType)
->setPayerType($payerType)
->setPaymentMethod($paymentMethod)
->setCargoType($cargoType)
->setWeight(1)
->setSeatsAmount(1)
->setCost(452)
->setDescription('ТЦ')
->setDateTime('10.09.2015')
->addBackwardDeliveryData($backwardDeliveryData);
$result = $internetDocument->save();
$refInternetDocument = $result->data[0]->Ref;
Получить ссылку на печать ЭН:
$data = new \NovaPoshta\MethodParameters\InternetDocument_printDocument();
$data->addDocumentRef($refInternetDocument);
$data->setCopies(\NovaPoshta\ApiModels\InternetDocument::PRINT_COPIES_FOURFOLD);
$link = \NovaPoshta\ApiModels\InternetDocument::printDocument($data);
После печати ЭН, клеем ЭН на коробку и отправляем груз))