Как получить токен доступа с использованием последней (альфа) версии API FreshBooks

Я хочу получить токен доступа. Я использовал следующий код, такой же, как в документации к последней версии FreshBooks, но он выдает ошибку.

if(!empty($_GET['code']) && isset($_GET['code']))
{
$code=$_GET['code'];
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.freshbooks.com/auth/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING  => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT   => 30,

CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array(
"grant_type"    => "authorization_code",
"client_secret" => "xxxxxxxx",
"code"          => $_GET['code'],
"client_id"     => " xxxxxxx",
"redirect_uri"  => "https://localhost/test2.php"),
CURLOPT_HTTPHEADER => array(
"api-version: alpha",
"cache-control: no-cache",
"content-type: application/json",
"postman-token: 471a0741-8466-2e3f-0006-8b9c3794ef9d"),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
}

Это дает мне следующий ответ:

400 ошибка неверный запрос param.

Какие-либо решения?

0

Решение

Я думаю, что вы сгенерировали этот фрагмент php с помощью почтальона, вы можете сослаться на мой код

public function fobOath($code)
{
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.freshbooks.com/auth/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "grant_type=authorization_code&client_secret=<your_client_secret>&code=<your_code>&client_id=<your_client_id>&redirect_uri=<your_callback_address>",
CURLOPT_HTTPHEADER => array(
"api-version: alpha",
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded"),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}

}
0

Другие решения

У меня была та же проблема, и я решил ее после экранирования строки JSON.

Попробуй это

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.freshbooks.com/auth/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\n    \"grant_type\": \"authorization_code\",\n    \"client_secret\": \"Your client secret\",\n    \"code\": \"your code\",\n    \"client_id\": \"your client id\",\n    \"redirect_uri\": \"https://www.yoururl.com/redirect\"\n}",
CURLOPT_HTTPHEADER => array(
"api-version: alpha",
"cache-control: no-cache",
"content-type: application/json"),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
0

По вопросам рекламы [email protected]