Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';使用PHP base64_encode获取Twitter的OAuth签名_Php_Hash_Oauth_Twitter_Base64 - Fatal编程技术网

Can';使用PHP base64_encode获取Twitter的OAuth签名

Can';使用PHP base64_encode获取Twitter的OAuth签名,php,hash,oauth,twitter,base64,Php,Hash,Oauth,Twitter,Base64,我在推特上工作 我采用了示例签名基字符串和示例签名密钥,并将其传递给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%3DkYjzVBB8Y0ZFabxSWbW

我在推特上工作

我采用了示例签名基字符串和示例签名密钥,并将其传递给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\u encode()
函数:

$sha = hash_hmac('sha1', $sig_base_str, $sig_key);
echo base64_encode($sha);
但这给了我一个不正确的OAuth_签名值:

YjY3OWMwYWYxOGY0ZTljNTg3YWI4ZTIwMGFjZDRlNDhhOTNmOGNiNg==
查看以查看正在运行的函数


我做错了什么?请注意,我还尝试将其转换为大写,并在
base64\u encode()
函数之前包含空格。我在使用Twitter API时遇到了问题,我认为这是因为我无法获得正确的签名,即使在文档中的示例中也是如此。

我在十六进制字符中获得了正确的哈希值,但我需要在原始二进制数据中使用它们:

$sha = hash_hmac('sha1', $sig_base_str, $sig_key, true);
echo base64_encode($sha);
输出:
tnnarxj06cwhq44gcs1osk/jLY=
与Twitter文档中的内容完全一致

通过查找twitteroauth库得到了我的答案: