请求OAuth令牌调查猴子V3时缺少参数



我正在尝试使用curl/php获取"长期活着的访问令牌",但我正在收到错误的" client_id,client_secret,Code,code,grant_type,redirect_uri的丢失参数"。

我要打电话的URL是您可以清楚地看到我要传递的参数!

https://api.surveymonkey.net/oauth/token?client_secret='.urlencode($ client_secret(。redirect_url(。'& client_id ='。urlencode($ client_id(。

我还根据文档使用的是"应用程序/x-www-form-urlenCoded"的内容类型(见下文(。

我的卷曲请求:

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;
}

我要去哪里?

直接从文档中直接获取长期寿命的令牌您需要发布字段:

//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上时,然后作为获取请求参数

您需要将数据字符串放入卷曲的postfields中,并且不要json encode

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;

相关内容

最新更新