Інтеграція 1С-Бітрікс зі службою доставки Boxberry (Білорусь)
Boxberry працює в Білорусі через партнерську мережу пунктів видачі. API ідентичне російському Boxberry — той самий єдиний ендпоінт https://api.boxberry.ru/json.php, ті самі методи. Відмінності: токен видається білоруським офісом, список ПВЗ фільтрується по країні, тарифи інші.
Особливості білоруської інтеграції
Токен для роботи в Білорусі отримується окремо — не можна використовувати російський токен для білоруських ПВЗ. При запиті списку ПВЗ необхідно фільтрувати по країні:
public function getBelarusPoints(): array
{
$cacheKey = 'boxberry_pvz_by';
$cached = \Bitrix\Main\Data\Cache::createInstance();
if ($cached->startDataCache(3600 * 12, $cacheKey, '/boxberry')) {
$url = 'https://api.boxberry.ru/json.php?' . http_build_query([
'token' => $this->getOption('BY_TOKEN'),
'method' => 'ListPoints',
'prepaid' => 1,
'CityCode' => '', // всі міста Білорусі
]);
$points = json_decode(file_get_contents($url), true) ?? [];
// Фільтруємо тільки білоруські ПВЗ
$byPoints = array_filter($points, fn($p) => ($p['CountryCode'] ?? '') === 'BY');
$cached->endDataCache(['points' => array_values($byPoints)]);
}
return $cached->getVars()['points'];
}
Якщо API не повертає поле CountryCode, фільтрація по містах — список білоруських міст у конфігу модуля.
Розрахунок вартості
public function calcCostBelarus(
string $pvzCode,
int $weightGram,
float $orderSum
): float {
$url = 'https://api.boxberry.ru/json.php?' . http_build_query([
'token' => $this->getOption('BY_TOKEN'),
'method' => 'DeliveryCosts',
'zip' => $pvzCode,
'weight' => $weightGram,
'ordersum' => $orderSum,
'targetstart' => $this->getOption('BY_FROM_POINT'), // точка відправки в Білорусі
]);
$response = json_decode(file_get_contents($url), true);
if (!empty($response['err'])) {
return 0;
}
return (float)($response['price'] ?? 0);
}
Вартість повертається в білоруських рублях при використанні білоруського токена.
Клас служби доставки
class BoxberryByDelivery extends \Bitrix\Sale\Delivery\Services\Base
{
protected static function getClassTitle(): string
{
return 'Boxberry (Білорусь)';
}
protected function calculateConcrete(
\Bitrix\Sale\Shipment $shipment
): \Bitrix\Sale\Delivery\CalculationResult {
$result = new \Bitrix\Sale\Delivery\CalculationResult();
$pvzCode = $this->getSelectedPvzCode($shipment);
if (!$pvzCode) {
$result->addError(new \Bitrix\Main\Error('Оберіть пункт видачі'));
return $result;
}
$cost = $this->calcCostBelarus(
$pvzCode,
$this->getWeight($shipment),
$shipment->getOrder()->getPrice()
);
if ($cost > 0) {
$result->setDeliveryPrice($cost);
} else {
$result->addError(new \Bitrix\Main\Error('Доставка недоступна'));
}
return $result;
}
}
Якщо магазин працює і в Росії, і в Білорусі — створюються два окремі класи служб доставки: BoxberryRuDelivery та BoxberryByDelivery з різними токенами і точками відправки.
Створення відправлення в Білорусі
public function createParselBelarus(\Bitrix\Sale\Shipment $shipment): string
{
$order = $shipment->getOrder();
$props = $order->getPropertyCollection();
$parselData = [
'token' => $this->getOption('BY_TOKEN'),
'method' => 'ParselCreate',
'senderName' => $this->getOption('SENDER_NAME'),
'weight' => $this->getWeight($shipment),
'price' => $order->getPrice(),
'delivery_sum' => $shipment->getPrice(),
'vid' => 1,
'PVZ' => $props->getItemByOrderPropertyCode('BOXBERRY_BY_PVZ')?->getValue(),
'customerName' => $props->getItemByOrderPropertyCode('FIO')?->getValue(),
'customerPhone' => $props->getItemByOrderPropertyCode('PHONE')?->getValue(),
'customerEmail' => $props->getItemByOrderPropertyCode('EMAIL')?->getValue(),
'items' => $this->buildItems($order),
];
$response = $this->apiPost('https://api.boxberry.ru/json.php', $parselData);
return $response['track'] ?? '';
}
Віджет вибору ПВЗ
Той самий JavaScript-віджет Boxberry, але з білоруським токеном і обмеженням по країні:
boxberry.open(function(result) {
if (result && result.id) {
document.getElementById('boxberry_by_pvz').value = result.id;
document.getElementById('boxberry_by_pvz_name').value = result.name;
}
}, 'BY_TOKEN', 'Минск', '', 0, 'e');
Трекінг
Метод ParselCheck працює з білоруським токеном ідентично російському. Polling агентом раз на 2–3 години.
Терміни
| Склад | Термін |
|---|---|
| Окреме налаштування (є рос. інтеграція) | 1–2 дні |
| Повна інтеграція з нуля | 4–5 днів |
| + Трекінг + віджет ПВЗ | +2 дні |







