Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przelewy24.pl - proces i weryfikacja
Forum PHP.pl > Forum > PHP
multiqlti
Witajcie
poszukuje pomocy w zakresie co , gdzie i jak z przelewy24.pl

Zrobilem formularz , ktory poprawnie wysyla zamowienie , laczy sie z przelewy24.pl (sandbox) , zamowienie jest skladane i oplacane , dostaje email potwierdzajacy
Mam plik index.php z formularzem , gdzie wysylam wymagane przez P24 dane.
2 inne pliki to:
finish.php - tutaj przekierowany jest klient po zapłaceniu
verify.php - tutaj wysyłane są jakieś dane przez P24 po transakcji

Gdzie mam umieścić skrypt weryfikujacy transakcje ?
Jak dostać się do danych wysyłanych do verify.php ?

Chodzi mi o sam proces przeplywy danych i dostepu do nich.
Jak dostac sie do $_POST ktore wysyla P24 na verify.php ?

Jestem początkującym z php więc od razu proszę o nie stosowanie "oczywistych" skrótów myślowych wink.gif
nospor
Cytat
Jak dostac sie do $_POST ktore wysyla P24 na verify.php ?
Jest to dokladnie taki sam mechanizm odbiorudanych jakbys odbieral dane z forma u siebie, czyli wszystkie dane sa w tablicy $_POST do ktorej masz dostep w skrypcie verify.php

Gdzie umiescic ten plik? A gdzie ci sie podoba, twoj serwer, twoja strona, umieszczaj gdzie chcesz. Na poczatek moze byc w katalogu glownym twojej strony tak by tyko byl dostepny przez:
http://twojastrona.pl/verify.php
multiqlti
Cześć nospor
strona verify.php zawiera tylko
print_r ($_POST);
print_r ($_GET);
obie tablice są puste po tym jak przekierowuje mnie tam P24
stad moja konsternacja gdzie mam wywolac weryfikacje jesli nie mam dostepu do danych z tablicy
nospor
Cytat
obie tablice są puste po tym jak przekierowuje mnie tam P24
Chyba cos nie ogarniasz. P24 ciebie tam nie przekierowuje w zaden sposob. P24 wysylam tam info po kazdej transakcji. Ty wizualnie tego nie zobaczysz bo to idzie poza przegladarka. Ty masz to poprostu odebrac i zrobic z tym co masz zrobic.
multiqlti
Z pewnością nie ogarniam smile.gif
Jeśli nie widzę "naocznie" tych danych , to jak mogę przekonać się co jest wysyłane ?
Zanim zabiorę się za skrypt weryfikujący to chciałbym mieć pewność , że te dane na pewno są.
Serwer apache odebrał je , otwieram stronę verify,php , uruchamiam podgląd tablicy $_POST i GET i jest pusto.
Jak sprawdzić czy i jakie dane wysłali ?
nospor
Cytat
Serwer apache odebrał je , otwieram stronę verify,php , uruchamiam podgląd tablicy $_POST i GET i jest pusto.
Musisz zrozumiec, ze strona dziala per request i kazdy request ma inne dane. Jak oni ci wyslali cos, apache to odebral, to to bylo tylko dla tego danego request. Jak ty sekunde pozniej wejdziesz na strone, to ty juz tych danych nie masz bo ty robisz zupelnie nowy request.

Jak chcesz sobie zobaczyc co ci oni wysylaja dokladnie, to zapisuj zawartosc POST i GET do logow tudziez pliku i sobie przegladaj co tam jest.
multiqlti
jesli jako adres na jaki oni przekaża mi dane podam im http://blablabla.verify.php?id=12345
to czy moge zrobic skrypt na stronie verify.php ze jesli przekaza mi GET te 12345 to tablice $_POST zapisze do pliku z id=1234 ?
W ten sposob dla kazdego requestu beda mial inny plik z danymi z tablicy ?!
dobrze to rozumiem ?
nospor
No mozesz, tylko po co? Czemu nie zapisywac wszystkiego do jednego pliku jak leci?Toz ty to bedziesz testowal i za kazdym razem mozesz sobie ten plik przejrzec - przeciez bedziesz wiedzial kiedy zrobiles testowy przelew. No ale jak ci wygodniej
multiqlti
w momencie jak przestane testowac , to nie muszę tych danych zapisywać questionmark.gif? tylko za każdym razem jak P24 wyślą requesta z danymi w $_POST to skrypt się wykona ?

nospor
No P24 wysyla ci tam info o transakcji. Zazwyczaj, ludzie transakcje/zamowienia trzymaja w bazie. Wiec jak ci P24 wysle docelowo tam info to ty to info masz zapisac w bazie dla danej transakcji/zamowienia.

