如何使用 refresh_token 为优步刷新 access_token

How to refresh access_token for uber with refresh_token

我有一个问题,当我通过超级 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 上准备好收据 post,如果令牌已过期,我将无法使用我拥有的当前身份验证令牌(不记名令牌)

访问呼叫

这是我每次得到的回复:

[error] => invalid_grant

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