Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PayU - problem z integracją płatności, Formularz wygenerowany przez PHP nie działa, wpisany z palca tak
tomi127
post 18.06.2014, 15:01:54
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.03.2013

Ostrzeżenie: (0%)
-----


Witam, mam spory problem z integracją płatności poprzez PayU. Doszedłem do momentu, gdzie formularz generowany przez PHP (dane identyczne z przykładowym z dokumentacji) nie działa - tzn. strona PayU wyświetla błąd "Niepoprawne zamówienie. Skontaktuj się ze sklepem. ".
Przejdźmy do konkretów.
Skrypt PHP generujący tablicę z danymi wygląda tak:
  1. $posID = "145227";
  2. $dane = array();
  3. $dane['CustomerIp']='127.0.0.1';
  4. $dane['MerchantPosId']='145227';
  5. $dane['Description']='Order description';
  6. $dane['CurrencyCode']='PLN';
  7. $dane['TotalAmount']='1000';
  8. $dane['Products.Product[0].Name']='Product 1';
  9. $dane['Products.Product[0].UnitPrice']='1000';
  10. $dane['Products.Product[0].Quantity']='1';
  11. $dane['ContinueUrl']='http://localhost/continue';
  12.  
  13. ksort($dane); //sortowanie wedlug klucza alfabetycznie
  14.  
  15. $zlacz = "";
  16. foreach($dane as $d)
  17. {
  18. $zlacz = $zlacz.$d;
  19. }
  20.  
  21. $zlacz = $zlacz."13a980d4f851f3d9a1cfc792fb1f5e50"; //drugi klucz
  22. $podpis = hash("md5", $zlacz);
  23.  
  24. $dane["OpenPayU-Signature"] = "sender=".$posID.";algorithm=MD5;signature=".$podpis;
  25.  
  26. wypiszPotwierdzenie($dane);


Funkcja wypiszPotwierdzenie() wygląda tak:
  1. function wypiszPotwierdzenie($dane)
  2. {
  3. ?>
  4. <div class="formularz">
  5. <form method="post" action="https://secure.payu.com/api/v2/orders">
  6. <?php
  7. foreach($dane as $k => $d)
  8. {
  9. echo '<input type="hidden" name="'.$k.'" value="'.$d.'" />';
  10. }
  11. ?>
  12. <input type="submit" value="" style="border: 0; width:160px; height:35px; background: url('http://static.payu.com/pl/standard/partners/buttons/payu_account_button_01.png');" />
  13. </form>
  14. </div>
  15. <?php
  16.  
  17. }

I teraz najlepsze. Jeżeli w funkcji wypiszFormularz() wkleję przykłądowy formularz tak:
<div class="formularz">tutaj przykladowy formularz</div>
To wszystko działa. Jeżeli formularz jest wygenerowany to już jest błąd. Hash MD5 jest generowany prawidłowo (jest identyczny z tym z przykładu). Co robię nie tak?

Dla jasności wklejam również kod przykładowego formularza:
  1. <body>
  2. <form method="post" action="https://secure.payu.com/api/v2/orders">
  3. <input type="hidden" name="CustomerIp" value="127.0.0.1" />
  4. <input type="hidden" name="MerchantPosId" value="145227" />
  5. <input type="hidden" name="Description" value="Order description" />
  6. <input type="hidden" name="CurrencyCode" value="PLN" />
  7. <input type="hidden" name="TotalAmount" value="1000" />
  8. <input type="hidden" name="Products.Product[0].Name" value="Product 1" />
  9. <input type="hidden" name="Products.Product[0].UnitPrice" value="1000" />
  10. <input type="hidden" name="Products.Product[0].Quantity" value="1" />
  11. <input type="hidden" name="ContinueUrl" value="http://localhost/continue" />
  12. <input type="hidden" name="OpenPayu-Signature" value="sender=145227;algorithm=MD5;signature=34267d8d3844d90af7a4aac24f8ee5e4" />
  13. <button type="submit" formtarget="_blank" />
  14. </form>
  15. </body>
  16. </html>


Ten post edytował tomi127 18.06.2014, 15:17:34
Go to the top of the page
+Quote Post
Turson
post 18.06.2014, 15:04:36
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Podejrzyj w źródle strony jak wygląda kod html wygenerowanego formularza przez php
Go to the top of the page
+Quote Post
tomi127
post 18.06.2014, 15:09:59
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.03.2013

Ostrzeżenie: (0%)
-----


