Отсутствуют параметры при запросе OAUTH token survey monkey v3

Я пытаюсь получить свой «маркер доступа с длительным сроком действия», используя CURL / PHP, но получаю ошибку «Отсутствуют параметры для client_id, client_secret, code, grant_type, redirect_uri».

URL-адрес, по которому я звоню, позволяет четко увидеть параметры, которые я пытаюсь передать!

https://api.surveymonkey.net/oauth/token?client_secret=‘.Urlencode ($ client_secret).&код = ‘. UrlEncode ($ short_token).&redirect_uri = ‘. UrlEncode ($ REDIRECT_URL).&client_id = ‘. UrlEncode ($ client_id).&grant_type = authorization_code

Я также использую тип контента «application / x-www-form-urlencoded» согласно документации (см. Ниже).

Мой запрос CURL:

function survey_monkey_curl_request($url, $params=[], $request_type = 'get', $access_token) {

print_r($url);

$ch = curl_init();

$headers = [
"Content-Type: application/x-www-form-urlencoded",
"Authorization: bearer " .$access_token
];
$opts = [
CURLOPT_URL => $url,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => 0,
];
if ($request_type == 'post') {
$opts[CURLOPT_POST] = 1;
//$opts[CURLOPT_POSTFIELDS] = json_encode($params);
}
if ($request_type == 'patch') {
$opts[CURLOPT_CUSTOMREQUEST] = "PATCH";
$opts[CURLOPT_POSTFIELDS] = json_encode($params);
}
curl_setopt_array($ch, $opts);
$result = curl_exec($ch);

if ($result === false)  {
curl_close($ch);
throw new Exception(curl_error($ch));
}
curl_close($ch);
return $result;
}

Куда я иду не так?

0

Решение

Из документации видно, что вы получите долгоживущий токен, необходимый для публикации ваших полей:

//Exchange for long-lived token

curl -i -X POST https://api.surveymonkey.net/oauth/token -d \
"client_secret=YOUR_CLIENT_SECRET \
&code=AUTH_CODE \
&redirect_uri=YOUR_REDIRECT_URI \
&client_id=YOUR_CLIENT_ID \
&grant_type=authorization_code"

https://developer.surveymonkey.com/api/v3/?shell#new-authentication

Когда вы добавляете свои параметры в ваш URL, вы отправляете их как параметры запроса GET.

Вам нужно поместить вашу строку данных в CURL POSTFIELDS и не кодировать JSON

Ответ PHP

<?php

$ch = curl_init();

$data = [
'client_secret' => $YOUR_CLIENT_SECRET,
'code' => $AUTH_CODE,
'redirect_url' => $YOUR_REDIRECT_URI,
'client_id' => $YOUR_CLIENT_ID,
'grant_type' => 'authorization_code'
];//set your data as an array

$headers = [
"Content-Type: application/x-www-form-urlencoded",
"Authorization: bearer " . $access_token
];
$opts = [
CURLOPT_URL => $url,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => 0,
];
if ($request_type == 'post') {
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = http_build_query($data);// this will build your data string from the array
}

curl_setopt_array($ch, $opts);
$result = curl_exec($ch);
curl_close($ch);
return $result;
2

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

Других решений пока нет …

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