Ja ci teraz mowilem o zapisywaniu do pliku, bo chciales zobaczyc co idzie. Docelowo to bedzie zbedne bo wszelkie info powinno byc w bazie razem zamowieniem. No chyba ze ty zamowien nie trzymasz w bazie...
multiqlti
ok , mniej więcej załapałem logikę i przepływ danych bez przeglądarki.
dziękuję za użyteczne informacje smile.gif

to be continued wink.gif

dostaje się do danych $_POST wysyłanych z P24 na verify.php
Zapisuje je do pliku "jak leci" (dla potrzeb testowych)
Jest to jeden ciąg znaków - samych wartości
Starałem się dostać do wartości przez nazwy pól :
  1. foreach ($_POST as $key => $value)
  2. file_put_contents ('post_tablica.txt', $key.'='.$value);


Plik jest pusty , pętla nie działa bo nie widzi żadnych $key
tablica powinna mieć np : $_POST['p24_merchant_id'] = 10293 ;
gdzie p24_merchant_id jest $key a 10293 to $value

jak to możliwe że wysyłają wartość bez nazwy pola

btw. jak testowo wysyłam na ten adres wlasny formularz to pętla mi odbiera "name" i "value"
coś poradzicie ?
Neutral
Napisz to poniżej i podaj odpowiedź.

  1. var_dump($_POST);
nospor
Po pierwsze to nadpisujesz ciagle dane w pliku
Po drugie zapisuj cala tablice bez bawienia sie w klucze i wartosci

  1. file_put_contents('plik.txt', print_r($_POST, true) . print_r($_GET, true), FILE_APPEND);
multiqlti
Cytat(Neutral @ 2.07.2019, 13:43:19 ) *
Napisz to poniżej i podaj odpowiedź.

  1. var_dump($_POST);


Cytat(nospor @ 2.07.2019, 13:44:52 ) *
Po pierwsze to nadpisujesz ciagle dane w pliku
Po drugie zapisuj cala tablice bez bawienia sie w klucze i wartosci

  1. file_put_contents('plik.txt', print_r($_POST, true) . print_r($_GET, true), FILE_APPEND);



PRZEPRASZAM , NAMIESZALEM exclamation.gif!
W zlym miejscu umiescilem Wasze skrypty sad.gif
ale łoś ze mnie sad.gif

wynik jest :

Array
(
[p24_session_id] => 0282bo2tl2sfb47601e5ttjcjs
[p24_amount] => 100
[p24_order_id] => 300139328
[p24_pos_id] => 90716
[p24_merchant_id] => 90716
[p24_method] => 143
[p24_statement] => p24-H13-A93-A28
[p24_currency] => PLN
[p24_sign] => 2937e0571c08b7ba57e6aac9e23c959c
)
Array
(
)
Array
(
)
Array
(
)
Neutral
To znaczy, że nic nie dostałeś od czegoś tam od metody $_POST. Nie otrzymałeś danych, więc pętla foreach nie ma jak przemielić danych, zwraca więc false na wejściu i do ciała pętli nie wchodzi, kod we wnętrzu pętli się nie wykona wtedy.

Jeśli już otrzymałeś dane, to co chcesz z nimi zrobić. Wysłać je gdzie? Podaj jakiś wzór, co masz, a czego oczekujesz, żeby było.
multiqlti
poprawiłem wywołanie skryptu (w złym pliku był sad.gif )
otrzymuje teraz zawartośc $_POST
sprawdzę czy moge je wywołać wg. własnej woli
coś czuję , że po tych moich przejściach pokusze się o spisanie tego tutaj step-by-step dla potomności tongue.gif

to ponownie , podpowiedzcie proszę , czemu ten skrypt nie działa sad.gif

Kod
$ch = curl_init('https://sandbox.przelewy24.pl/trnVerify');
curl_setopt_array($ch, array(
        CURLOPT_POST => true,
        CURLOPT_URL => 'https://sandbox.przelewy24.pl/trnVerify',
        CURLOPT_POSTFIELDS => $_POST,
        CURLOPT_RETURNTRANSFER => true
    ));
        $output  = curl_exec($ch);
        file_put_contents('odpowiedz.txt', var_dump($output));
        if($output === FALSE) {
        die(curl_error($ch));
    }
nospor
nie var_dump a print_r. wyraznie napisalem. I to z drugim parametrem TRUE. Czytaj co dostajesz.
multiqlti
zrobiłem
  1. file_put_contents('plik.txt', print_r($_POST, true) . print_r($_GET, true), FILE_APPEND);

