3

「http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html」の手順に従い、認証済みユーザーから oauth トークンと GUID を取得しました。このURL「http://social.yahooapis.com/v1/user/GUID_HERE/contacts」を使用してWebの検索で見たように、GUIDを介してすべての連絡先を取得しようとしていますヘッダーを介して認証データを渡しますが、これを取得します応答:

<?xml version='1.0' encoding='UTF-8'?><yahoo:errorxmlns:yahoo='http://yahooapis.com/v1/base.rng' xml:lang='en-US'><yahoo:description>Please provide valid credentials. OAuth oauth_problem="signature_invalid", realm="yahooapis.com"</yahoo:description></yahoo:error><!-- ws129.socdir.sp2.yahoo.com uncompressed/chunked Tue Aug 28 06:22:40 PDT 2012 -->

ここに書かれているように、cURL(PHP)を使用してリクエストを実行しています「http://developer.yahoo.com/oauth/guide/oauth-make-request.html」(確認済みで、消費者の秘密をouath_signatureとして使用しています) ):

$header = array(
'GET http://social.yahooapis.com/v1/user/' . $guid[1] . '/contacts',
'Authorization: OAuth realm="yahooapis.com", '.
                                     'oauth_consumer_key="'.$yahoo_consumer_key.'", '.
                                     'oauth_nonce="'.uniqid().'", '.
                                     'oauth_signature_method="HMAC-SHA1", '.
                                     'oauth_timestamp="'.time().'", '.
                                     'oauth_token="'.$ouathToken[1].'", '.
                                     'oauth_version="1.0", '.
                                     'oauth_signature="'.$yahoo_consumer_secret.'"');
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
              CURLOPT_FOLLOWLOCATION => TRUE,
              CURLOPT_SSL_VERIFYPEER => false,
              CURLOPT_SSL_VERIFYHOST => 0,
              //CURLOPT_HTTPGET => true,
              CURLOPT_URL => 'http://social.yahooapis.com/v1/user/' . $guid[1] . '/contacts',
              CURLOPT_HTTPHEADER => $header
    ));

誰でも助けることができますか?

4

3 に答える 3

2

OAuth 署名は単なるコンシューマ シークレットではありません。Yahoo には、リクエストに署名する方法に関するいくつかのドキュメントがあり、それが oauth_signature フィールドに入力されます。

于 2012-08-29T13:48:42.240 に答える
1

作成された署名が間違っているようです。署名を作成するには、最初にURLを正規化して作成されたベース文字列を作成します。

ベース文字列の詳細については、 http://developer.yahoo.com/oauth/guide/oauth-signing.htmlにアクセスしてください。 http://oauth.net/core/1.0/#anchor16

ベース文字列を作成したら、COSUMER SECRET とトークン シークレットを & で連結した署名キーを作成します。このように、

$signatureKey = CONSUMER_SECRET."&".{yourtokensecret};

次に、署名を作成するには、次のコードを試してください: $signature = urlencode(base64_encode(hash_hmac('sha1',{baseString}, $signatureKey, true)));

于 2012-08-30T09:20:24.720 に答える
0

ここで利用できる優れた署名機能があります

于 2015-07-28T16:04:42.813 に答える