C# DonationAlerts API
Долго ищу ответ, решил написать сюда. При коннекте через сокет срабатывает ивент на ошибку xhr poll error, 404 не найдено. Сломал голову, не понимаю в чем может быть ошибка
DonationAlertsAPI.cs
public class DonationAlertsAPI
{
public string SendClientAuthorization(string token)
{
Process.Start(string.Format($"https://www.donationalerts.com/oauth/authorize?client_id={"appid"}&redirect_uri={"http://127.0.0.1:80"}&response_type=code&scope=oauth-user-show"));
Console.Write("Code: ");
string Code = Console.ReadLine();
return Code;
}
public string GetAuthorizationAccessToken(string code)
{
HttpWebRequest RequestWeb = (HttpWebRequest)WebRequest.Create("https://www.donationalerts.com/oauth/token");
string RequestData = string.Format($"grant_type=authorization_code&client_id={"appid"}&client_secret={"secret"}&redirect_uri={"http://127.0.0.1:80"}&code={code}");
byte[] RequestBytesData = Encoding.ASCII.GetBytes(RequestData);
RequestWeb.Method = "POST";
RequestWeb.Accept = "application/json";
RequestWeb.ContentType = "application/x-www-form-urlencoded";
RequestWeb.ContentLength = RequestBytesData.Length;
using (Stream StreamWrite = RequestWeb.GetRequestStream())
StreamWrite.Write(RequestBytesData, 0, RequestBytesData.Length);
HttpWebResponse ResponseWeb = (HttpWebResponse)RequestWeb.GetResponse();
StreamReader ReaderStream = new StreamReader(ResponseWeb.GetResponseStream());
StringBuilder BuilderString = new StringBuilder(ReaderStream.ReadToEnd());
ResponseWeb.Close();
dynamic ResponseData = new JavaScriptSerializer().Deserialize<dynamic>(BuilderString.ToString());
return (string)ResponseData["access_token"];
}
public dynamic GetSocketConnectionToken(string token)
{
HttpWebRequest RequestWeb = (HttpWebRequest)WebRequest.Create("https://www.donationalerts.com/api/v1/user/oauth");
RequestWeb.Method = "GET";
RequestWeb.Accept = "application/json";
RequestWeb.Headers.Add("Authorization", string.Format($"Bearer {token}"));
HttpWebResponse ResponseWeb = (HttpWebResponse)RequestWeb.GetResponse();
StreamReader ReaderStream = new StreamReader(ResponseWeb.GetResponseStream());
StringBuilder BuilderString = new StringBuilder(ReaderStream.ReadToEnd());
ResponseWeb.Close();
dynamic ResponseData = new JavaScriptSerializer().Deserialize<dynamic>(BuilderString.ToString());
return ResponseData["data"];
}
public void CreateSocketConnection(int id, string token)
{
Socket WebSocket = IO.Socket("wss://centrifugo.donationalerts.com/connection/websocket");
object JsonObject = JsonConvert.DeserializeObject("{\"params\":{\"token\":\"" + token + "\"},\"id\":" + id.ToString() + "}");
WebSocket.Send(JsonObject);
WebSocket.On(Socket.EVENT_CONNECT, () =>
{
Console.WriteLine("connected");
});
WebSocket.On(Socket.EVENT_CONNECT_ERROR, (err) =>
{
Console.WriteLine(err.ToString());
});
WebSocket.On("donation", (data) =>
{
Console.WriteLine("donate received");
});
WebSocket.Connect();
}
}
Main.cs
public partial class MainWindow : Window
{
public void OverrideConsoleBuffer()
{
var BufferSize = 2048;
Stream StreamRead = Console.OpenStandardInput(BufferSize);
TextReader inReader = (StreamRead == Stream.Null) ?
StreamReader.Null :
TextReader.Synchronized(
new StreamReader(StreamRead, Console.InputEncoding, false, BufferSize, true));
Console.SetIn(inReader);
}
public MainWindow()
{
InitializeComponent();
OverrideConsoleBuffer();
DonationAlertsAPI API = new DonationAlertsAPI();
string Code = API.SendClientAuthorization("user token");
string AuthorizationToken = API.GetAuthorizationAccessToken(Code);
Console.Clear();
if (!string.IsNullOrEmpty(AuthorizationToken))
Console.WriteLine("authorization token - OK");
dynamic SocketData = API.GetSocketConnectionToken(AuthorizationToken);
if (!string.IsNullOrEmpty((string)SocketData["socket_connection_token"]))
Console.WriteLine("socket token - OK");
API.CreateSocketConnection(SocketData["id"], (string)SocketData["socket_connection_token"]);
Console.ReadLine();
}
}