1

Guzzle (6.2) の最新バージョンを学習し、cURL 要求を WHMCS API に変換しようとしています。

次のサンプル コードを使用: 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 を使用したことがある人にとっては、非常に明白な答えである可能性が高いでしょう。

ここでどこが間違っていますか?

4

1 に答える 1

1

urlencoded POST データを送信するには、「form_params」を使用する必要があると思います。

$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
]);
于 2016-04-11T06:24:13.287 に答える