サイトにTwitterアカウントでのログイン(OAuth認証)を実装しようとしたのですが、最初のリクエストトークン取得でハマる。
ライブラリを使えば楽なのだと思いますが、自前で書き始めてしまったので動かさないと気がすまない。
なんとかできたので、残しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$url = "https://api.twitter.com/oauth/request_token"; $consumerSecret='*********'; $consumerKey='************'; $param=array(); $param['oauth_consumer_key']=$consumerKey; $param['oauth_nonce']=md5(uniqid(rand(),true)); $param['oauth_signature_method']='HMAC-SHA1'; $param['oauth_timestamp']=time(); $param['oauth_version']='1.0'; ksort($param); $data='GET&'.rawurlencode($url).'&'.rawurlencode(http_build_query($param)); $param['oauth_signature']=base64_encode(hash_hmac('sha1',$data,urlencode($consumerSecret).'&',true)); $tokenString=file_get_contents($url."?".http_build_query($param)); $token=preg_replace("/^.*oauth_token=([^&]+).*$/","\\1",$tokenString); $tokenSecret=preg_replace("/^.*oauth_token_secret=([^&]+).*$/","\\1",$tokenString); |
あちこちにサンプルスクリプトはありましたが、動作するサンプルに出会えず時間かかった。
とりあえず上記でリクエストトークン取得できました。
ハマったポイントはやはりsignatureですね。
次はアクセストークンの取得ですが、ほぼ同じなので書きません。
需要あったら連絡ください。