mam w pliku :
Array
(
[p24_session_id] => 7o4339egldlho1eg1ku1ofpk5u
[p24_amount] => 100
[p24_order_id] => 300139409
[p24_pos_id] => 90716
[p24_merchant_id] => 90716
[p24_method] => 143
[p24_statement] => p24-E13-A94-A09
[p24_currency] => PLN
[p24_sign] => 4346e22a21578830f53c77ec4c8c7196
)
Array
(
[ok] => 1
)

próbuje teraz te dane przesłać do weryfikacji z ich serwerem i poniżej skrypt nie zwraca mi niczego a na serwerze p24 nic sie nie weryfikuje (sprawdzam recznie)
  1. $ch = curl_init('https://sandbox.przelewy24.pl/trnVerify');
  2. curl_setopt_array($ch, array(
  3. CURLOPT_POST => true,
  4. CURLOPT_URL => 'https://sandbox.przelewy24.pl/trnVerify',
  5. CURLOPT_POSTFIELDS => $_POST,
  6. CURLOPT_RETURNTRANSFER => true
  7. ));
  8. $output = curl_exec($ch);
  9. file_put_contents('odpowiedz.txt', var_dump($output));
  10. if($output === FALSE) {
  11. die(curl_error($ch));
  12. }


na wielu stronach pokazana jest wysylana tablica , czy można wysłać $_POST w taki sposób , czy trzeba ja przerobić ?
admin własnie mi sprawdził że curl mamy WŁĄCZONY na serwerze , wiec to musi być moja sprawka ze nie śmiga
nospor
file_put_contents('odpowiedz.txt', var_dump($output));
Przeciez ci napisalem
print_r a nie var_dump.......................... x 1000000000

A w tym konkretnym wypadku moze byc i nawet bez print_r czyli poprostu
file_put_contents('odpowiedz.txt', $output);
Neutral
Napisz sobie środowisko testowe do CuRL i tam testuj, następnie jak już załapiesz o co chodzi, wykonaj request'a do server'a API do którego chcesz. Oczywiście dane możesz przekopiować sobie na testowe środowisko, te array ( ... ) przypisując do zmiennej na przykład.

forumphp1.php:
  1. <body style="background: darkolivegreen;">

  1. <?php
  2.  
  3. $ch = curl_init('http://localhost:8000/lisp/forumphp2.php');
  4.  
  5. curl_setopt_array($ch, array(
  6.  
  7. CURLOPT_POST => TRUE,
  8. CURLOPT_POSTFIELDS => ['hello' => 10],
  9. CURLOPT_RETURNTRANSFER => TRUE
  10.  
  11. ));
  12.  
  13. $output = curl_exec($ch);
  14.  
  15. var_dump($output);
  16.  
  17. ?>

  1. </body>


forumphp2.php:
  1. <?php
  2. if(isset($_POST['hello'])) {
  3. echo $_POST['hello']+2;
  4. } else {
  5. echo 44;
  6. }
  7. ?>


multiqlti
Dzięki , pobawiłem się i przetestowałem , znam już zasadę działania.
Po rozmowie z P24 okazało się , że dane są przesyłane poprawnie ,natomiast nasze serwery nie chcą ze sobą rozmawiać na etapie weryfikacji.
"Unknown SSL protocol error"

Mamy SSLa , mamy TLS 1.2
P24 nie jest w stanie sprecyzować czemu serwery się nie lubią.
Szukam dalej przyczyn u nas.

dobra , kolejna rzecz , której nie rozumiem ...
docelowo zawartosc formularza bedzie zapisywana w bazie danych na razie prowizorka dla testow.

Wysyłam formularz do P24 , chce zapisać zawartość $_POST do pliku , plik jest pusty , mimo ,że dane się wysyłają ...
  1. if (isset($_POST['submit'])) {
  2. file_put_contents('katalog_zamowien.txt', print_r($_POST, true), FILE_APPEND);
  3. }

wyglada jakby ten kod nie działał poprawnie
jakas podpowiedz ? smile.gif
nospor
Nie przyszlo ci do glowy, ze skoro dales WARUNEK IF na zapis do pliku to poprostu ten warunek nie jest spelniony?
Jesli to jest kod, ktory reaguje na zwrotke z P24 to przeciez oni postem nie wysylaja zadnego pola o nazwie SUBMIT
multiqlti
ale ja POSTem wysylam formularz wiec POST jest zapelniony danymi ?!
jesli źle myśle to jak zapisać tablicę $_POST która ja wysylam przy kliknieciu ?
przycisk ma name="submit" wiec if powinien spełnić się ?!
nospor
Cytat
Wysyłam formularz do P24 , chce zapisać zawartość $_POST do pliku ,

