2013-03-25 2 views
0

저는 Twitter의 Creating a Signature Doc을 통해 작업하고 있습니다.PHP64 기반 Twitter 용 OAuth 서명을 얻을 수 없습니다.

다큐먼트에서 권장 내가의 hash_hmac 기능에 예제 문자열 기반 서명 및 키 서명의 예를 촬영하고, 통과 한

:

$sig_base_str = 'POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521'; 
$sig_key = 'kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE'; 
$sha = hash_hmac('sha1', $sig_base_str, $sig_key); 
$sha = strtoupper($sha); 
$output = str_split($sha,2); 
$output = implode(' ',$output); 
echo $output; 

이 나에게에서와 동일한 바이너리를 제공합니다 예 : B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6.

이제 의사가 base64로 변환한다고 말합니다. 나는 PHP의 base64_encode() 기능을 사용할 수 있다고 생각합니다 :

$sha = hash_hmac('sha1', $sig_base_str, $sig_key); 
echo base64_encode($sha); 

를하지만 나에게 내 OAuth_signature에 잘못된 값을 제공합니다

YjY3OWMwYWYxOGY0ZTljNTg3YWI4ZTIwMGFjZDRlNDhhOTNmOGNiNg== 

보기 http://ideone.com/Bu0CZi 행동의 기능을 볼 수 있습니다.

내가 뭘 잘못하고 있니? 참고로, 나는 또한 대문자로 변환하고 base64_encode() 함수 앞에 공백을 포함하려고했습니다. 트위터 API를 사용하는 데 어려움을 겪고 있습니다. 문서의 예에서도 올바른 서명을 얻을 수 없기 때문에 문제라고 생각합니다.

답변

2

나는 16 진수 문자 올바른 해시 값을 얻고 있었다, 그러나 나는 생의 바이너리 데이터를 필요 :

$sha = hash_hmac('sha1', $sig_base_str, $sig_key, true); 
echo base64_encode($sha); 

출력을 : tnnArxj06cWHq44gCs1OSKk/jLY=를 정확히 트위터 문서에서 예상대로.

twitteroauth 라이브러리를 조회하여 내 대답을 얻었습니다. https://github.com/abraham/twitteroauth/blob/master/twitteroauth/OAuth.php#L116

관련 문제