Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dotpay wartości POST problem
Forum PHP.pl > Forum > Przedszkole
rafi0067
Witam.
Problem następujący. Próbuję zapisać w bazie danych MySql dane z Dotpay wysyłane metodą POST przez Urlc. Dokładnie email i status płatności. Ściana na którą trafiłem wyglada tak że dane otrzymywane bez problemu zapisują się w zewnętrznym pliku dotpay.txt czyli:

CODE
array (
'id' => '758823',
'operation_number' => 'M9979-88759',
'operation_type' => 'payment',
'operation_status' => 'completed',
'operation_amount' => '25.00',
'operation_currency' => 'PLN',
'operation_original_amount' => '25.00',
'operation_original_currency' => 'PLN',
'operation_datetime' => '2020-08-05 23:11:53',
'control' => '',
'description' => 'Dwa pięć',
'email' => 'rafi0067@gmail.com',
'p_info' => 'Test User (rafi0067@gmail.com)',
'p_email' => 'rafi0067@gmail.com',
'channel' => '73',
'signature' => '935c2f737dfe947972de65997d11424061c62de9de05fd6576aeee729a2eeaaa',
)


a kiedy próbuję odwołać się do zmiennej np $_POST['email'] to taka zmienna nie istnieje.

Ktoś ma pomysł jak uzyskać do niej dostęp?
Z góry dziękuję za pomoc.

Tutaj mój cały plik do którego jest odwołanie w Urlc:
CODE
  1. <?php
  2.  
  3. ini_set('display_errors', 'On');
  4.  
  5.  
  6. $servername = "localhost";
  7. $username = "*******";
  8. $password = "*****";
  9. $dbname = "*******";
  10.  
  11. $db = new mysqli($servername, $username, $password, $dbname);
  12.  
  13. if ($db->connect_error) {
  14. echo("Connection failed: " . $db->connect_error);
  15. }
  16.  
  17. file_put_contents('dotpay.txt', var_export($_POST, true), FILE_APPEND);
  18.  
  19. if(isset($_POST['control'])){
  20. $_SESSION['status'] = $_POST['operation_status'];
  21. $_SESSION['email'] = $_POST['email'];
  22.  
  23.  
  24. $sql = "INSERT INTO transkakcje (email, status)
  25. VALUES ('{$_SESSION['email']}', '{$_SESSION['status']}')";
  26.  
  27.  
  28. try{
  29. $db->query($sql);
  30. }catch(Exception $error){
  31. echo $error;
  32. };
  33.  
  34. echo('OK');
  35.  
  36. }else{
  37. var_dump($_SESSION);
  38. var_dump($_POST);
  39. var_dump($_GET);
  40. }
  41. ?>
viking
A skąd wiesz że nie istnieje? Zaloguj dodatkowo wyjątek z bazy. Raczej tu bym szukał problemu.
rafi0067
Dane z dotpaya się zapisują do pliku czyli to wszystko dociera do skryptu php. Dlaczego w takim razie zmienne

$_SESSION['status'] = $_POST['operation_status'];
$_SESSION['email'] = $_POST['email'];

pozostają jako

$_SESSION['status'] = NULL
$_SESSION['email'] = NULL

i nie przypisują się do nich poprawne wartości?
nospor
Przeciez sesje nie sa dzielone miedzy uzytkownikami.... Ty nie masz dostepu do sesji, ktora stworzyl dotpay
rafi0067
Tak tak tylko chodziło o to żeby to się zapisało tylko w mojej sesji.
Zmienne z POST od dotpaya do mojej sesji.
Tu już kombinowałem.
Wcześniej to wyglądało tak że nie było sesji i chciałem przypisać to do zwykłych zmiennych czyli:

$status = $_POST['operation_status'];
$email = $_POST['email'];

i też nie działało.
nospor
Toc ci przeciez tlumacze: sesje sie nie dziela. Sesja/request dotpay nie moze pisac do Twojej sesji. Tyle w temacie.

Lepiej napisz co docelowo chcesz osiagnac a nie to co ci sie wydaje droga do tego
rafi0067
Cel jest taki żeby wsadzić do bazy danych email osoby dokonującej transakcji i status transakcji z dotpay'a.

Teraz spróbuje te dane wyciągnąć z pliku w którym udało mi się je złapać i dopiero wtedy zapisać w bazie danych. Innego pomysłu nie mam jak na razie.
viking
Dane masz w tablicy post. Skoro var_export je wypisuje to znaczy że masz inny błąd. Możesz się zastosować do tego co już napisałem wczoraj?
Oczywiście błędy trzeba sobie włączyć. Zobacz pierwszy komentarz https://www.php.net/manual/en/class.mysqli-sql-exception.php
rafi0067
Ok wszystko działa tak jak powinno. Chyba zaczęło działać po modyfikacji części z SQL INSERT INTO ale za dużo zmieniałem i nie pamiętam dokładnie.

Dzięki wielkie za pomoc.

Tutaj działający kod:
CODE
  1. <?php
  2.  
  3. ini_set('display_errors', 'On');
  4.  
  5.  
  6. $servername = "localhost";
  7. $username = "lessus_gjj";
  8. $password = "QuMv0x4Hs";
  9. $dbname = "lessus_gjj";
  10.  
  11. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  12.  
  13. try {
  14. $db= new mysqli($servername,$username,$password,$dbname);
  15. } catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18.  
  19.  
  20. file_put_contents('dotpay.txt', var_export($_POST, true), FILE_APPEND);
  21.  
  22. if(isset($_POST['email'])){
  23. $status = $_POST['operation_status'];
  24. $email = $_POST['email'];
  25.  
  26. try{
  27. $sql = "INSERT INTO transkakcje (email, status)
  28. VALUES ('$status', '$email')";
  29. }catch(Exception $e){
  30. echo $e;
  31. };
  32.  
  33. try{
  34. $db->query($sql);
  35. }catch(Exception $error){
  36. echo $error;
  37. };
  38.  
  39. echo('OK');
  40.  
  41. }
  42. ?>
viking
Po co ci try/catch na zwykły string? Jeśli chcesz to użyć inaczej niż do zabawy to ja bym ci poradził logować wszystko z POST oraz poprawić echo $e; w catch (oni tam jeszcze FAIL oczekują?).
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.