To jeszcze raz od poczatku i troche opisane bardziej dokladnie: co robisz, gdzie wysylasz i czy odbierasz jakas zwrotke?

Bo jak juz mowilem, ze jesli to jest plik, ktory odbiera zwrotke z P24 to logiczne ze POST nie ma submit tam. Jesli wiec to ta sytuacja to wywal ten IF i zobacz co sie zapije do pliku
multiqlti
malutki przyklad :
plik z pierwszym formularzem jaki wysylam , nie automatyczny skrypt , tylko form wypelniany przez klienta , natomiast ja zapelniam danymi wczesiej przypisanymi
  1. <?php
  2. $p24_session_id=session_id();
  3. $p24_amount="10";
  4. $p24_currency="PLN";
  5. $p24_description="Płatność testowa systemu przelewy24.pl";
  6. $p24_url_status="https://www.URL.COM/cert/verify.php";
  7.  
  8. if (isset($_POST['submit'])) {
  9. file_put_contents('katalog_zamowien.txt', print_r($_POST, true), FILE_APPEND);
  10. }
  11. ?>

<form method="POST" action="https://sandbox.przelewy24.pl/trnDirect">
<input type="hidden" class="form-control" name="p24_session_id" value="<?php echo session_id() ?>" />
<label for="p24_amount" class="form-control">Kwota 1 PLN</label>
<input type="hidden" class="form-control" name="p24_amount" value= "<?php echo $p24_amount ?>" />
<input type="hidden" class="form-control" name="p24_currency" value= "<?php echo $p24_currency ?>" />
<input type="hidden" class="form-control" name="p24_description" value="<?php echo $p24_description ?>" />
<button type="submit" name="submit">Zapłać z przelewy24.pl</button>
</form>

wysylam $_POSTem na adres : https://sandbox.przelewy24.pl/trnDirect
Myślę , że po przyciśnięciu SUBMIT , if powinien być spełniony i dane z tablicy $_POST zapisać się do pliku poza wysłaniem ich na powyższy adres ?!
nospor
action="https://sandbox.przelewy24.pl/trnDirect"
No ale prxzeciez ty slesz tego forma bezposrednio do nich wiec form do twojego skryptu php juz nie zaglada a skoro nei zaglada to i IF sie nie wykonuje...
multiqlti
to jak zapisac taki zrzut z formularza do pliku ?
albo sprawic czy zapisac cala tablice ktora wysylam ?
liczylem ze uda sie w 1-2 linijkach tongue.gif

czy da sie wyslac form i na strone i do mojego skryptu ?

abstrahując od potrzeb , czy da się wysłać form na kilka stron jednocześnie ?
nospor
Wysylasz form normalnie do siebie do skryptu. A potem w tym skrypcie robisz co chcesz czyli np
- zapisujesz do pliku
- wysylasz dalej do P24 przy pomocy np. CURL
multiqlti
Kolejne pytanie smile.gif
wysyłam skrypt "do siebie"
zapisuje dane do pliku/bazy danych
robie curl do https://sandbox.przelewy24.pl/trnDirect
ale klient zostaje na mojej stronie a powienien przejsc dalej do strony platnosci p24 (z wyslanymi danymi $_POST w tle)
zastosowałem :
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
ale ta opcja nic nie robi w moim przypadku , przynajmniej nie to czego sie spodziewalem.
  1. $url = 'https://sandbox.przelewy24.pl/trnDirect';
  2. $fields =['p24_merchant_id' => $_POST['p24_merchant_id'],
  3. 'p24_session_id' => $_POST['p24_session_id'],
  4. 'p24_amount' => $_POST['p24_amount'],
  5. 'p24_currency' => $_POST['p24_currency'],
  6. 'p24_sign' => md5($_POST['p24_session_id'].'|'.$_POST['p24_merchant_id'].'|'.$_POST['p24_amount'].'|'.$_POST['p24_currency'].'|'.$_POST['p24__sign'])];
  7.  
  8. if (isset($_POST['submit'])) {
  9. file_put_contents('dane_z_FORM.txt', print_r($_POST, true), FILE_APPEND);
  10. file_put_contents('dane_wyjsciowe_do_p24.txt', print_r($fields, true), FILE_APPEND);
  11.  
  12. //open connection
  13. $ch = curl_init($url);
  14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  15. curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  16. curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
  17. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  19. // execute!
  20. curl_exec($ch);
  21. // close the connection, release resources used
  22. curl_close($ch);
  23. }


jak moge to przerobic zeby po zapisaniu sie danych do pliku/bazy , klient przeszedł dalej na stronę p24 ?
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.