我正在尝试使用oAuth 2.0交换授权代码(位于此页面的URL中)以获取访问令牌。
我正在运行以下php代码并收到错误(http错误500)。
我无法弄清楚以下代码有什么问题。我删除了实际的客户端ID,等等 - 它在那里显示代码:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://id.shoeboxed.com/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_id\": \"f8de67be8dc84e449203fcdd4XXXXXXX\",\"client_secret\": \"HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX\",\"code\": \"['code']\",\"redirect_uri\": \"http://website.com/foursquare2.php"}",
CURLOPT_HTTPHEADER => array(
"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 :(得分:1)
帖子字段中的json字符串不是有效的json字符串。你可以在这里测试json:
您可以尝试使用帖子字段填充数组,然后使用json_encode()将数组编码为curl请求中的json sting。这有助于在创建json字符串时缓解错误。我非常喜欢这样做。
$postArray = array(
'grant_type' => 'authorization_code',
'client_id' => 'f8de67be8dc84e449203fcdd4XXXXXXX',
'client_secret' => 'HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX',
'code' => '[\'code\']',
'redirect_uri' => 'http://website.com/foursquare2.php'
);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://id.shoeboxed.com/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false, //<--- Added this.
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST", //<---You may also try "CURLOPT_POST => 1" instead.
CURLOPT_POSTFIELDS => http_build_query($postArray), //<--Makes your array into application/x-www-form-urlencoded format.
CURLOPT_HTTPHEADER => array(
"application/x-www-form-urlencoded" //<---Change type
)
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
您的新错误是由于您的服务器上未安装相应的证书。这是一个让你入门的链接,如果它没有帮助,那么SO和谷歌就有很多东西。
How do I deal with certificates using cURL while trying to access an HTTPS url?
我添加了CURLOPT_SSL_VERIFYPEER =&gt;您的选项数组为false。这是一个bandaide,直到你可以得到你的证书问题。它可能会将您的数据暴露给可能正在窥探的人。
您的第三个问题与您要发送到数据的数据的类型/格式有关。它期待application / x-www-form-urlencoded并且您已将您的内容类型声明为application / json。
以下是关于这个主题的一些阅读: