Вкусный PHP oAuth Yahoo SDK Добавить закладку - PullRequest
0 голосов
/ 10 ноября 2010

Мне действительно трудно найти способ успешно аутентифицировать пользователя и добавить закладку в его восхитительный аккаунт.

Я скачал YOS Social SDK от Yahoo , затем начал изменять oauth sampleapp.php . Он в основном обрабатывает процесс oAuth, создавая ссылку для входа в систему, которая отправляет вас в Yahoo для предоставления разрешения, а затем отправляет вас обратно на указанный вами URL обратного вызова.

Я думал о том, чтобы изменить файл sampleapp.php, чтобы сделать запрос к восхитительному API posts / add , чтобы добавить новую закладку после завершения процесса oAuth, но у меня возникают некоторые проблемы. Я думаю, что неправильно обрабатываю запрос POST.

Вот мой код:

<code><?php

require dirname(__FILE__).'/lib/Yahoo.inc';

error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', true);
YahooLogger::setDebug(true);
YahooLogger::setDebugDestination('LOG');

ini_set('session.save_handler', 'files');
session_save_path('/tmp/');
session_start();

define('OAUTH_CONSUMER_KEY', '<YOURS_GOES_HERE>');
define('OAUTH_CONSUMER_SECRET', '<YOURS_GOES_HERE>');
define('OAUTH_DOMAIN', '<YOURS_GOES_HERE>');
define('OAUTH_APP_ID', '<YOURS_GOES_HERE>');

if(array_key_exists("logout", $_GET)) {
  YahooSession::clearSession();
  header("Location: sampleapp.php");
}

$hasSession = YahooSession::hasSession(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_APP_ID);

if($hasSession == FALSE) {

  $callback = YahooUtil::current_url();
  $auth_url = YahooSession::createAuthorizationUrl(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, $callback);

}
else {

  $session = YahooSession::requireSession(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, OAUTH_APP_ID);

  if($session) {

    $consumer = new stdclass();
        $consumer->key = OAUTH_CONSUMER_KEY;
        $consumer->secret = OAUTH_CONSUMER_SECRET;

    $nativeSession = new NativeSessionStore();
    $token = $nativeSession->fetchAccessToken();

    $client = new OAuthClient($consumer, $token, OAUTH_PARAMS_IN_HEADERS, OAUTH_SIGNATURE_HMAC_SHA1);

    $request_url = 'http://api.del.icio.us/v2/posts/add';
    $bookmark_url = 'http://www.tegdesign.com';
    $parameters = array("url" => urlencode($bookmark_url), "description" => "test");

    $response = $client->post($request_url,'TEXT',$parameters);

    echo '<pre>';
    print_r($response);
    echo '
'; } } if ($ hasSession == FALSE) { echo sprintf (" Логин \ n", $ auth_url); } else if ($ hasSession) { echo "

Выйти

"; } ?>

А вот и вывод переменной $ response:

Array
(
    [method] => POST
    [url] => http://api.del.icio.us/v2/posts/add
    [code] => 401
    [requestHeaders] => Array
        (
            [0] => Accept: application/json
            [1] => Authorization: OAuth realm="yahooapis.com",oauth_version="1.0",oauth_nonce="<MINE_SHOWS_HERE>",oauth_timestamp="1289407587",oauth_consumer_key="<MINE_SHOWS_HERE>",oauth_token="<MINE_SHOWS_HERE>",oauth_signature_method="HMAC-SHA1",oauth_signature="<MINE_SHOWS_HERE>"
            [2] => Content-Type: TEXT
        )

    [requestBody] => Array
        (
            [url] => http%3A%2F%2Fwww.tegdesign.com
            [description] => test
        )

    [responseHeaders] => Array
        (
            [Date] => Wed, 10 Nov 2010 16:46:32 GMT
            [WWW-Authenticate] => OAuth oauth_problem="signature_invalid", realm="yahooapis.com"
            [Content-Type] => application/json
            [Cache-Control] => private
            [Age] => 0
            [Transfer-Encoding] => chunked
            [Connection] => keep-alive
            [Server] => YTS/1.17.21
        )

    [responseBody] => {"error":{"lang":"en-US","description":"Please provide valid credentials"}}
)

Кто-нибудь знает об использовании нового API Delicious для успешной аутентификации и публикации закладки от имени пользователя? У меня ужасное время.

Спасибо, Tegan

1 Ответ

1 голос
/ 09 ноября 2011

Установите тип контента на "application/x-www-form-urlencoded" вместо 'Text' в строке ниже.

$response = $client->post($request_url,'TEXT',$parameters);
...