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();
    }
}

Ответы (0 шт):