Я пытаюсь искать твиты по местоположению в Unity3D с помощью Twitter API.
У меня проблема с созданием подписи аутентификации. Когда я пытаюсь отправить запрос от Postman и использовать сгенерированный заголовок, он также работает в Unity, но когда я пытаюсь создать подпись в Unity самостоятельно, я всегда получаю 401 Unauthorized error от сервера. Так что я уверен, что токены и секреты работают, единственная проблема - подпись.
Вот как я создал подпись:
private string CreateSignature(string url)
{
var stringBuilder = new StringBuilder();
stringBuilder.Append("POST&");
stringBuilder.Append(Uri.EscapeDataString(url));
stringBuilder.Append("&");
var dictionary = new SortedDictionary<string, string>
{
{"oauth_consumer_key", _mOauthConsumerKey},
{"oauth_nonce", _mNonce},
{"oauth_signature_method", "HMAC-SHA1"},
{"oauth_timestamp", _mTimeStamp},
{"oauth_token", _mOauthToken},
{"oauth_version", "1.0"}
};
foreach (var keyValuePair in dictionary)
{
stringBuilder.Append(Uri.EscapeDataString(string.Format("{0}={1}&", keyValuePair.Key, keyValuePair.Value)));
}
var signatureBaseString = stringBuilder.ToString().Substring(0, stringBuilder.Length - 3);
var signatureKey = Uri.EscapeDataString(_mOauthConsumerSecret) + "&" +
Uri.EscapeDataString(_mOauthTokenSecret);
var hmacsha1 = new HMACSHA1(
ASCIIEncoding.ASCII.GetBytes(signatureKey));
var signatureString = Convert.ToBase64String(hmacsha1.ComputeHash(
ASCIIEncoding.ASCII.GetBytes(signatureBaseString)));
return signatureString;
}
А вот как я создаю nonce и timestamp:
_mNonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(
DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture)));
var timeSpan = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var stamp = ((long)(DateTime.UtcNow - timeSpan).TotalSeconds);
_mTimeStamp = Convert.ToInt64(stamp).ToString(CultureInfo.InvariantCulture);
Большое спасибо.