Salesforce RestAPI с использованием PHP Guzzle может аутентифицировать, но не может сделать запрос - PullRequest
0 голосов
/ 03 ноября 2019

Я использую php Guzzle для аутентификации в песочнице salesforce, используя приведенный ниже скрипт. Аутентификация работает, и я получаю токен от Salesforce, однако, когда я делаю следующий вызов $response = $client->request()->get('services/data/v45.0/sobjects/Account/describe

, я получаю ошибку Missing argument 1 for GuzzleHttp\Client::request() on line 59, которая является запросом () -> get. Кажется, что это не удалось, и я не могу решить его. Если я попробую это с PostMan API-клиентом и верстаком, и это работает без каких-либо проблем. Спасибо за любую помощь заранее.

require 'vendor/autoload.php';

use GuzzleHttp\{Client, RequestOptions};

$apiCredentials = [
    'client_id' => 'myclientid',
    'client_secret' => 'myclientsecret',
    'security_token' => 'mysecuritytoken',
];
$userCredentials = [
    'username' => 'my@domain.com.sandbox1',
    'password' => 'mypassword',
];

$client = new Client(['base_uri' => 'https://test.salesforce.com/']);
try {
    $response = $client->post('services/oauth2/token', [
        RequestOptions::FORM_PARAMS => [
            'grant_type' => 'password',
            'client_id' => $apiCredentials['client_id'],
            'client_secret' => $apiCredentials['client_secret'],
            'username' => $userCredentials['username'],
            'password' => $userCredentials['password'] . $apiCredentials['security_token'],
        ]
    ]);

    $data = json_decode($response->getBody());
    print_r($data);
    echo '<hr>';
} catch (\Exception $exception) {;
    echo 'Unable to connect to Salesforce';
}


$hash = hash_hmac(
    'sha256', 
    $data->id . $data->issued_at, 
    $apiCredentials['client_secret'], 
    true
);
if (base64_encode($hash) !== $data->signature) {
    echo 'Access token is invalid';
}
$accessToken = $data->access_token; // Valid access token


try {
    $response = $client->request()->get('services/data/v45.0/sobjects/Account/describe', [
        RequestOptions::HEADERS => [
            'Authorization' => 'Bearer ' . $accessToken,
            'X-PrettyPrint' => 1,
        ],
    ]);
} catch (\Exception $exception) {
    echo '<hr>Unable to describe Account object<hr>';
}


$accountObject = json_decode($response->getBody());

print_r($accountObject);

1 Ответ

0 голосов
/ 04 ноября 2019

Вы смешиваете конструкцию клиента и стили запроса. Это работает:

$client = new Client(...);
$client->get('services/data/...');

, и это также работает:

$client = new Client(...);
$client->request('GET', 'services/data/...');
...