Я довольно новичок в ZF2, и я хотел создать приложение, использующее внешний API. Я успешно создал метод отправки запросов в random.org API, но в ответ он отправляет мне сообщение об ошибке, связанную с разбором. Я понятия не имею, что я делаю неправильно, и как улучшить мой метод для получения правильных данных в ответ.
Вот мой метод, используемый для отправки запроса (я намеренно изменил ключ api, и в моем приложении я использую соответствующий):
public function makeRequest() { $data = array( 'jsonrpc' => '2.0', 'method' => 'generateIntegers', 'params' => array( 'apiKey' => '00000000-0000-0000-0000-000000000000', 'n' => 10, 'min' => 1, 'max' => 10, 'replacement' => true, "base" => 10), 'id' => 23866, ); $client = new Client('https://api.random.org/json-rpc/1/invoke', array( 'adapter' => 'Zend\Http\Client\Adapter\Curl' )); $client->setEncType(Client::ENC_FORMDATA); $request = new Request(); $request->setUri('https://api.random.org/json-rpc/1/invoke'); $request->setMethod('POST'); $request->getPost()->fromString(json_encode($data)); $response = $client->send($request); return $response; }
И вот содержание ответа:
["content":protected]=> string(87) "{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":null},"id":null}
из ZF2 Request Reference вы можете найти setContent()
, можете ли вы попробовать это вместо getPost()->fromString()
?
public function makeRequest() { $data = array( 'jsonrpc' => '2.0', 'method' => 'generateIntegers', 'params' => array( 'apiKey' => '00000000-0000-0000-0000-000000000000', 'n' => 10, 'min' => 1, 'max' => 10, 'replacement' => true, "base" => 10), 'id' => 23866, ); $client = new Client('https://api.random.org/json-rpc/1/invoke', array( 'adapter' => 'Zend\Http\Client\Adapter\Curl' )); $client->setEncType(Client::ENC_FORMDATA); $request = new Request(); $request->setUri('https://api.random.org/json-rpc/1/invoke'); $request->setMethod('POST'); //$request->getPost()->fromString(json_encode($data)); $request->setContent(json_encode($data)); $response = $client->send($request); return $response; }