Wygenerowany kod HTML wygląda tak:
  1. <div class="formularz">
  2. <form method="post" action="https://secure.payu.com/api/v2/orders">
  3. <input type="hidden" name="ContinueUrl" value="http://localhost/continue" /><input type="hidden" name="CurrencyCode" value="PLN" /><input type="hidden" name="CustomerIp" value="127.0.0.1" /><input type="hidden" name="Description" value="Order description" /><input type="hidden" name="MerchantPosId" value="145227" /><input type="hidden" name="Products.Product[0].Name" value="Product 1" /><input type="hidden" name="Products.Product[0].Quantity" value="1" /><input type="hidden" name="Products.Product[0].UnitPrice" value="1000" /><input type="hidden" name="TotalAmount" value="1000" /><input type="hidden" name="OpenPayU-Signature" value="sender=145227;algorithm=MD5;signature=34267d8d3844d90af7a4aac24f8ee5e4" /> <input type="submit" value="" style="border: 0; width:160px; height:35px; background: url('http://static.payu.com/pl/standard/partners/buttons/payu_account_button_01.png');" />
  4. </form>
  5. </div>

Co prawda brak jest tu nowych linii, jednak dodanie ."\r\n" nic nie zmieniło.
Jak dla mnie nie ma tu błędu, chyba, że jestem już ślepy od poszukiwania go.

Ten post edytował tomi127 18.06.2014, 15:17:12
Go to the top of the page
+Quote Post
Turson
post 18.06.2014, 15:16:32
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Hmm jedyna różnica jaką zauważyłem, to że submit ze statycznego formularza ma atrybut formtarget
Go to the top of the page
+Quote Post
tomi127
post 18.06.2014, 15:20:52
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.03.2013

Ostrzeżenie: (0%)
-----


Niestety. To nie to. Usunąłem atrybut formtarget i przykładowy formularz wklejony na stronę nadal działa. Także na pewno nie jest to kolejność ukrytych pól, ich pomieszanie we wklejonym formularzu nie spowodowało błędu.
Go to the top of the page
+Quote Post
nospor
post 18.06.2014, 15:20:59
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak dla mnie to o to:
Products.Product[0].Name
jest bledne.
Nie powinno tam byc poprostu Name? Analogicznie reszta

ps: ewentualnie Name[]
ps2: nie, nie zagladalem do dokumentacji PayU

edit: zajrzalem do dokuemntacji.... faktycznie tam tak mają.... dziwnie smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
tomi127
post 18.06.2014, 15:32:17
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.03.2013

Ostrzeżenie: (0%)
-----


nospor nie sad.gif
Zamieszczam wycinek z dokumentacji
Cytat
Produkty

Sekcja Products opisuje listę produktów zamówienia. W opisie używany jest iterator. Każdy produkt jest numerowany wartością z przedziału [0..n]. Przykładowo Products.Product[0].
Parametr Wymagany Opis
Products.Product[0].Name Tak Nazwa produktu.
Products.Product[0].UnitPrice Tak Cena jednostkowa produktu.
Products.Product[0].Quantity Tak Liczba produktów.

Jest tak dlatego, że może być ileś produktów w jednym zamówieniu. I w przykładowym formularzu to działa tak jak jest.

@EDIT:
hahahah, znalazłem!
Przyczyną było pole OpenPayu-Signature. W moim kodzie było OpenPayU-Signature, natomiast w przykładzie OpenPayu-Signature. Zmiana, o dziwo, pomogła smile.gif Co najlepsze nawet w dokumentacji raz mają U duże, a raz u małe....

Ten post edytował tomi127 18.06.2014, 15:33:04
Go to the top of the page
+Quote Post
beniaminrychter
post 1.07.2014, 13:23:48
Post #8





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.07.2014

Ostrzeżenie: (0%)
-----


Witam. Przyłączę się do tematu. Cały ten skrypt działa u mnie bardzo ładnie ale mam problem z parametrem 'ContinueUrl'. Po przejściu przez testową transakcje PayU wyrzuca mnie do corporate.payu.com zamiast na moją docelową stronę gdzie chciałbym zapisać pewne dane w bazie. Mieliście podobny problem?
Go to the top of the page
+Quote Post
orx
post 3.10.2016, 18:38:45
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.02.2010

Ostrzeżenie: (0%)
-----


Podajecie przykład ankiety zamówienia.
A jak wywołać zamówienie zrealizowane i pobrać status po przekierunkowaniu przez payu na stronę sklepu za pomocą php.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 12:49