这可以在控制台中运行,但是当我在PHP中尝试不起作用时
$cURL = "curl -X POST -d 'client_id=".$CLIENT_ID."&client_secret=".$CLIENT_SECRET."&grant_type=authorization_code&code=".$CODE."' https://www.wrike.com/oauth2/token";
代码PHP。
$postData = array("client_id" => $CLIENT_ID,
"client_secret" => $CLIENT_SECRET,
"grant_type" => "authorization_code",
"code" => $CODE);
$handler = curl_init();
curl_setopt($handler, CURLOPT_URL, $url);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($handler, CURLOPT_POST, sizeof($postData));
curl_setopt($handler, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec ($handler);
curl_close($handler);
当我运行此代码时,结果是"资源ID#2",我期望的结果是这个
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
"token_type": "bearer",
"expires_in": 3600
}
控制台中的工作正常,但是当我尝试使用PHP时,
答案 0 :(得分:0)
我建议使用https://github.com/rmccue/Requests,这会让您的生活更轻松。您的代码将是:
$postData = array("client_id" => $CLIENT_ID,
"client_secret" => $CLIENT_SECRET,
"grant_type" => "authorization_code",
"code" => $CODE);
$headers = array('Content-Type' => 'application/json'); // assuming you post JSON
$response = Requests::post($$url, $headers, json_encode($obj));
if ($response->status_code !== 200) {
// handle OK
} else {
// handle ERROR
}
Requests库还处理PHP中没有curl的情况;将在一个对象中返回完整的标题,正文,cookie等。
答案 1 :(得分:0)
一些事情(一些评论者已经注意到):
CURLOPT_POST
应设置为1
而不是数据大小Resource id #2
,则可能会从$handler
而不是$result
测试结果。http_build_query
以确保编码正确curl_errno
一个完整的例子:
$postData = array("client_id" => $CLIENT_ID,
"client_secret" => $CLIENT_SECRET,
"grant_type" => "authorization_code",
"code" => $CODE);
$handler = curl_init();
curl_setopt($handler, CURLOPT_URL, $url);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handler, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($handler, CURLOPT_POST, 1);
$response = curl_exec($handler);
if (curl_errno($handler)) {
echo 'Error:' . curl_error($handler);
}
curl_close ($handler);
var_dump($response);
旁注,curl-to-PHP是一个方便将curl命令转换为PHP的工具。
答案 2 :(得分:0)
更新所有感兴趣的人。我最近在thephpleague的库中添加了一个工作包,允许你连接Wrike Api:
https://github.com/michaelKaefer/oauth2-wrike
(解决这个问题的另一个问题可能是PHP的SSL配置,例如:PHP cURL Not Working with HTTPS)