Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] Dotpay wartości POST problem

Napisany przez: rafi0067 5.08.2020, 22:46:08

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. http://www.php.net/ini_set('display_errors', 'On');
  4. http://www.php.net/error_reporting(E_ALL);
  5.  
  6. http://www.php.net/session_start();
  7.  
  8. $servername = "localhost";
  9. $username = "*******";
  10. $password = "*****";
  11. $dbname = "*******";
  12.  
  13. $db = new mysqli($servername, $username, $password, $dbname);
  14.  
  15. if ($db->connect_error) {
  16. http://www.php.net/echo("Connection failed: " . $db->connect_error);
  17. }
  18.  
  19. file_put_contents('dotpay.txt', http://www.php.net/var_export($_POST, true), FILE_APPEND);
  20.  
  21. if(http://www.php.net/isset($_POST['control'])){
  22. $_SESSION['status'] = $_POST['operation_status'];
  23. $_SESSION['email'] = $_POST['email'];
  24.  
  25.  
  26. $sql = "INSERT INTO transkakcje (email, status)
  27. VALUES ('{$_SESSION['email']}', '{$_SESSION['status']}')";
  28.  
  29.  
  30. try{
  31. $db->query($sql);
  32. }catch(Exception $error){
  33. http://www.php.net/echo $error;
  34. };
  35.  
  36. http://www.php.net/echo('OK');
  37.  
  38. }else{
  39. http://www.php.net/var_dump($_SESSION);
  40. http://www.php.net/var_dump($_POST);
  41. http://www.php.net/var_dump($_GET);
  42. }
  43. ?>

Napisany przez: viking 6.08.2020, 05:32:09

A skąd wiesz że nie istnieje? Zaloguj dodatkowo wyjątek z bazy. Raczej tu bym szukał problemu.

Napisany przez: rafi0067 6.08.2020, 09:16:19

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?

Napisany przez: nospor 6.08.2020, 11:00:45

Przeciez sesje nie sa dzielone miedzy uzytkownikami.... Ty nie masz dostepu do sesji, ktora stworzyl dotpay

Napisany przez: rafi0067 6.08.2020, 14:53:11

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.

Napisany przez: nospor 6.08.2020, 14:58:51

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

Napisany przez: rafi0067 6.08.2020, 20:50:27

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.

Napisany przez: viking 7.08.2020, 04:38:50

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

Napisany przez: rafi0067 7.08.2020, 13:21:04

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. http://www.php.net/ini_set('display_errors', 'On');
  4. http://www.php.net/error_reporting(E_ALL);
  5.  
  6. http://www.php.net/session_start();
  7.  
  8. $servername = "localhost";
  9. $username = "lessus_gjj";
  10. $password = "QuMv0x4Hs";
  11. $dbname = "lessus_gjj";
  12.  
  13. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  14.  
  15. try {
  16. $db= new mysqli($servername,$username,$password,$dbname);
  17. } catch (Exception $e) {
  18. http://www.php.net/echo $e->getMessage();
  19. }
  20.  
  21.  
  22. file_put_contents('dotpay.txt', http://www.php.net/var_export($_POST, true), FILE_APPEND);
  23.  
  24. if(http://www.php.net/isset($_POST['email'])){
  25. $status = $_POST['operation_status'];
  26. $email = $_POST['email'];
  27.  
  28. try{
  29. $sql = "INSERT INTO transkakcje (email, status)
  30. VALUES ('$status', '$email')";
  31. }catch(Exception $e){
  32. http://www.php.net/echo $e;
  33. };
  34.  
  35. try{
  36. $db->query($sql);
  37. }catch(Exception $error){
  38. http://www.php.net/echo $error;
  39. };
  40.  
  41. http://www.php.net/echo('OK');
  42.  
  43. }
  44. ?>

Napisany przez: viking 7.08.2020, 13:51:32

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

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