我正在使用与UBER API的PHP集成。我遇到了OAuth流程的问题。在尝试交换访问令牌的访问代码后,我得到{"error": "invalid_grant"}
。
它运作良好,但今天它停止了工作。调试它,我看到Uber以这种格式提供访问代码:IPjvWABDxk00000BxQQwJksP2I50qD#_
我相信" #_
"最后导致我出现问题,因为php $_GET
无法读取完整的字符串(从IP
...到... #_
)。
我的代码:
$uber_access_code = $_GET["code"];
$fields_string = '';
$fields = array(
'client_secret' => $uber_client_secret,
'client_id' => $uber_client_id,
'grant_type' => 'authorization_code',
'code' => $uber_access_code,
'redirect_uri' => $uber_redirect_uri,
);
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, "https://login.uber.com/oauth/v2/token");
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
问题:如何从PHP读取完整的字符串参数? $ _GET trims" #_
"在我的结尾,但我需要整个字符串。
答案 0 :(得分:0)
当我在本地机器上测试时,我可以复制你的问题,但我不认为这是一个php问题。看起来这是一个浏览器问题。因为当我检查apache访问日志时,我可以看到它正在发送请求。
"GET /result.php?code=IPjvWABDxk00000BxQQwJksP2I50qD HTTP/1.1" 200 148
如果您是创建此GET请求URL的人,则可以执行以下操作。
例如 form.php的
<html>
<body>
<?php
$link = base64_encode('IPjvWABDxk00000BxQQwJksP2I50qD#_');
?>
<a href="result.php?code=<?php echo $link;?>">link</a>
</body>
</html>
和result.php
<?php
var_dump(base64_decode($_GET['code']));
?>
你得到有效的结果,如
string 'IPjvWABDxk00000BxQQwJksP2I50qD#_' (length=32)