c# BasicAuth oraz WebRequest. Dlaczego otrzymuję error 401 (bez autoryzacji)?

0

Witam. Próbuje dostać się do api przelewy24 poprzez basic auth, ale nie mogę przeskoczyć dodania do headera nagłówka uwierzytelniającego:

string sign = CalculateRegisterSign(model.sessionId, options.MerchantId, model.amount, model.currency, options.CRC);
            string Body = CreateBodyForRegister(
                options,
                model,
                sign,
                string.IsNullOrEmpty(model.country) ? false : true,
                string.IsNullOrEmpty(model.urlStatus) ? false : true);
            
            string username = options.MerchantId.ToString();
            string password = options.PrivateApiKey;
            string svcCredentials = Convert.ToBase64String(ASCIIEncoding.UTF8.GetBytes(username + ":" + password));
            
            byte[] byteContent = Encoding.ASCII.GetBytes(Body);

            WebRequest webRequest = HttpWebRequest.Create(SandboxRegisterUrl);
            webRequest.PreAuthenticate = true;
            webRequest.Headers.Add("Authorization", "Basic " + svcCredentials);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/json";
            webRequest.ContentLength = byteContent.Length;
            webRequest.UseDefaultCredentials = false;

            using (var dataStream = webRequest.GetRequestStream())
            {
                dataStream.Write(byteContent, 0, byteContent.Length);
                dataStream.Close();
            }

Co może być nie tak? Wszystko na SO podpowiada mi to co już mam napisane.

2

Co to jest 201? Kod odpowiedzi HTTP?

0

Tak, wybacz.
Otrzymuję wyjątek: System.Net.WebException: „Serwer zdalny zwrócił błąd: (401) Bez autoryzacji.”

Jezu. I jeszcze 201 napisałem a nie 401... Poprawione w tytule

1

No to wygląda prawidłowo. Jak wyślesz taki sam request jakimś postmanem, to efekt ten sam?

0

Dziwne, bo svcCredentials zwraca mi 8 znaków, a jak dodam basic auth do postmana zwraca mi dużo dłuższy ciąg zaczynający sie znakami z svcCredentials, tak jak 3/4 ciągu by mi wcięło. Tak czy siak, postman zwraca:
screenshot-20210824173913.png

Czy wymagania środowiskowe mogą mieć znaczenie na ten błąd?
https://developers.przelewy24.pl/index.php?pl#section/Wymagania-srodowiskowe

0

Oczywiście, że jest puste. Już poprawione ;D Jednak nadal 401, brak autoryzacji.

1

No z kodu wygląda dobrze.
Czy u ciebie posId i merchantId to te same wartości? Nie znam tego API, ale w dokumentacji do Basic autha używają posId, a nie merchantId.

0

PosId jest tą samą wartością co MerchantId. Na starszym ich API działa mi dobrze, ale patrzę że mają nowe więc chcę z niego skorzystać a tutaj się okazało, że jakieś basic auth wprowadzili ;(

3

Hm zadzwoniłem na Przelewy24, odświeżyli "ustawienia" i zaczęło wszystko działać <3

1 użytkowników online, w tym zalogowanych: 0, gości: 1