UBER API - 访问代码格式

问题描述 投票:0回答:1

我正在使用与UBER API的PHP集成。我遇到了OAuth流程的问题。在尝试交换访问令牌的访问代码后,我得到{"error": "invalid_grant"}

它运作良好,但今天它停止了工作。调试它,我看到优步提供这种格式的访问代码: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修饰了“#_”,但我需要整个字符串。

php uber-api
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.