czwartek, 27 maja 2010

OBSŁUGA PŁATNOŚCI.PL W PHP

Musiałem ostatnio dorobić moduł płatności do strony, gdzie nie dało się zainstalować gotowego modułu, bo go nie było :) Z szybkiego przeglądu forów wynika, że bractwo programistyczne niechętnie dzieli się kodem w tym temacie. Ja postanowiłem się podzielić podstawowym kodem. Pewnie będzie wymagał dopracowania, ale zawsze lepiej zacząć od czegoś, co chociaż w części jest zrobione.

Jak działają platnosci.pl w skrócie

Oczywiście pisząc moduł dobrze się zapoznać z dokumentacją techniczną, ale chodzi mi o skrót, który wygląda mniej więcej tak:
1. Nasz skrypt wysyła POST na stronę platnosci.pl z parametrami, z których obowiązkowe to:
- pos_id - numer tzw POSa (punktu usługowego), czyli jakby jednostki przez którą ma to iść, można takich tworzyć wiele na jednym koncie i różnie je konfigurować,
- pos_auth_key - kod autoryzacyjny nadany przez serwis płatności,
- session_id - unikalny identyfikator,
- amount - kwota zakupu w groszach,
- desc - krótki opis,
- js - info, czy przeglądarka klienta obsługuje JS
- first_name, last_name, client_ip, email - czyli wiadomo.

2. Klient coś tam sobie klika po ich stronie i na końcu jest przekierowany na jeden z dwóch adresów, które podajemy w konfiguracji:
- pierwszy jest w sytuacji jak wszystko poszło OK np: mojadomena.pl/ok.php
- drugi w sytuacji kiedy coś nawaliło np: mojadomena.pl/error.php
do obydwu adresów mogą być przekazane dodatkowe parametry GETem np: mojadomena.pl/error.php?error=%error_id%&order_id=%order_id%
UWAGA PRZEKIEROWANIE NA ok.php NIE OZNACZA, ŻE MAMY JUŻ KASĘ NA KONCIE - OZNACZA, ŻE RACZEJ POSZŁO OK, ALE TRZEBA TO SPRAWDZIĆ.

3. Ostatni etap to sprawdzanie statusów płatności. Nie potrzebujemy do tego crona. Platnosci.pl same informują nas o tym, że zaszła zmiana i wtedy musimy ją pobrać. Służy do tego 3 skrypt: mojadomena.pl/online.php Jest on wywoływany przez pltnosci.pl w momencie gdy zajdzie jakaś zmiana i wtedy on sam powinien zapytać płatności o zmianę i ją obsłużyć.

implementacja

ad1. Ta część jest prosta i zrealizuje ją prosty formularz, przykładowy jest w klasie platnoscipl - mojego autorstwa, ale mocno inspirowana klasą z prestashopa ;)w metodzie: orderForm(). Prawie identyczny formularz jest w dokumentacji platnosci.pl. Przed wyświetleniem formularza należy stworzyć order metodą podobną do: createOrder(); żeby się ustawiły pola w klasie platnoscipl wykorzystywane w formularzu;]

ad2. Jako error.php i ok.php posłuży skrypt z szablonem naszej strony, który w części głównej wypluje coś w rodzaju: ok.php jest analogiczny, tylko bez errora i z weselszym tytułem, więc nie piszę...

ad3. I na koniec zostaje plik komunikujący się "na serio" z płatnościami: online.php - też mój, ale wykorzystane fragmenty kodu modułu płatności do prestashopa, bo tak prościej.

Pliki są wycięte z wersji beta aplikacji, którą piszę, następnie okrojone i dodatkowo okomentowane i po tym okrojeniu już nie testowane, więc mogły wkraść się drobne błędy ;) Myślę, że z nimi dużo łatwiej niż z samą treścią dokumentacji ;)

