Я пытаюсь изучить последнюю версию Guzzle (6.2) и преобразовать мои запросы cURL в API WHMCS.
Используя пример кода из: http://docs.whmcs.com/API:JSON_Sample_Code
// The fully qualified URL to your WHMCS installation root directory
$whmcsUrl = "https://www.yourdomain.com/billing/";
// Admin username and password
$username = "Admin";
$password = "password123";
// Set post values
$postfields = array(
'username' => $username,
'password' => md5($password),
'action' => 'GetClients',
'responsetype' => 'json',
);
// Call the API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $whmcsUrl . 'includes/api.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
$response = curl_exec($ch);
if (curl_error($ch)) {
die('Unable to connect: ' . curl_errno($ch) . ' - ' . curl_error($ch));
}
curl_close($ch);
// Attempt to decode response as json
$jsonData = json_decode($response, true);
// Dump array structure for inspection
var_dump($jsonData);
Я еще не смог понять, как заставить то же самое работать с Guzzle.
Вот что я попробовал:
use GuzzleHttp\Client;
// The fully qualified URL to your WHMCS installation root directory
$whmcsUrl = "https://www.yourdomain.com/billing/";
// Admin username and password
$username = "Admin";
$password = "password123";
$client = new Client([
'base_uri' => $whmcsUrl,
'timeout' => 30,
'auth' => [$username, md5($password)],
'action' => 'GetClients',
'responsetype' => 'json'
]);
$response = $client->request('POST', 'includes/api.php');
echo $response->getStatusCode();
print_r($response,true);
Скорее всего, это будет очень очевидный ответ для тех, кто использовал Guzzle ранее.
Куда я здесь не так?
Я думаю, что вам нужно использовать ‘form_params’ для отправки данных POST в формате Urlen:
$username = "Admin";
$password = "password123";
// Set post values
$postfields = array(
'username' => $username,
'password' => md5($password),
'action' => 'GetClients',
'responsetype' => 'json',
);
$client = new Client([
'base_uri' => 'https://www.yourdomain.com',
'timeout' => 30,
]);
$response = $client->request('POST', '/billing/includes/api.php', [
'form_params' => $postfields
]);
Других решений пока нет …