我正在尝试通过网络进行身份验证,以获取有效的令牌来实现付费按钮。 我在PHP中有这个代码:
$url = 'https://api.mercadolibre.com/oauth/token';
$fields = array(
'grant_type' => 'authorization_code',
'client_id' => $marketplace_client_id,
'client_secret' => $marketplace_client_secret,
'code' => $authorization_code,
'redirect_uri' => $redirect_uri
);
//al this variables are strings
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded",
'method' => 'POST',
'content' => http_build_query($fields),
),
);
$context = stream_context_create($options);
var_dump($context);
echo "<br><br>";
$result = file_get_contents($url, false, $context);
var_dump($result);
echo "<br><br>";
$response = (array) json_decode($result);
var_dump($response);
echo "<br><br>";
echo $response["access_token"];
此代码正在返回
resource(2) of type (stream-context)
bool(false)
array(0) { }
当我使用Postman for Chrome进行发布请求时
我至少收到了
{
"message": "Error validating grant. Your authorization code or refresh token may be expired or it was already used.",
"error": "invalid_grant",
"status": 400,
"cause": []
}
有时我会收到成功消息。
我已经阅读了很多教程,看起来很简单,我不知道我错过了什么。至少我想收到错误json所以我可以纠正输入数据中的问题,但我甚至没有得到这个。另一个罕见的事情是,authorization_code在第一次使用时到期,每次运行此代码时它都会到期,因此服务器可能正在接收我的发布请求,但我没有收到返回消息。这可能吗?
答案 0 :(得分:0)
这不是我的代码问题。 MercadoLibre(我发送帖子请求的网站)只收到POST请求víacUR。
所以我用这个替换了我的代码:
public function doPost($fields, $url) {
$heads = array('Accept: application/json', 'Content-Type: application/x-www-form-urlencoded');
// build the post data following the api needs
$posts = http_build_query($fields);
// change the curl method following the api needs
$options = array(
CURLOPT_RETURNTRANSFER => '1',
CURLOPT_HTTPHEADER => $heads,
CURLOPT_SSL_VERIFYPEER => 'false',
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => $posts,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_SSLVERSION => 3
);
// do a curl call
$call = curl_init();
curl_setopt_array($call, $options);
// execute the curl call
$response = curl_exec($call);
// get the curl status
//$status = curl_getinfo($call);
// close the call
curl_close($call);
// transform the json in array
$response = (array) json_decode($response);
return $response;
}
一切正常。
答案 1 :(得分:0)
CURLOPT_SSLVERSION => 3
无法再使用新版本的SDK替换它