20 komentarzy:

  1. Dzięki,przydało się..

    OdpowiedzUsuń
  2. dzieki zobacze co wyklece :)

    OdpowiedzUsuń
  3. Witam,

    Okey, ale jak pokonać pierwszy krok czyli wysłanie formularza do bazy z jednoczesnym wywołaniem tego linku do płatności.pl.

    Dziękuje za pomoc,
    Adam

    OdpowiedzUsuń
  4. yy :) rozumiem, że chodzi Ci o to, że nie możesz wysłać jednocześnie posta do siebie i do płatności?? można wysłać jakoś dziwacznie, ale najczęściej jest to robione tak, że wysyłasz posta do siebie i wyświetlasz drugi formularz, a w nim wszystkie wartości w input hidden Twój skkrypt wyświetla taki formularz i nap napis: "za chwilkę zostaniesz przekierowany do fajnych płatności ;)" a pod formularzem jest skrypt: document.forms['formularz'].submit(); albo jeszcze to wywołane z jakimś setTimeout żeby zdążył przeczytać... Czyli na prawdę są to 2 kroki, ale jeden automatyczny ;) BTW warto dodać do tego formularza zwykły przyckisk typu - "kliknij jeśli nie zostałeś automatycznie przekierowany", bo czasem jakiś błąd w skryptach, wtyczka czy cóś może spowodować wysypanie skryptu ;) Nie wiem czy to jest najlepsze, ale takie się spotyka w magento tak jest zrobione, w modułach wordpressa gdzieś widziałem... można też najpierw zapisać sobie wszystko w bazie, a potem wywalić taki sam formularz z przyciskiem zapłać przez ppl - tak jest chyba w prestashop...

    OdpowiedzUsuń
  5. Miałem straszny problem z wysłaniem POSTem zapytania i odczytaniem odpowiedzi.

    Nie dawałem rady klasycznym do_post_request, dopiero Twoje rozwiązanie mi pomogło. Po stoktroć dzięki

    OdpowiedzUsuń
  6. Zastanawiam się, po co skrypt "komunikujący się na serio z płatnościami". Chodzi mi o ten fragment z wysyłaniem post samemu do platnosci.pl by potwierdzić status.

    Wydaje mi się to niepotrzebne, skoro platnosci.pl same przysyłają tę informację do online.php. A ponieważ przysyłają jeszcze dodatkowo jakieś autoryzacyjne kody, to nikt nie podrobi żądania.

    OdpowiedzUsuń
  7. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  8. Thank you for your article! I hope you will help me :(

    in online.php - there are 3 steps yes?
    1. platnosci sends POST data - I check sig, pos_id, etc
    2. I send platnosci /paygw/ISO/Payment/get with pos_id, session_id, etc
    3. platnosci sends text file with status and trans_xx parameters

    This works and I get a status OK at step 3. The problem is step 1 (platnosci sends POST) repeats 100x and I am sent an email that there was an error. What could I be doing wrong?

    Thank you! (you can reply in polish too, I can use google translate :) )

    OdpowiedzUsuń
  9. If platnosci doesn't get output "OK" from your "online.php" script, they are repeating request every minute, 5 minutes, hour.... until they don't recieve clear "OK". After many requests with no "OK" message They are sending an email. They need this "OK" to know that you recieved message (server is not down etc.). Check if your oonline.php outputs clear "OK", no errors, notices, white characters and other stuf like that...

    OdpowiedzUsuń
  10. Got it! I had some errors that was causing it not to read the 'OK'. Thank you!

    OdpowiedzUsuń
  11. Po pierwsze skrypt się przydał, dziękuję serdecznie, bo ostatnio zapomniałem podziękować.

    Po drugie oczywiście nie miałem racji zastanawiając się po co skrypt wysyłający komunikujący się z płatnościami, skoro platnosci.pl już komunikują się z nami.

    Komunikują się i czekają na OK, ale same nie przysyłają żadnej informacji poza autoryzacją. Dają tylko znak, że coś się zmieniło. Byłem przekonany, że przy okazji wysyłają dane o nowym statusie - swoją drogą nie widzę powodu dla którego tego nie robią, ale fakt jest faktem, że trzeba samemu wysłać żądanie do nich.

    Artykuł ten jest bardzo istotny, bo tak jak mówiłeś programiści niechętnie dzielą się publicznie swoimi skryptami.
    Jednak opis techniczny do API faktycznie warto przeczytać.

    Dzięki raz jeszcze i pozdrawiam.

    Ostatecznie i tak warto napisać swoje rozwiązania bo szkoda oddawać 3% od transakcji systemowi platnosci :)

    OdpowiedzUsuń
  12. A jak wygenerować sig w formularzu rozpoczynającym płatność? bo wywala mi błąd - błędny sig

    OdpowiedzUsuń
  13. Dzięki ;) Przydało się bardzo ;)

    OdpowiedzUsuń
  14. Ja osobiście wolę płatności od https://www.cashbill.pl/pobierz/integracje gdyż są bardziej bezpieczne i łatwiejsze do wdrożenia. Liczy się też bardzo pobierana prowizja, a ten system co opisujesz ma jedne z najwyższych dlatego wybieram CashBill.

    OdpowiedzUsuń
  15. Daniel Wardziak5 września 2018 20:50

    Nigdy nie bawiłem się w programowanie więc nie bardzo bym wiedział jak te płatności wprowadzić do siebie do sklepu. Dzięki systemu płatniczemu https://www.przelewy24.pl/metody-platnosci/przelewy-i-przekazy-bankowe mam chociaż pewność, że działając na gotowym skrypcie moje płatności będą w prawidłowy sposób realizowane.

    OdpowiedzUsuń
    Odpowiedzi
    1. Jeżeli chodzi o rozwiązania dla e sklepów, to od siebie polecam program Sendit. Oprogramowanie posiada szereg licznych funkcji takich jak integrację z różnymi kurierami, czy też zaawansowany tracking nadanych przesyłek https://www.sendit.pl/sledzenie-przesylek/. Dzięki takim funkcjonalnościom w prosty i szybki sposób można nadać nawet dużą ilość paczek.

      Usuń
  16. Skoro już mowa o płatnościach to dla mnie nowoczesną technologią jest BLIK. Nie wyobrażałam sobie, że tak łatwo i szybko można płacić przy użyciu tego systemu! Na stronie https://www.przelewy24.pl/blog/dlaczego-warto-placic-blik-iem poznacie też inne powody, dla których warto płacić plikiem, więc koniecznie sprawdźcie!

    OdpowiedzUsuń
  17. Najlepiej w ten sposób dokonywać płatności w sieci. Z pomocą https://bluemedia.pl/oferta/platnosci/platnosci-online szczególnie, komfortowo, wygodnie i szybko. Przelew u adresata jest wtedy błyskawicznie.

    OdpowiedzUsuń
  18. Jeśli już prowadzisz lub planujesz założyć sklep internetowy, chciałbym zaproponować listę niezawodne taśmy pakowe https://tcmservice.pl/ .Każdy wie, jak istotne jest bezpieczne zapakowanie przesyłki podczas transportu.

    OdpowiedzUsuń

Masz uwagę, sugestię, albo po prostu ochotę - zostaw komentarz