4

ここの例https://gist.github.com/tonefolder/44191a29454f9059c7e6を使用して、ユーザーを認証し、oauth_token と oauth_token_secret を保存することに成功しました。その後、cURL を使用して認証済みの GET リクエストを作成できます。

ただし、認証された POST リクエストを作成する方法がわかりません。

この方法で、署名された oauthObject から $result['header'] を使用してみました:

$discogs_username = "'XXXX'";

$result = mysql_query("SELECT * FROM discogs WHERE username = $discogs_username;", $link);
if (mysql_num_rows($result)) {
    $discogs_details = mysql_fetch_array($result, MYSQL_ASSOC);
}


$signatures = array(
    'consumer_key'     => 'MyKey',
    'shared_secret'    => 'MySecret',
  'oauth_token'    => $discogs_details['oauth_token'],
  'oauth_token_secret'    => $discogs_details['oauth_token_secret']
);


$jsonquery = json_encode(array(
        'release_id' => '7608939',
        'price' => '18.00',
        'condition' => 'Mint',
        'sleeve_condition' => 'Mint',
        'status' => 'For Sale'
    )
);


$result = $oauthObject->sign(array(
        'path'      => $scope.'/marketplace/listings',
        'signatures'=> $signatures
    )
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'MyDiscogsClient/0.1 +http://me.com');
curl_setopt($ch, CURLOPT_URL, $result['signed_url']);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Authorization:' . $result['header'])); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonquery);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = json_decode(curl_exec($ch), true);
curl_close($ch);

しかし、「[メッセージ] => このリソースにアクセスするには認証が必要です」というメッセージが表示されます。

CURLOPT_POSTFIELDS の部分を正しく実行しているかどうかはわかりませんが、実際に認証済みの POST を送信できるようになったら、それを理解できます。これにさらに問題がある場合は申し訳ありません-私はcURLをそれほど頻繁に使用しません!

4

1 に答える 1