Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PayU - problem z integracją płatności
Forum PHP.pl > Forum > PHP
tomi127
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>
Turson
Podejrzyj w źródle strony jak wygląda kod html wygenerowanego formularza przez php
tomi127
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.
Turson
Hmm jedyna różnica jaką zauważyłem, to że submit ze statycznego formularza ma atrybut formtarget
tomi127
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.
nospor
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
tomi127
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....
beniaminrychter
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?
orx
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.