Использование Curl в PHP для API битбакета

Я пытаюсь изучить curl в PHP, я попытался реализовать bitbucket API, который имеет следующий синтаксис для аутентификации:

$ curl -X POST -u "client_id:secret" \
  https://bitbucket.org/site/oauth2/access_token -d grant_type=password \
  -d username={username} -d password={password}

Это соответствует документации: https://confluence.atlassian.com/bitbucket/oauth-on-bitbucket-cloud-238027431.html Что при использовании в PHP я сделал примерно так:

$postData = array(
    'grant_type' => 'password',
    'username' => '*******',
    'password' => '**********'
);
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://bitbucket.org/site/oauth2/access_token',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $postData,
));

$response = curl_exec($curl);

Но я получаю сообщение об ошибке

"{"error_description": "Учетные данные клиента отсутствуют; этот запрос должен быть аутентифицирован с использованием идентификатора и секрета клиента OAuth", "error": "unauthorized_client"}"

Я также пытался использовать client_id и secret следующим образом:

$postData = array(
    'grant_type' => 'password',
    'client_id' => '*******',
    'secret' => '**********'
);

Но все равно никакой помощи.


person Nitish Kumar    schedule 13.02.2018    source источник


Ответы (1)


Вам не хватает флага -u, который base-64 кодирует вашу строку "client_id:secret" и устанавливает ее в заголовке Authorization.

Чтобы добиться этого эффекта в PHP, установите параметр CURLOPT_USERPWD.

Подробнее читайте здесь.

person Emile Pels    schedule 13.02.2018