【问题标题】:Get users email from twitter for auth (https://api.twitter.com/1.1/account/verify_credentials.json)从 twitter 获取用户电子邮件以进行身份​​验证 (https://api.twitter.com/1.1/account/verify_credentials.json)
【发布时间】:2021-06-07 03:32:43
【问题描述】:

我按照 twitter 上的教程(文档)进行操作,当我需要通过他的邮件获取用户数据(以进行用户授权)时,卡在了最后阶段。

当我发出一个不带参数的请求时,我得到了用户名、用户ID等用户数据,我需要获取用户的邮件,但是当我添加参数“?include_email = true”时,我得到了错误32 “我们无法验证您的身份”。

我不明白我在哪里犯了错误(正如我在签名中理解的那样)

感谢关注 (对不起我的英语,这不是我的母语)

    $oauthParams = [
        "oauth_consumer_key" => "...",
        "oauth_token" => $requestOauthToken,
        "oauth_signature_method" => "HMAC-SHA1",
        "oauth_timestamp" => time(),
        "oauth_nonce" => md5(uniqid()),
        "oauth_version" => "1.0",
    ];

    $baseURI = "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true";
    $baseString = $this->buildBaseStringGET($baseURI, $oauthParams);

    $consumerSecret = '...';
    $compositeKey = $this->getCompositeKey($consumerSecret, $requestOauthTokenSecret);
    $oauthParams['oauth_signature'] = base64_encode(hash_hmac('sha1', $baseString, $compositeKey, true));

    $header = $this->buildAuthorizationHeader($oauthParams);

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $baseURI,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
            $header,
        ),
    ));
    $response = curl_exec($curl);
    curl_close($curl);
    $response = json_decode($response, true)

private function buildBaseStringGET($baseURI, $oauthParams)
{
    $baseStringParts = [];
    ksort($oauthParams);
    foreach ($oauthParams as $key => $value) {
        $baseStringParts[] = "$key=" . urlencode($value);
    }
    return 'GET&' . urlencode($baseURI) . '&' . urlencode(implode('&', $baseStringParts));
}

private function buildAuthorizationHeader($oauthParams)
{
    $authHeader = 'Authorization: OAuth ';
    $values = [];
    foreach ($oauthParams as $key => $value) {
        $values[] = "$key=\"" . urlencode($value) . "\"";
    }
    $authHeader .= implode(',', $values);
    return $authHeader;
}

【问题讨论】:

    标签: php twitter get signature php-curl


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 2016-07-19
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2019-06-25
      • 1970-01-01
      • 2020-01-07
      相关资源
      最近更新 更多