Yahoo YOS Social PHP5 ошибка библиотеки

Я пытаюсь подписать пользователя с помощью Yahoo. Я использую Yos Social Php5 SDK. Он запрашивает разрешение и после этого умирает с ошибкой token_rejected.

Это все, что я вернусь. Вот как выглядит мой код (примечание: я использую это в codeigniter):

function yahoo($url) {
    if($url == 'login') {
        $url = base_url('user/yahoologin');
    } else {
        $url = base_url('user/yahooregister');
    }
    set_include_path(APPPATH . "libraries/Yahoo");
    require_once APPPATH . "libraries/Yahoo/OAuth/OAuth.php";
    require_once APPPATH . "libraries/Yahoo/Yahoo/YahooOAuthApplication.class.php";
    $CONSUMER_KEY      = 'consumerkey--';
    $CONSUMER_SECRET   = 'secret';
    $APPLICATION_ID    = 'appid';
    $CALLBACK_URL      = $url;
    $oauthapp      = new YahooOAuthApplication($CONSUMER_KEY, $CONSUMER_SECRET, $APPLICATION_ID, $CALLBACK_URL);

    # Fetch request token
    $request_token = $oauthapp->getRequestToken($CALLBACK_URL);

    # Redirect user to authorization url
    $redirect_url  = $oauthapp->getAuthorizationUrl($request_token);
    redirect($redirect_url);
}

public function yahoologin() {
    set_include_path(APPPATH . "libraries/Yahoo");
    require_once APPPATH . "libraries/Yahoo/OAuth/OAuth.php";
    require_once APPPATH . "libraries/Yahoo/Yahoo/YahooOAuthApplication.class.php";
    $CONSUMER_KEY      = 'consumerkey--';
    $CONSUMER_SECRET   = 'secret';
    $APPLICATION_ID    = 'appid';
    $CALLBACK_URL      = base_url("user/yahoologin");
    $oauthapp      = new YahooOAuthApplication($CONSUMER_KEY, $CONSUMER_SECRET, $APPLICATION_ID, $CALLBACK_URL);

    # Fetch request token
    $request_token = $oauthapp->getRequestToken($CALLBACK_URL);
    # Exchange request token for authorized access token
    $access_token = $oauthapp->getAccessToken($request_token, $_REQUEST['oauth_verifier']);

    # update access token
    $oauthapp->token = $access_token;

    # fetch user profile
    $profile = $oauthapp->getProfile();

    var_dump($profile);
}

Единственная ошибка, которую я получаю, это:

YahooOAuthAccessToken Object
(
    [key] => 
    [secret] => 
    [expires_in] => 
    [session_handle] => 
    [authorization_expires_in] => 
    [yahoo_guid] => 
    [oauth_problem] => token_rejected
)

И это на $access_token = $oauthapp->getAccessToken($request_token, $_REQUEST['oauth_verifier']); линия. Любая помощь, чтобы заставить это работать? Я серьезно думаю, что у Yahoo самый худший API.

1 ответ

Решение

Поскольку существует не так уж много, что может помочь с Yahoo API, я думал, что я опубликую свое решение, чтобы люди, которые борются, могли получить ответы.

То, что я не понимал, это то, что каждый раз, когда вы звоните $oauthapp->getRequestToken($url)Yahoo возвращает случайную подпись и ключ, и вы можете сохранить их в сеансе, в переменной, в базе данных или в другом месте. Я выбрал сеанс. Итак, сразу после того, как я получаю свой токен запроса, я сохраняю его в сессии:

function yahoo($url) {
    if($url == 'login') {
        $url = base_url('user/yahoologin');
    } else {
        $url = base_url('user/yahooregister');
    }
    set_include_path(APPPATH . "libraries/Yahoo");
    require_once APPPATH . "libraries/Yahoo/OAuth/OAuth.php";
    require_once APPPATH . "libraries/Yahoo/Yahoo/YahooOAuthApplication.class.php";
    $CONSUMER_KEY      = 'xxxx';
    $CONSUMER_SECRET   = 'xxxx';
    $APPLICATION_ID    = 'xxxx';
    $CALLBACK_URL      = $url;
    $oauthapp      = new YahooOAuthApplication($CONSUMER_KEY, $CONSUMER_SECRET, $APPLICATION_ID, $CALLBACK_URL);

    # Fetch request token
    $request_token = $oauthapp->getRequestToken($CALLBACK_URL);
    $this->session->set_userdata('request_token',json_encode($request_token));

    # Redirect user to authorization url
    $redirect_url  = $oauthapp->getAuthorizationUrl($request_token);
    redirect($redirect_url);
}

Теперь просто для пояснения: эта функция вызывается по ссылке, предоставленной Yahoo! Кнопка входа на моей домашней странице (это в codeigniter):

<?php
    echo form_button(
    array(
        'name'    => 'yahoo-login',
        'id'      => 'yahoo-login',
        'title'   => 'Yahoo Login',
        'class'   => 'btn span12 btn-yahoo',
        'type'    => 'button',
        'onclick' => "javascript:void openWindow('" . base_url('user/yahoo') . "/login','Yahoo! Login',580,400);return false;"),
    "<i class='icon icon-yahoo'></i> Log in with Yahoo!"
); ?>

Как видите, я установил сеанс пользователя с request_token в виде строки json_encoded. В моей функции входа в систему я получаю токен из сессии и просто декодирую его. и передать его любой функции, которая в ней нуждается:

public function yahoologin() {
    set_include_path(APPPATH . "libraries/Yahoo");
    require_once APPPATH . "libraries/Yahoo/OAuth/OAuth.php";
    require_once APPPATH . "libraries/Yahoo/Yahoo/YahooOAuthApplication.class.php";
    $CONSUMER_KEY      = 'xxxx';
    $CONSUMER_SECRET   = 'xxxx';
    $APPLICATION_ID    = 'xxxx';
    $CALLBACK_URL      = base_url("user/yahoologin");
    $oauthapp      = new YahooOAuthApplication($CONSUMER_KEY, $CONSUMER_SECRET, $APPLICATION_ID, $CALLBACK_URL);

    # Fetch request token
    $request_token = json_decode($this->session->userdata('request_token'));
    # Exchange request token for authorized access token
    $access_token = $oauthapp->getAccessToken($request_token, $_REQUEST['oauth_verifier']);

    # update access token
    $oauthapp->token = $access_token;

    # fetch user profile
    $profile = $oauthapp->getProfile();

    var_dump($profile);
}

Примечание. Очевидно, что в данный момент это никого не регистрирует, но оно продвигает меня дальше, чем я был в течение недели.

Я надеюсь, что это поможет кому-то, кто борется с API Yahoo!.

Другие вопросы по тегам