[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема в подключении Робо.Маркета по API
g0tar
Всем привет!

Решил подключить сервис от Робокассы - Робо.Маркет. И столкнулся с двумя небольшими проблемами. Возможно кто-то уже подключал данный сервис, так я надеюсь мне подскажут куда копать.

Начнем по порядку. В настройках Робо.Маркета я выбрал подключение по API и указал для тестирования запросов свой PHP файл.

После добавления товара в корзину в Робо.Маркете сервис отправляет JSON запрос резервации товара (т.е. проверяет есть ли данный товар в "Наличии" в моем магазине)

Мой код:

$postData = file_get_contents('php://input');
$data = json_decode($postData, true);
$secret = 'SecretWord';

$paymentDue = $data['Robomarket']['ReservationRequest']['MinPaymentDue']; // Дата до которой товар должен быть оплачен

$marketOrderId = $data['Robomarket']['ReservationRequest']['OrderId']; // ID заказа в Робо.Маркете

$invoiceId = 'TestOrder-' . $marketOrderId; // Тестовый ID заказа в моем магазине

$reservSucc = array(
'Robomarket' => array(
'ReservationSuccess' => array(
'PaymentDue' => $paymentDue,
'OrderId' => $marketOrderId,
'InvoiceId' => $invoiceId
)
)
);


$sign = md5(bin2hex(json_encode( $reservSucc ).$secret));

header('HTTP/1.1 200 OK');
header('Content-Type: application/json; charset=utf-8');
header('RoboSignature: ' . $sign);


А теперь собственно сами 2 вопроса:

1) В Инструкции сказано (пример приводится для XML Запроса, но для JSON он аналогичный), что:

Цитата

Формируется запрос на резервированиев формате XMLв виде строки:
“<?xml version="1.0" … /Robomarket>”
К строке добавляется секретная фраза Магазина (например, “Robomarket_secret”):
“<?xml version="1.0" … /Robomarket>Robomarket_secret”
Полученный текст кодируется в кодировке UTF-8:
C3F 78 6D 6C 20 76 65 … 74 5F 73 65 63 72 65 74 – это уже последовательность байт, а не строка.


Как мне полученный JSON запрос представить в виде той самой последовательности байт. Я использовал функцию bin2hex(), но что-то мне подсказывает что это не то.

2) Для получения ответа необходимо составить правильные заголовки. По инструкции должно быть следующее:
Цитата

Для обмена данными в формате JSON:
Content-type: application/json
Charset указывать необязательно, он всегда должен быть utf-8. Например,
Content-type: application/xml; charset=utf-8
HTTP Status Code 200
Для правильной работы протокола необходимо, чтобы сервер Магазина отвечал на запросы
Robomarket
 валидным документом, соответствующим схеме (см. схемы документов);
 в выбранном форматеXML/JSON (см. Форматы XML и JSON);
 в кодировке UTF-8 (см. Кодировка запросов и ответов);
 HTTP ответ должен содержать заголовок RoboSignature с валидным значением хэша
документа согласно выбранной хэш-функции и секретной фразы Магазина (см. Подписи
запросов и ответов);
 Ответ должен содержать HTTP Status Code 200. Ответы с другими статус кодами считаются
невалидными.


Заголовки я составил такие. Может что-то пропустил?


$sign = md5(bin2hex(json_encode( $reservSucc ).$secret));

header('HTTP/1.1 200 OK');
header('Content-Type: application/json; charset=utf-8');
header('RoboSignature: ' . $sign);


Буду очень признателен за любые подсказки!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.