Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Przelewy24 weryfikacja płatności

Napisany przez: vegito 15.05.2018, 19:03:44

Witam,

mam problem z implementacją płatności przelewy24. Przerobiłem nieco klasę, która tworzy token, rejestruje płatność i ją werfykuje, lecz nie tutaj problem.

Moim problemem jest sprawdzenie, czy płatność została zrealizowana. Mamy dwa adresy:

$p24_url_return = URI.'potwierdzenie/';
$p24_url_status = URI.'status/.'$lastInserdId.'/';
//$p24_url_status = URI.'paymentinfo.php?idd='.$lastInserdId;

O ile url_return nie robi nic tylko pokazuje informacje to czytając w dokumentacji dowiaduje się, że każda poprawna płatność zwraca dane POST na adres url_status.
Próbowałem już dodać oba adresy takie same i werfykikować czy zostały przesłane jakieś dane POST ale nic z tego. Zmienna w adresie wskazuje mi na ID płatności, którą mam z aktualizować - nie jest to potrzebne bo można porównać po $_POST['p24_session_id'] jednak nie przeszkadzało mi pokazywać ID jako że użytkownik nie będzie tego widział.

Sądzę, że czegoś nie rozumiem lub nie potrafię czytać ze zrozumieniem dokumentacji. Proszę o pomoc, bo nie mam pojęcia gdzie przepadają te dane lub czy url_status jest w ogóle wywoływany.

Pozdrawiam

Napisany przez: trueblue 15.05.2018, 19:16:16

Zakładam, że to tylko przykład, i "co się źle wkleiło", bo

  1. $p24_url_status = URI . 'status/' . $lastInserdId . '/';

a nie:
  1. $p24_url_status = URI . 'status/.'$lastInserdId . '/';

Po co ustawiasz adres powiadomienia z ID transakcji? I tak dostaniesz ją w $_POST.
Może problemem jest właśnie adres powiadomienia. Co się dzieje jeśli wywołasz go bezpośrednio w przeglądarce (URI . 'status/1/' - za URI oczywiście podstaw to prawidłowy adres)?

Napisany przez: vegito 16.05.2018, 14:33:05

Cytat(trueblue @ 15.05.2018, 20:16:16 ) *
Zakładam, że to tylko przykład, i "co się źle wkleiło"
Może problemem jest właśnie adres powiadomienia.


Tak pisałem to ręcznie, a co do adresu zmieniłem na taki sam.

$p24_url_return = URI.'potwierdzenie/';
$p24_url_status = URI.'potwierdzenie/';

wracając na stronę nie otrzymuję żadnych danych POST.

Tak wygląda mój kod:

  1. http://www.php.net/echo '<pre>';
  2. http://www.php.net/print_r($_POST);
  3. http://www.php.net/echo '</pre>';
  4.  
  5. $oPrzelewy24_API = new Przelewy24_API();
  6.  
  7. if (http://www.php.net/isset($_POST['p24_merchant_id']) && http://www.php.net/isset($_POST['p24_sign'])) {
  8.  
  9. if ($oPrzelewy24_API->Verify($_POST) === true) {
  10.  
  11. http://www.php.net/echo 'dziala';
  12.  
  13. }
  14.  
  15. }


Tablica POST jest pusta.

Nawet, stworzyłem osobny plik poza systemem, includowalem klasę bazy danych i po id aktualizowałem rekord płatności. Przyszło mi na myśl że może Przelewy24 wysyła żądanie asynchronicznie i system blokuje dostęp do pliku pod wskazanym adresem, ale dalej nic z tego. Myślę że czegoś nie rozumiem...

Napisany przez: trueblue 16.05.2018, 14:35:57

Na jakiej postawie twierdzisz, że tablica $_POST jest pusta?
Jeśli Ty wywołujesz ten skrypt z przeglądarki, to na pewno tak jest, bo przecież nie dostarczasz danych poprzez POST. Jeśli wywołują go płatności, to nie zobaczysz wyniku print_r i echo.

Jesteś chyba kolejną osobą, która nie rozumie zasady działania płatności.
http://forum.php.pl/Przelewy24_jak_weryfikowac_odpowiedz_zwrotna_t260420.html

Napisany przez: vegito 16.05.2018, 15:15:18

Faktycznie wywołanie print_r było głupie, jednak już próbowałem wszystkiego.

Najważniejsze pytanie czy muszę mieć dostęp do panelu przelewy24? Mam tylko POS_ID i CRC.
Pytam, bo możliwe że tam trzeba ustawić linki gdzie będzie przekazywana odpowiedź o płatności.
Ja myślałem, że wystarczy w skrypcie ustawić link do p24_url_status.

W każdym razie, stworzyłem osobny plik, który wygląda tak:

  1. require_once('../_classes/dbconnect.class.php');
  2. require_once('../_classes/przelewy24.class.php');
  3.  
  4.  
  5. $oPrzelewy24_API = new Przelewy24_API();
  6.  
  7. if (http://www.php.net/isset($_POST['p24_merchant_id']) AND http://www.php.net/isset($_POST['p24_sign'])) {
  8.  
  9. if ($oPrzelewy24_API->Verify($_POST) === true) {
  10.  
  11. $updateStatus = $pdo -> query('UPDATE `przelewy` SET `status` = "1" WHERE `p24_session` = "'.$_POST['p24_session_id'].'"');
  12. $updateStatusExec = $updateStatus -> execute();
  13.  
  14. }
  15.  
  16. }


