Содержание
Вы можете получить подробную информацию о заказе по его идентификатору (ID), сформировав запрос к API сервиса программными методами.
Запрос передаётся методом POST в формате URLencode на адрес: https://username.expertam.ru/api/getOrderDetails
где username — это логин пользователя в системе, а так же его домен 3-его уровня в сервисе Expertam.
В ответе ваша система получит информацию о счете.
Параметры передаваемые в запросе
данный метод может принимать
1 2 |
bill_id - (int) id счета - обязательный параметр good_info - (bool) добавлять информацию о продуктах |
Если в параметре good_info передать 1 или true, то в информации дополнительно будут выведены данные:
good_ids — id продуктов в счете
good_count — количество продуктов в счете
prepayment_enabled => разрешены ли предоплаты
prepayment_minsum => минимально разрешенная сумма предоплаты.
Как работает
Вы вызываете функцию API getOrderDetails, в ответ ваша система получит результат выполнения функции и массив информации о заказе в переменной result.
Массив информации будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
stdClass Object ( [id] => идентификатор ID (номер) заказа, [first_name] => Имя, [last_name] => Фамилия, [middle_name] => Отчество, [email] => email-адрес, [phone] => телефонный номер, [city] => город заказа (для физических продуктов), [country] => страна, [address] => адрес, [region] => регион, [postalcode] => почтовый индекс, [created] => дата создания счета, [pay_status] => статус оплаты, [paid] => дата оплаты счета, [type] => тип заказа, [payway] => способ оплаты, [comment] => комментарий к заказу, [domain] => домен заказа, [link] => ссылка на страницу оплаты заказа, [good_ids] => id продуктов [good_count] => количество продуктов в счете [price] => стоимость продуктов [bill_sum_topay] => осталось к оплате [prepayment_enabled] => разрешены ли предоплаты [prepayment_minsum] => минимальная сумма предоплаты [tag] => тэг [kupon] => используемый купон [utm] => stdClass Object ( [medium] => утм-параметр канал (если существует) [source] => утм-параметр источник (если существует) [campaign] => утм-параметр кампания (если существует) [content] => утм-параметр объявление (если существует) [term] => утм-параметр ключ (если существует) ) [items] => Array ( [0] => stdClass Object ( [id] => идентификатор продукта [title] => название продукта [sum] => стоимость по факту [price] => стоимость из настроек продукта [pincode] => отправленный пин-код [partners] => Array ( [0] => stdClass Object ( [partner_lvl] => уровень партнерки [partner_id] => id партнера [partner_name] => логин партнера [partner_fee] => вознаграждение партнера ) [1] => stdClass Object ( [partner_lvl] => уровень партнерки [partner_id] => id партнера [partner_name] => логин партнера [partner_fee] => вознаграждение партнера ) ) ) [1] => stdClass Object ( [id] => идентификатор продукта [title] => название продукта [sum] => стоимость по факту [price] => стоимость из настроек продукта [pincode] => отправленный пин-код [partners] => Array ( [0] => stdClass Object ( [partner_lvl] => уровень партнерки [partner_id] => id партнера [partner_name] => логин партнера [partner_fee] => вознаграждение партнера ) [1] => stdClass Object ( [partner_lvl] => уровень партнерки [partner_id] => id партнера [partner_name] => логин партнера [partner_fee] => вознаграждение партнера ) ) ) ) ) |
Ответ кодирован в формате JSON. Подробнее смотрите «Ответы API сервиса«.
Если Вы передавали в функцию CreateOrder параметр bill_domain, то после получения ответа переменная $resr->result[‘link’] будет содержать полную ссылку для оплаты формата https://your-domain.ru/bill/… Иcпользовать её можно будет например так:
1 |
header("Location: " . $resp->result['link']); |
Если Вы не передавали в функцию CreateOrder параметр bill_domain, то после получения ответа Вам необходимо добавить к ссылке протокол и домен:
1 |
header("Location: https://your-domain.ru" . $resp->result['link']); |
Пример на PHP получения информации о счете
В примере получаем инофрмацию по заказу номер 102937.
Функция GetHash — формирует подпись к передаваемым данным.
Функция CheckHash — проверяет подпись к ответу сервиса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
// Логин в системе Expertam $user_rs['user_id'] = 'username'; // Ключ для формирования подписи. см. "Магазин" - "Настройки" - "RussianPostService и API" - "Секретный ключ для подписи" $user_rs['user_rps_key'] = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Формируем массив данных для передачи в API $send_data = array( 'bill_id' => '102937', // ID заказа 'good_info' => true ); // Формируем подпись к передаваемым данным $send_data['hash'] = GetHash($send_data, $user_rs); // Вызываем функцию получения информации о заказе и декодируем полученные данные $resp = json_decode(Send('https://username.expertam.ru/api/getOrderDetails', $send_data)); // проверяем ответ сервиса if(!CheckHash($resp, $user_rs)){ echo "Ошибка! Подпись к ответу не верна!"; print_r($resp); exit; } if($resp->error_code == 0){ echo "Информация о заказе:"; print_r($resp->result); } else echo "Ошибка код:{$resp->error_code} - описание: {$resp->error_text}"; // =========== Функции отправки, получения и обработки ответа ============ // Отправляем запрос в API сервиса function Send($url, $data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // выводим ответ в переменную $res = curl_exec($ch); curl_close($ch); return $res; } // Формируем подпись к передаваемым в API данным function GetHash($params, $user_rs) { $params = http_build_query($params); $user_id = $user_rs['user_id']; $secret = $user_rs['user_rps_key']; $params = "{$params}::{$user_id}::{$secret}"; return md5($params); } // Проверяем полученную подпись к ответу function CheckHash($resp, $user_rs) { $secret = $user_rs['user_rps_key']; $code = $resp->error_code; $text = $resp->error_text; $hash = md5("$code::$text::$secret"); if($hash == $resp->hash) return true; // подпись верна else return false; // подпись не верна } |