Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przelewy24 weryfikacja płatności
vegito
post 15.05.2018, 19:03:44
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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
Go to the top of the page
+Quote Post
trueblue
post 15.05.2018, 19:16:16
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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)?


--------------------
Go to the top of the page
+Quote Post
vegito
post 16.05.2018, 14:33:05
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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. echo '<pre>';
  2. print_r($_POST);
  3. echo '</pre>';
  4.  
  5. $oPrzelewy24_API = new Przelewy24_API();
  6.  
  7. if (isset($_POST['p24_merchant_id']) && isset($_POST['p24_sign'])) {
  8.  
  9. if ($oPrzelewy24_API->Verify($_POST) === true) {
  10.  
  11. 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...

Ten post edytował vegito 16.05.2018, 14:37:22
Go to the top of the page
+Quote Post
trueblue
post 16.05.2018, 14:35:57
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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.
Temat: Przelewy24 jak weryfikowac odpowiedz zwrotna

Ten post edytował trueblue 16.05.2018, 14:37:16


--------------------
Go to the top of the page
+Quote Post
vegito
post 16.05.2018, 15:15:18
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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 (isset($_POST['p24_merchant_id']) AND 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
Go to the top of the page
+Quote Post
Pyton_000
post 16.05.2018, 18:00:36
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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


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

Ten post edytował Pyton_000 16.05.2018, 18:00:49
Go to the top of the page
+Quote Post
vegito
post 16.05.2018, 19:41:39
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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...

Ten post edytował vegito 16.05.2018, 19:43:03
Go to the top of the page
+Quote Post
trueblue
post 16.05.2018, 19:53:59
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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.


--------------------
Go to the top of the page
+Quote Post
vegito
post 17.05.2018, 16:04:51
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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', 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 (isset($_POST['p24_merchant_id']) AND 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?
Go to the top of the page
+Quote Post
trueblue
post 17.05.2018, 16:23:29
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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?


--------------------
Go to the top of the page
+Quote Post
vegito
post 17.05.2018, 17:45:30
Post #11





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.02.2018

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


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ć?
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: 28.03.2024 - 21:56