Error Message
Client error:
POST https://api.twitter.com/oauth/request_token
resulted in a400 Bad Request
response: {"errors":[{"code":215,"message":"Bad Authentication data."}]}
Extract Token from Twitter
$method = "POST";
$endpoint = "https://api.twitter.com/oauth/request_token";
$authorizationParams = [
"oauth_callback" => "url, this matches with Callback URI of api info",
"oauth_consumer_key" => "my api key",
"oauth_nonce" => md5(microtime(). mt_rand()),
"oauth_signature_method" => "HMAC-SHA1",
"oauth_timestamp" => time(),
"oauth_version" => "1.0"
];
$authorizationParams["oauth_signature"] = $this->GetSignature($method, $endpoint, $authorizationParams);
$authorizationString = $this->getAuthorizationString($authorizationParams);
Post Request to Twitter
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $endpoint, [
'headers' => [
'Content-Type' => 'application/json',
"Authorization: OAuth " . $authorizationString
]
]);
$result = json_decode($response->getBody(), true);
Signature generation
private function GetSignature($method, $endpoint, $authorizationParams) {
$twitter_conf = \Config::get('twitter');
uksort($authorizationParams, "strcmp");
foreach($authorizationParams as $key => $value) {
$authorizationParams[$key] = rawurlencode($key) . "=" . rawurlencode($value);
}
$signatureBase = [
rawurlencode($method),
rawurlencode($endpoint),
rawurlencode(implode("&", $authorizationParams)),
];
$signatureBaseString = implode("&", $signatureBase);
$signatureKey = [
rawurlencode($twitter_conf["secret"]),
""
];
$signatureKeyString = implode("&", $signatureKey);
return base64_encode(hash_hmac("sha1", $signatureBaseString, $signatureKeyString, true));
}
Convert array to string
private function getAuthorizationString($authorizationParams) {
$authorizationString = "";
$count = 0;
foreach($authorizationParams as $key => $value) {
$authorizationString .= $count == 0 ? "" : ",";
$authorizationString .= rawurlencode($key) . '="' . rawurlencode($value) . '"';
$count++;
}
return $authorizationString;
}