REST API PayU z C#


(I1094114) #1

Witam forumowiczów, mam nadzieję, że mi pomożecie, bo ja po dwóch dniach już nie wiem co myśleć.

Otóż: chcę zintegrować PayU na stronie w Asp.Net MVC 5. Postanowiłem użyć ichniejszego REST Api. Wysyłam i odbieram dane w kontrolerze taki sposób (używam RestSharpa):

var client = new RestClient("https://secure.payu.com/api/v2_1/orders");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "0e466df7-ce0f-c2b2-8d2c-e678fe66733b");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Basic MTQ1MjI3OjEzYTk4MGQ0Zjg1MWYzZDlhMWNmYzc5MmZiMWY1ZTUw");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\r\n \"notifyUrl\": \"http://localhost:45005/Payment/Index\",\r\n \"customerIp\": \"127.0.0.1\",\r\n \"merchantPosId\": \"145227\",\r\n \"description\": \"RTV market\",\r\n \"currencyCode\": \"PLN\",\r\n \"totalAmount\": \"15000\",\r\n \"extOrderId\":\"Moje zamowienie 1\",\r\n \"buyer\": {\r\n \"email\": \"jan.kowalski@example.com\",\r\n \"phone\": \"654111654\",\r\n \"firstName\": \"Jan\",\r\n \"lastName\": \"Kowalski\"\r\n },\r\n \"products\": [\r\n {\r\n \"name\": \"Bezprzewodowa myszka do laptopa\",\r\n \"unitPrice\": \"15000\",\r\n \"quantity\": \"1\"\r\n }\r\n]\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

Mój problem polega na tym, że jako odpowiedź dostaję html a nie json. Gdybym otrzymał ten ostatni (nawet z komunikatem błędu) to bym rozumiał, ale html? Na dodatek ze skróconymi odnośnikami do skryptów i cssów (np. /js/con/sfdjh433.js), których nie ma ani u mnie ani u nich.

Po zrenderowaniu tego htmla dostaję formularz z podsumowaniem zamówienia i danymi kupującego. Ładnie, tylko po co? Wszystko to zrobiłem wcześniej sam i dlatego używam REST Api żeby nie korzystać z ich podstron.

Nawet dokumentacja (http://developers.payu.com/pl/restapi.html#creating_new_order_api) mówi, że:

Czy mógłby mi ktoś wyjaśnić lub przynajmniej naprowadzić na dobrą ścieżkę? Z góry dziękuję.

PS. Próbowałem tak na localhost (stąd jego adres w jsonie w zapytaniu) jak i na serwerze - obie próby zakończyły się tak samo.


(kostek135) #2

Nie znam C kratki, więc powiem tylko jak to wygląda z mojego punktu widzenia w Java. Czy na pewno chcesz użyć metody addParameter, bo jak dla mnie ona ustawia parametr, czyli część Uniform Resource Identifier po znaku ‘?’. Jak dla mnie ponieważ jest to post, powinieneś ustawić body requestu.


(I1094114) #3

Cześć, dzięki za odpowiedź.

Spróbowałem wg Twojej rady dodać dane do body requestu:

string json = "{\"notifyUrl\": \"http://google.pl\", \"customerIp\": \"127.0.0.1\", \"merchantPosId\": \"145227\", \"description\": \"RTV market\", \"currencyCode\": \"PLN\", \"totalAmount\": \"15000\", \"extOrderId\":\"Moje zamowienie 29\", \"buyer\": { \"email\": \"jan.kowalski@example.com\", \"phone\": \"654111654\", \"firstName\": \"Jan\", \"lastName\": \"Kowalski\" }, \"products\": [{ \"name\": \"Bezprzewodowa myszka do laptopa\", \"unitPrice\": \"15000\", \"quantity\": \"1\"}]}";
request.AddBody(json);

lecz dostałem tylko:

Oczywiście odpowiedź przyszła w htmlu a nie jsonie :confused: Wydaje mi się, że problem jest gdzieś w kodowaniu/typie wiadomości tylko gdzie miałbym go ustawić skoro w nagłówku wpisałem “aplication/json”?

To są dane testowe z dokumentacji.


(kostek135) #4

Być może klasa klienta REST coś dodaje od siebie, o czym nie wiemy i rozwala format wiadomości. Spróbuj wysłać tę wiadomość przez SoapUI. Jeśli to zadziała, trzeba będzie przepuścić ruch twojej aplikacji przez jakiś monitor http, żeby zobaczyć co faktycznie jest wysyłane.