Dalej nic się nie dzieje, wstyd mi biggrin.gif

Napisany przez: Pyton_000 16.05.2018, 18:00:36

Kod
file_put_contents('p24.log', var_dump($_POST, true), FILE_APPEND);


wstaw to do weryfikacyjnego pliku i będziesz miał output.

Napisany przez: vegito 16.05.2018, 19:41:39

Cytat(Pyton_000 @ 16.05.2018, 19:00:36 ) *
Kod
file_put_contents('p24.log', var_dump($_POST, true), FILE_APPEND);


wstaw to do weryfikacyjnego pliku i będziesz miał output.


Niestety plik nie jest wywoływany, już również przerobiłem metodę Verify żeby wyrzucała mi output w wypadku błędu.
Kiedy ręcznie wywołam plik tworzy mi się .log

Czy jest możliwy problem po stronie ustawień w panelu przelewy24? Płatności wiadomo wiszą ze statusem oczekujący, można je ponoć ręcznie akceptować w panelu jednak przelewy24 nie wysyła żadnego żądania pod adres p24_url_status.

Nie sądzę że url jest zły, bo status i return korzysta z tej samej stałej URI i przekierowanie po transakcji na return działa...

Napisany przez: trueblue 16.05.2018, 19:53:59

Metodę Verify zmieniłeś? I tam (w jej ciele) wstawiłeś fragment, który podał Pyton_000?
Powinieneś to wstawić na początek tego pliku, najlepiej przed require_once.

Napisany przez: vegito 17.05.2018, 16:04:51

Cytat(trueblue @ 16.05.2018, 20:53:59 ) *
Metodę Verify zmieniłeś? I tam (w jej ciele) wstawiłeś fragment, który podał Pyton_000?
Powinieneś to wstawić na początek tego pliku, najlepiej przed require_once.


To na początku pliku weryfikującego czy w ciele metody? Ja wstawiłem to w moim pliku werfikującym który nazwałem getpayment.php na samym początku przed require class payment i dbclass.

Wcześniej modyfikowałem metodę verify, aby zamiast false wyrzuciło mi nie parsowany kod błędu w postaci stringa. Stwierdzam po prostu że mój plik nie chce się wywołać.

  1. #kontrola bledow
  2. /*
  3. ini_set('display_errors', 1);
  4. ini_set('display_startup_errors', 1);
  5. error_reporting(E_ALL); */
  6.  
  7. file_put_contents('p24.log', http://www.php.net/var_dump($_POST, true), FILE_APPEND);
  8.  
  9. require_once('../_classes/dbconnect.class.php');
  10. require_once('../_classes/przelewy24.class.php');
  11.  
  12. $oPrzelewy24_API = new Przelewy24_API();
  13.  
  14. if (http://www.php.net/isset($_POST['p24_merchant_id']) AND http://www.php.net/isset($_POST['p24_sign']) ) {
  15.  
  16. if ($oPrzelewy24_API->Verify($_POST) === true) {
  17.  
  18. $updateStatusss2 = $pdo -> query('UPDATE `przelewy` SET `status` = "1" WHERE `id_session` = "'.$_POST['p24_session_id'].'"');
  19.  
  20. }
  21.  
  22. else {
  23.  
  24. $stringg = 'blad';
  25. $updateStatus = $pdo -> query('INSERT INTO `config` (`key`, `value`) VALUES("p24_error", "'. $stringg .'")');
  26.  
  27. }
  28.  
  29. }


Ten else również nie jest potrzebny, bo po wywołaniu pliku gdyby nie było danych POST powinien się utworzyć pusty .log

Coś robię nie tak?

Napisany przez: trueblue 17.05.2018, 16:23:29

Na początku. Pisałeś o tym, że zmieniałeś metodę Verify, więc zasugerowałem, abyś umieścił właśnie na początku. Nie pisałeś, że już tak zrobiłeś.

W jakim trybie uruchomione są płatności - rzeczywistym czy testowym?

Napisany przez: vegito 17.05.2018, 17:45:30

Cytat(trueblue @ 17.05.2018, 17:23:29 ) *
Na początku. Pisałeś o tym, że zmieniałeś metodę Verify, więc zasugerowałem, abyś umieścił właśnie na początku. Nie pisałeś, że już tak zrobiłeś.

W jakim trybie uruchomione są płatności - rzeczywistym czy testowym?


Testuje od razu secure, niestety nie mam dostępu do sandboxa sądzę że jest inne POSID albo CRC, bo przy generowaniu tokena wyrzuca mi właśnie taki błąd. W secure rejestruje płatność tylko ta zwrotka :/
W panelu przelewy24 nie trzeba nic ustawiać?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)