Взаимодействие с сервисом требует авторизации по протоколу OAuth 2.0. Подробнее на https://api-docs.cdek.ru/29923918.html
Для получения токена необходимо отправить POST-запрос:
// Авторизация
$array = array();
$array['grant_type'] = 'client_credentials';
$array['client_id'] = 'CLIENT_ID';
$array['client_secret'] = 'CLIENT_SECRET';
$ch = curl_init('https://api.cdek.ru/v2/oauth/token?parameters');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array, '', '&'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
$access_token = $res['access_token'];
Метод предназначен для создания заказа на доставку товаров до покупателей.
Подробнее на https://api-docs.cdek.ru/29923926.html
Посылка склад-склад
Для выбора ПВЗ можно использовать виджет сдэка.
// Товары в заказе
$prods = array(
array(
'name' => 'Кофе в зернах Bushido Red Katana',
'sku' => '1234',
'price' => '379', // Стоимость
'count' => '1', // кол-во
'weight' => '227', // Вес, гр
'length' => '10', // Длина, см
'width' => '10', // Ширина, см
'height' => '10', // Высота, см
),
);
// Регистрация заявки
$array = array();
$array['type'] = 1; // Договор "интернет-магазин"
$array['tariff_code'] = '136';
$array['number'] = 'НОМЕР_ЗАКАЗА_НА_ВАШЕМ_САЙТЕ';
$array['shipment_point'] = 'КОД_ПВЗ_ОТГРУЗКИ';
$array['delivery_point'] = 'КОД_ПВЗ_ПОЛУЧАТЕЛЯ';
$array['recipient'] = array(
'name' => 'ИМЯ_ПОЛУЧАТЕЛЯ',
'phones' => array(
'number' => 'ТЕЛЕФОН_ПОЛУЧАТЕЛЯ',
),
'address' => 'АДРЕС_ПОЛУЧАТЕЛЯ',
'email' => 'EMAIL_ПОЛУЧАТЕЛЯ',
);
foreach($prods as $i => $row) {
$array['packages'][] = array(
'number' => ++$i,
'weight' => $row['weight'] * $row['count'],
'length' => $row['length'],
'width' => $row['width'],
'height' => $row['height'],
'items' => array(
array(
'name' => $row['name'],
'ware_key' => $row['sku'],
'payment' => array(
'value' => $row['price'],
),
'cost' => $row['price'] * $row['count'],
'weight' => $row['weight'],
'amount' => $row['count'],
)
)
);
}
$array = json_encode($array, JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.cdek.ru/v2/orders');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer ' . $access_token
));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
var_dump($res);
Тариф склад-адрес
// Товары в заказе
$prods = array(
array(
'name' => 'Кофе в зернах Bushido Red Katana',
'sku' => '1234',
'price' => '379', // Стоимость
'count' => '1', // кол-во
'weight' => '227', // Вес, гр
'length' => '10', // Длина, см
'width' => '10', // Ширина, см
'height' => '10', // Высота, см
),
);
// Регистрация заявки
$array = array();
$array['type'] = 1; // Договор "интернет-магазин"
$array['tariff_code'] = '137';
$array['number'] = 'НОМЕР_ЗАКАЗА_НА_ВАШЕМ_САЙТЕ';
$array['shipment_point'] = 'КОД_ПВЗ_ОТГРУЗКИ';
$array['to_location'] = array(
'address' => 'ПОЛНЫЙ_АДРЕС_ПОЛУЧАТЕЛЯ'
);
$array['recipient'] = array(
'name' => 'ИМЯ_ПОЛУЧАТЕЛЯ',
'phones' => array(
'number' => 'ТЕЛЕФОН_ПОЛУЧАТЕЛЯ',
),
'address' => 'АДРЕС_ПОЛУЧАТЕЛЯ',
'email' => 'EMAIL_ПОЛУЧАТЕЛЯ',
);
foreach($prods as $i => $row) {
$array['packages'][] = array(
'number' => ++$i,
'weight' => $row['weight'] * $row['count'],
'length' => $row['length'],
'width' => $row['width'],
'height' => $row['height'],
'items' => array(
array(
'name' => $row['name'],
'ware_key' => $row['sku'],
'payment' => array(
'value' => $row['price'],
),
'cost' => $row['price'],
'weight' => $row['weight'],
'amount' => $row['count'],
)
)
);
}
$array = json_encode($array, JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.cdek.ru/v2/orders');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer ' . $access_token
));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
var_dump($res);
Включение стоимости доставки в счет клиента
В первых двух примерах стоимость доставки оплачивается отправителем, что-бы эту сумму переложить на получателя нужно предварительно узнать стоимость и передать ее в параметре// Товары в заказе
$prods = array(
array(
'name' => 'Кофе в зернах Bushido Red Katana',
'sku' => '1234',
'price' => '379', // Стоимость
'count' => '1', // кол-во
'weight' => '227', // Вес, гр
'length' => '10', // Длина, см
'width' => '10', // Ширина, см
'height' => '10', // Высота, см
),
);
// Стоимость доставки
$array = array();
$array['type'] = 1;
$array['tariff_code'] = '136';
$array['from_location'] = array(
'address' => 'ПОЛНЫЙ_АДРЕС_ОТПРАВИТЕЛЯ'
);
$array['to_location'] = array(
'address' => 'ПОЛНЫЙ_АДРЕС_ПОЛУЧАТЕЛЯ'
);
$sum = 0;
foreach($prods as $i => $row) {
$sum += $row['count'] * $row['price'];
$array['packages'][] = array(
'weight' => $row['weight'] * $row['count'],
'length' => $row['length'],
'width' => $row['width'],
'height' => $row['height'],
);
}
$array['services'] = array(
'code' => 'INSURANCE',
'parameter' => $sum
);
$array = json_encode($array, JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.cdek.ru/v2/calculator/tariff');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
$delivery_sum = $res['total_sum'];
if (!empty($delivery_sum)) {
// Регистрация заявки
$array = array();
$array['type'] = 1;
$array['tariff_code'] = '137';
$array['number'] = 'НОМЕР_ЗАКАЗА_НА_ВАШЕМ_САЙТЕ';
$array['delivery_recipient_cost'] = array(
'value' => $delivery_sum
);
$array['shipment_point'] = 'КОД_ПВЗ_ОТГРУЗКИ';
$array['to_location'] = array(
'address' => 'ПОЛНЫЙ_АДРЕС_ПОЛУЧАТЕЛЯ'
);
$array['recipient'] = array(
'name' => 'ИМЯ_ПОЛУЧАТЕЛЯ',
'phones' => array(
'number' => 'ТЕЛЕФОН_ПОЛУЧАТЕЛЯ',
),
'address' => 'АДРЕС_ПОЛУЧАТЕЛЯ',
'email' => 'EMAIL_ПОЛУЧАТЕЛЯ',
);
foreach($prods as $i => $row) {
$array['packages'][] = array(
'number' => ++$i,
'weight' => $row['weight'] * $row['count'],
'length' => $row['length'],
'width' => $row['width'],
'height' => $row['height'],
'items' => array(
array(
'name' => $row['name'],
'ware_key' => $row['sku'],
'payment' => array(
'value' => $row['price'],
),
'cost' => $row['price'], // Стоимось товарая для страховки
'weight' => $row['weight'],
'amount' => $row['count'],
)
)
);
}
$array = json_encode($array, JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.cdek.ru/v2/orders');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Bearer ' . $access_token));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
var_dump($res);
}
https://api-docs.cdek.ru/29923975.html
$cdek_id = '1234';
$ch = curl_init('https://api.cdek.ru/v2/orders/' . $cdek_id);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer ' . $access_token
));
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
$res = json_decode($html, true);
//var_dump($res);
echo '<p>Номер отправления: ' . $res['entity']['cdek_number'] . '</p>';
echo '<p>Статус: ' . $res['requests'][0]['state'] . '</p>';
echo '<p>' . $res['requests'][0]['errors'][0]['message'] . '</p>';