PHPでのOauth認証後のAuthヘッダ実装を求めてLaravel Socialiteの中身を覗いていたのですが、
そこで使われているleague/oauth1-client
がいい感じだったので使い方をまとめておきます。
個人的には以下の要件でライブラリを探していたのでドンピシャな感じでした。
- HTTP 通信ではGuzzle 使いたい
- Auth ヘッダの再実装は避けたい
Authヘッダの自力生成とかはコードもいくらか上がっているのですが、
そこを再実装するのは何か行けてないなぁ…と思っていたところちょうど良いものに出会えたって感じです。
league/oauth1-client
のHTTP通信はGuzzle3に依存しているため、
HTTP通信周りは自分で書き直す必要が会ったため、そのへんは自力で加えました。
$ composer require league/oauth1-client:~1.0
やりたかったことは「既に取得済みのアクセストークンを使ってAPIを叩く」です。
アクセストークン自体が未取得のケースでは素直にSocialite使った方がよさげです。
コード
Guzzle6なので末尾のコード修正したら非同期に投げられます。
$tokenCredentials = new \League\OAuth1\Client\Credentials\TokenCredentials();
$tokenCredentials->setIdentifier(env("TWITTER_ACCESS_TOKEN"));
$tokenCredentials->setSecret(env("TWITTER_ACCESS_SECRET"));
$twitter = new \League\OAuth1\Client\Server\Twitter([
'identifier' => env("TWITTER_CLIENT_ID"),
'secret' => env("TWITTER_CLIENT_SECRET"),
'callback_uri' => env("TWITTER_REDIRECT_URL")
]);
$method = "POST";
$url = "https://api.twitter.com/1.1/statuses/update.json";
$body = [
"status" => "レイバンのサングラス",
];
$options = [];
$options["form_params"] = $body;
$options["headers"] = $twitter->getHeaders($tokenCredentials,$method,$url,$body);
try{
$client = new \GuzzleHttp\Client();
$client->request($method,$url,$options);
}catch(Throwable $e){
throw $e;
}
こんな感じで上手いこと取得済みのアクセストークンを使いつつTwitterへの投稿を行うことが出来ました。
DBにガメてるアクセストークンを使って一斉にレイバンのサングラスを売りたい時などにご利用下さい。