Я пытаюсь подключиться к API, который основан на JSON-RPC 2.0. Поскольку я новичок в этом, я не уверен, правильно ли я это кодирую, потому что все, что я получаю, — это ошибка.
Может кто-нибудь дать мне краткое объяснение о том, как подключиться к API в PHP?
<?php
header('Content-Type: application/json');
//check if you have curl loaded
if(!function_exists("curl_init")) die("cURL extension is not installed");
$url = 'xxxxxxxxx';
$data = array(
"operator_id" => "xxxx",
"login" => "xxxx",
"password" => "xxxx",
);
$curl_options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => 0,
CURLOPT_NOBODY => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_ENCODING => 'gzip,deflate',
CURLINFO_HEADER_OUT => true,
);
$ch = curl_init();
curl_setopt_array($ch, $curl_options);
$output = curl_exec($ch);
curl_close($ch);
$arr = json_decode($output,true);
echo ($output);
?>
Ответ, который я получаю, таков: {«jsonrpc»: «2.0», «error»: {«code»: — 32600, «message»: «Недопустимый запрос»}, «id»: null}
Ответ, который я должен получить, если успешный вход в систему: {«jsonrpc»: «2.0», «result»: true, «error»: null, «id»: 1, «ts»: 1368533487}
Вы вообще не отправляете запрос JSON-RPC.
Запрос должен быть телом JSON, поэтому вы должны json_encode данных перед передачей их в CURLOPT_POSTFIELDS.
Размещенный JSON должен иметь ключи method
, params
, id
, а также jsonrpc
(последний должен быть установлен на «2.0»). Ваши данные войдут в params
, id
можно установить на что угодно, но без этого вы вообще не получите ответа.
Это довольно простой формат. Смотрите спецификацию на http://www.jsonrpc.org/specification
Других решений пока нет …