Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 请求OAUTH令牌调查时缺少参数_Php_Oauth 2.0_Surveymonkey - Fatal编程技术网

Php 请求OAUTH令牌调查时缺少参数

Php 请求OAUTH令牌调查时缺少参数,php,oauth-2.0,surveymonkey,Php,Oauth 2.0,Surveymonkey,我试图使用CURL/PHP获取我的“长期访问令牌”,但收到错误“缺少客户端id、客户端机密、代码、授权类型、重定向uri的参数” 在我调用的URL中,您可以清楚地看到我试图传递的参数 “.urlencode($client_secret)。”&code=”.urlencode($short_token)。“&redirect_uri=”.urlencode($redirect_url)。“&client_id=”.urlencode($client_id)。&grant_type=authori

我试图使用CURL/PHP获取我的“长期访问令牌”,但收到错误“缺少客户端id、客户端机密、代码、授权类型、重定向uri的参数”

在我调用的URL中,您可以清楚地看到我试图传递的参数

“.urlencode($client_secret)。”&code=”.urlencode($short_token)。“&redirect_uri=”.urlencode($redirect_url)。“&client_id=”.urlencode($client_id)。&grant_type=authorization_code

根据文档(见下文),我还使用了“application/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"

当您将参数附加到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;

直接从文档中可以看出,要获得发布字段所需的长寿令牌:

//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"

当您将参数附加到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;

谢谢-你的回答很有道理。我会在早上试一试,如果有效的话,我会回复/接受你的答案:)上面的代码工作得很好!!非常感谢你的帮助:)谢谢-你的回答很有道理。我会在早上试一试,如果有效的话,我会回复/接受你的答案:)上面的代码工作得很好!!非常感谢您的帮助:)