基于JSON-RPC 2.0的API问题

时间:2015-09-29 15:04:59

标签: php json api json-rpc

我正在尝试连接到基于JSON-RPC 2.0的API。由于我是新手,我不确定我是否正确编码,因为我收到的只是一个错误。

有人能给我一个关于如何在PHP中连接API的简要说明吗?

<?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);
?>

我收到的回复是:{&#34; jsonrpc&#34;:&#34; 2.0&#34;,&#34;错误&#34;:{&#34;代码&#34;: -32600,&#34;消息&#34;:&#34;无效请求&#34;},&#34; id&#34;:null}

如果登录成功,我应该收到回复:{&#34; jsonrpc&#34;:&#34; 2.0&#34;,&#34;结果&#34;:true,&#34;错误& #34;:空,&#34; ID&#34;:1,&#34; TS&#34;:1368533487}

1 个答案:

答案 0 :(得分:2)

您根本没有发送JSON-RPC请求。

请求必须是JSON主体,因此在将数据传递给CURLOPT_POSTFIELDS之前必须对数据进行json_encode。

发布的json必须包含密钥methodparamsidjsonrpc(最后一个应设置为“2.0”)。您的数据将进入paramsid可以设置为任何值,但如果没有它,则根本不应该得到响应。

这是一种非常简单的格式。请参阅http://www.jsonrpc.org/specification

中的规范