Integracja aplikacji ASP.NET MVC z transferuj.pl

Dzisiaj na ruszt wrzucimy integrację z systemem automatycznych płatności transferuj.pl. Sprawa wydaje się nie być trudna, ale spędziłem za pierwszym razem nad tym trochę czasu zanim wszystko odpowiednio skonfigurowałem, a w Internecie na ten temat materiałów brak. Dokumentacja do integracji jest i to jest dobra, jednak co na chłopski rozum opisane to łatwiej zrozumieć.

Pierwszym krokiem, który należy podjąć jest założenie konta. Później należy je aktywować bla bla bla… na szczęście do testów nie jest potrzebny przelew weryfikacyjny. Do integracji w sensie stricte będą nam potrzebne: numer sprzedawcy i kod bezpieczeństwa. Kod bezpieczeństwa można sobie dowolnie zmienić, ale ten nadawany automatycznie wygląda spoko. A skoro jesteśmy już zalogowani to możemy od razu skonfigurować konto. Najpierw w sekcji powiadomienia trzeba ustawić tak:

  • Adres powiadomienia URL – puste,
  • Zezwól na nadpisanie – tak,
  • kod bezpieczeństwa – jak wyżej napisałem,
  • weryfikuj certyfikat serwera – jeżeli posiadamy SSL to lepiej ustawić na tak, jeżeli nie posiadamy to musi zostać na nie,
  • Wymagaj sumy kontrolnej – tak

Dalej w transakcje:

  • Rodzaj akceptowanych transakcji – bezpieczniej ustawić na poprawne,
  • Próg niedopłaty – bezpieczniej ustawić na 0,00 (max jest chyba 2 PLN)

Dwie powyższe wartości można ustawić wedle uznania, jednak ja preferuje właśnie takie podejście jak przedstawiłem.

Dalej w danych odbiorców płatności:

  • strony internetowe zintegrowane z transferuj.pl – wiadomo 🙂

A na koniec ustawić tryb testowy na włączony. Nr rachunku bankowego dla testów nie jest wymagany.

W kwestii informacyjnej podpowiem jeszcze czym jest suma kontrolna. Najogólniej mówią jest to md5 z sumy łańcuchów znaków na które składają się: numer sprzedawcy, identyfikator transakcji, kwota, crc (czyli np. identyfikator zamówienia albo płatności w systemie albo jakiś losowy ciąg znaków, co kto lubi, ale polecam identyfikator zamówienia albo płatności, bo później za pomocą crc dostaniemy się do odpowiedniego zamówienia w naszym systemie) i kod potwierdzający.

Skoro uporaliśmy się już z konfiguracją konta to możemy przejść do tego co lubimy najbardziej czyli do kodu. Najpierw musimy do widoku przekazać odpowiednie parametry (w formularzu będą ukryte), które serwis transferuj.pl wymaga do poprawnego przeprowadzenia transakcji. Dane do transferuj przesyłamy za pomocą zwykłego formularza:

<form action="https://secure.transferuj.pl" method="post" accept-charset="utf-8">          
    @Html.Hidden("id")          
    @Html.Hidden("kwota")          
    @Html.Hidden("opis")          
    @Html.Hidden("crc")          
    @Html.Hidden("md5sum")          
    @Html.Hidden("nazwisko")          
    @Html.Hidden("email")          
    @Html.Hidden("pow_url")          
    @Html.Hidden("pow_url_blad")          
    @Html.Hidden("wyn_url")         
    <input type="submit" value="Zapłać teraz" /> 
</form>

I po kolei:

  • id – numer sprzedawcy
  • kwota – WAŻNE grosze od złotówek muszą być oddzielone kropką
  • opis – jak sama nazwa wskazuje
  • crc – wspominałem wyżej
  • md5sum – suma kontrolna (niżej podam kod, który taką sumę oblicza)
  • nazwisko – dane klienta (najlepiej podać imię i nazwisko)
  • email – email klienta
  • pow_url – adres na który transferuj przekieruje użytkownika w momencie gdy transakcja zakończy się sukcesem
  • pow_url_blad – adres na który transferuj przekieruje użytkownika w momencie gdy transakcja zakończy się niepowodzeniem
  • wyn_url – adres na który transferuj da odpowiedź o przeprowadzonej transakcji (i pod tym adresem będziemy zmieniać status płatności)

 

Te wartości są przez transferuj obowiązkowe, ale nic nie stoi na przeszkodzie, żeby tam coś jeszcze od siebie dorzucić 🙂

Po wciśnięciu przez użytkownika wiadomego przycisku zostaje on przekierowany na stronę transferuj i tam dokonuje transakcji. Po zaksięgowaniu wpłaty zostaje odesłany pod odpowiedni podany przez nas adres i rola użytkownika na tym się kończy, natomiast my, jako programiści, zbliżamy się do celu. Teraz musimy odebrać od serwera transferuj odpowiedź wyniku transakcji. W tym celu tworzymy w kontrolerze akcję np. taką:

public ActionResult Report()
{
    string id = Request.Form["id"];
    string trId = Request.Form["tr_id"];
    string trDate = Request.Form["tr_date"];
    string trCRC = Request.Form["tr_crc"];
    string trAmount = Request.Form["tr_amount"];
    string trPaid = Request.Form["tr_paid"];
    string trDesc = Request.Form["tr_desc"];
    string trStatus = Request.Form["tr_status"];
    string trError = Request.Form["tr_error"];
    string trEmail = Request.Form["tr_email"];
    string md5Sum = Request.Form["md5sum"];
     
    if (!ContainsNullOrEmptyString(id, trId, trDate, trAmount, trCRC))
    {
        Response.Write("TRUE");
        
        Payment payment = GetPayment(trCRC);
        bool isSuccessful = IsValid(md5Sum, trId, trAmount, trCRC);
     
        if (isSuccessful == true)
        {
            // zmieniamy status płatności
        }
    }
     
    return View();
}

i tworzymy do niej PUSTY WIDOK

Na początku odbieramy wartości odesłane nam przez transferuj i sprawdzamy czy aby na pewno nie są nullami

private bool ContainsNullOrEmptyString(params string[] strings)
{
    var IsEmpty = false;
    foreach (var item in strings.ToList())
    {
        IsEmpty = String.IsNullOrEmpty(item) ? true : IsEmpty;
    }
        
    return IsEmpty;
}

Jeżeli nie są to dajemy odpowiedź do transferuj, że gitara gra. Dalej musimy też (dla własnego bezpieczeństwa) sprawdzić czy odesłana suma kontrolna zgadza się z naszą:

public bool IsValid(string md5Sum, string id, string amount, string crc)
{
            
    if (md5Sum.ToLower() == CheckMd5Sum("numer sprzedawcy" + id + amount + crc + "kod bezpieczeństwa").ToLower())
    {
        return true;
    }
    else
    {
        return false;
    }
}

Jeżeli wszystko jest git to zmieniamy status transakcji w naszej aplikacji i robimy co tam jeszcze nam się podoba. I to tyle. Koniec zabawy.

Na zakończenie jeszcze powiem, że akurat transferuj.pl wybrałem ze względu na tryb testowy, który można bezboleśnie samemu włączyć i wyłączyć, a do tego mają jedne z najniższych prowizji. Sama integracja też nie jest trudna (jak widać), dlatego mogę polecić 🙂

Oficjalna dokumentacja: https://transferuj.pl/dokumentacje.html

Czekam na komentarze i do zobaczenia 🙂

Reklamy

2 comments

  1. Pingback: dotnetomaniak.pl

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s