Witam wszystkich
Mam problem z integracją płatności PayU na swojej stronie, pomoc techniczna nie jest skora do pomocy i dlatego pisze tutaj.
Stworzyłem na swojej stronie formularz dotacji dla fundacji, w której uzytkownik może wybrac kwotę wpłaty z sześciu różnych kwot (pola typu Radio w formularzu), wpisuje imie, nazwisko, adres email i wciska przycisk płacę z PayU.
Wydaje mi się że wszystkie pola wypełniłem poprawnie, aczkolwiek mam problem z polem “totalAmount” ponieważ w ich formularzu to pole jest jedno z konkretna kwotą, a ja daje wybór kwoty, więc to powinno być chyba dynamiczne.
Według mnie po prostu gdy użytkownik wybierze jedną z opcji na Twojej stronie to Ty wstawiasz tę sumę w pole totalAmount i wysyłasz do PayU. Przecież do PayU nie wysyłasz ileś tam prawdopodobnych kwot tylko jedną konkretną.
No tak, ale to działa automatycznie, bez mojego udziału. Użytkownik wypełnia formularz zaznaczając kwote, wpisując dane o sobie i klika w przycisk “Płacę z PayU”, po czym zostaje przeniesiony na ich stronę i tylko się loguje, potwierdza i po sprawie.
Ale w jaki sposób komunikujesz się z PayU, jakie dane wysyłasz do PayU? Klikając w przycisk może i Cie przeniesie do PayU, ale sam musisz zdefiniować jakie dane przekazujesz do PayU. Przecież dane o cenie, walucie, produkcie itd. sam wysyłasz.
Formularz ma pola, które mają odpowiednie nazwy narzucone przez PayU, np. pole Imię ma atrybut “name=buyer.firstName” itd. One przekazują do PayU dane, które wprowadza użytkownik.
W ich instruktażowym formularzu, jest pole “name=totalAmount”, które przekazuje konkretną sume do wpłaty, ale to jest jedna, z góry ustalona kwota. A ja chce dać użytkownikowi do wyboru kilka kwot, żeby sobie wybrał, czy chce wpłacić 100 zł czy 500 zł. I tutaj nie moge tego pola odgórnie wpisać do formularza.
@jacula Zamiast pola typu hidden zrób select. Doczytaj o różnych polach w formularzach html i jak one działają to zobaczysz, że problem który rozwiązujesz jest trywialny :).
Masz rację, select jest dobrym wyborem, tak samo jak “radio” po wyboru którego, reszta jest pomijana. Różnica chyba tylko w wyświetlaniu, tutaj rozwijalna lista a tam wszystkie opcje widoczne, tylko do zaznaczenia.
na mój rozum, po wyborze jednej z opcji, czy to w jednym czy drugim przypadku, formularz powinien wysłać odpowiednie zapytanie do systemu PayU.
Według mnie, problem leży w tej linijce <input type="hidden" name="OpenPayu-Signature" type="hidden" value="sender=145227;algorithm=SHA-256;signature=565f9f4dda43c8e24ccab4472133d680e2aa58e1f58bea845c4cf2926965144d">
gdzie w wartości mamy podane
sender - nasz numer klienta payu
algorytm wysyłki
i tutaj najciekawsze
sygnature wyliczoną oddzielnie dla każdego formularza. Ponoć jak się zmieni w ich oryginalnym formularzu (tym z dokumentacji) cenę, to już wyskakuje błąd, gdyż trzeba na nowo wyliczyć sygnaturę. I teraz nie wiem, czy mogę wyliczyc sygnaturę z np. sześcioma polami, niech będą select, dla których są różne pola totalAmount
Czytałem to zdanie dzisiątki razy. Nie jest zalecana, nikt nie potrafi odpowiedzieć dlaczego, może dlatego że do innych płatności czyt. sklepy maja przygotowane gotowe moduły, a tutaj niestandardowa rzecz i zaczynaja się schodki.
Nie mam pomysłu jak inaczej niż formularz zrobić taki punkt wpłat na stronie.
@jacula Pole kwoty załatwisz tak jak pisałem - selectem. Pozostaje jednak najważniejsza kwestia. Musisz przed wysłaniem formularza obliczyć poprawnie wartosć pola OpenPayu-Signature zgodnie z algorytmem opisanym na stronie http://developers.payu.com/pl/restapi.html#references_form_signature. Jeśli wszystkie pola, poza kwotą, są stałe to mógłbyś obliczyć sygnaturę dla każdej z kwot i podmieniać ją javascriptem w zależności od wybranej kwoty. Jeśli to jest niemożliwe (wartości są dynamiczne) to musisz ją obliczać po stronie serwera (np. dlatego że w jej skład wchodzi Twój klucz prywatny).
Formularz, który wysyłasz sobie do kontrolera. Tam odczytujesz parametry, przetwarzasz co tam chcesz - tworzysz strukturę danych jak w dokumentacji, podpisujesz ją i wysyłasz POSTem do payu. Różnica jest taka, że nie wysyłasz formularza do payu tylko do siebie a od siebie wysyłasz requesta do PayU.
Robisz drugi kontroler, który słucha “informacji” od PayU - payu notify i ten uaktualnia statusy płatności.
Czyli w skrócie:
a) przez formularz - przeglądarka komunikuje się z PayU
b) REST API - przeglądarka komunikuje się z backendem a backend z PayU