Не особо силен в php, а с json тем более...Образовалась задача, получить данные с одного сервиса на свой сайт. Мучаюсь уже не первый день, получаю одну и ту же ошибку "no signature". Поддержка на сервисе не бум-бум. Из документации: " Все вызовы API осуществляются по протоколу HTTP, метод POST. Все вызовы API осуществляются по адресу ... Данные передаются в формате JSON в POST переменной "data" Для верификации пользователя все вызовы API должны содержать логин пользователя и сигнатуру. Сигнатура передаётся в POST переменной "signature" и является конкатенацией POST переменной "data" и API KEY пользователя обработанных алгоритмом MD5. Если у вас нет API KEY, запросите его у администратора.(есть) Пример генерации сигнатуры на языка PHP: PHP: $API_KEY = "..."; $data = array(...); $post['data'] = json_encode($data); $post['signature'] = md5($post['data'].$API_KEY); JSON объект, передаваемый в POST переменной "data" всегда должен содержать поля "login" - логин пользователя и "method" - метод API который вызывают." Пример JSON в запросе: Код (Text): {"login":"user1", "method":"checkCard", "type":2, "value":"19384757346343681" } " Собственно мой код PHP: <?php $API_KEY = "XXXXXXXXXXX"; $data = array( "login" => "XXXXXXXXXX", "method" => "loadCardData", "type" => 1, "value" => "А111АА70" ); $post['data'] = json_encode($data); $post['signature'] = md5($post['data'].$API_KEY); $options = array ( 'http' => array ( 'method' => 'POST', 'header' => "Content-Type: application/json; charset=utf-8\r\n", 'content' => $post ) ); $context = stream_context_create($options); echo file_get_contents('https://www.xxx.org/xxx', 0, $context); // Открываем на чтение поток ввода $f = fopen('php://input', 'r'); // Получаем содержимое потока $data = stream_get_contents($f); if ($data) { // Код обработки print_r(json_decode($data)); } ?> В ответ получаю это Код (Text): {"success":false,"data":[],"message":"No signature."} А нужно чтобы было это: Код (Text): { "success":true, "data":{ "mark":"RENAULT", "model":"-(SR)", "yearIssue":"2010", "power":"", "vin":"X7LBSRB1HAH315021", "bodyNumber":"X7LBSRB1HAH315021", "chassisNumber":"", "regNumber":"Р774ВУ190", "lastname":"Матафонова", "firstname":"Светлана", "patronymic":"Николаевна", "docType":"1", "docSeries":"50УВ", "docNumber":"661182", "docIssued":"2010-09-30", "owType":"1", "compName":"", "isForeign":"0", "giver":"РЭП ГИБДД ИСТРИНСКОГО ОВД ", "category":"2", "noload":"1048", "maxWeight":"1536", "fuel":"1", "breaks":"1", "tyres":"Kama", "notes":"0", "comment":"" }, "message":"" Что я делаю не так? Как правильно передать сигнатуру?
В том, то и дело, что рабочих примеров нет. Думал может ошибки какие в коде у меня, поэтому сюда выложил.
Нет, написано только "Данные передаются в формате JSON в POST переменной "data"". А в каком формате еще можно передать json?
Удалил header, но это не помогло. Такое ощущение, что их сервер не принимает данные, а только отправляет - это возможно?