如何使用refresh_token为Uber刷新access_token

时间:2019-02-19 09:26:57

标签: php curl oauth-2.0 uber-api

我有一个问题,当我通过uber api生成第一个oauth响应时,我得到了所有需要的信息(access_token,refresh_token)

但是当我希望刷新特定用户的access_token时,我会得到invalid_grant(我知道这意味着刷新令牌已过期,但是我生成了代码,并且即使代码仍然有效,起初也尝试失败)

这是我用于刷新令牌的代码,有人可以解释一下为什么它没有给我新的代码吗?

function refreshToken()
{
    $url = 'https://login.uber.com/oauth/v2/token';
    $fields = array(
        'client_id' => MY_CLIENT_ID,
        'client_secret' => MY_CLIENT_SECRET,
        'grant_type' => "refresh_token",
        'refresh_token' => MY_REFRESH_TOKEN
    );

    $fields_string = '';
    foreach ($fields as $key => $value) {
        $fields_string .= $key . '=' . $value . '&';
    }

    $fields_string = rtrim($fields_string, '&');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

我将代码存储在数据库中,从那里抓取并尝试使用它们,在我进行oauth之后,身份验证代码可以正常工作,但是我需要能够刷新访问令牌才能查询UBER api对于我的Webhook上已准备好收据的帖子,如果令牌已过期,则无法使用我拥有的当前身份验证令牌(承载者令牌)访问呼叫

这是我每次得到的答复:

[error] => invalid_grant

1 个答案:

答案 0 :(得分:0)

我在数据库中错误地存储了刷新令牌:长度大于我在其下存储的令牌。例如:我正在存储varchar(100),我将其设置为varchar(255),现在它就像一个奇迹。