Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przelewy24 - jak weryfikować odpowiedź zwrotną
monetek
post 5.05.2018, 14:57:28
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.05.2018

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


Witam,

Od kilku dni próbuję swoich sił z przelewami24. Kod którego używam jest poniżej. Płatność przechodzi, email dostaje o rozpoczęciu i potwierdzeniu płątności ale w kodzie nie wiem jak mogę to zweryfikować. W sensie zapisałem sobie do sesji $oPrzelewy24_API->Verify($_POST) i mam odpowiedź true. Ale jest ona zwracana niezależnie czy płatność jest potiwerdzona czy klient po prostu odrzuci ją w trakcie. Pytanie które nie daje mi spać. Jak zweryfikować wynik tak, żeby w momencie kiedy ktoś ZAPŁACIŁ ja o tym wiem i np zapisuje sobe do zmiennej sesji wynik "zapłacił" i na odwrót.

plik przelewy24.php
  1. <?php
  2.  
  3. define('PRZELEWY24_MERCHANT_ID', '69694');
  4. define('PRZELEWY24_CRC', '2ebb21475adfaf03');
  5. // sandbox - środowisko testowe, secure - środowisko produkcyjne
  6. define('PRZELEWY24_TYPE', 'sandbox');
  7.  
  8. class Przelewy24_API
  9. {
  10. public function CreateToken($p24_amount = null, $p24_description = null, $p24_email = null, $p24_url_return = null, $p24_url_status = null)
  11. {
  12. $p24_session_id = uniqid();
  13.  
  14. $headers[] = 'p24_merchant_id=' . PRZELEWY24_MERCHANT_ID;
  15. $headers[] = 'p24_pos_id=' . PRZELEWY24_MERCHANT_ID;
  16. $headers[] = 'p24_crc=' . PRZELEWY24_CRC;
  17. $headers[] = 'p24_session_id=' . $p24_session_id;
  18. $headers[] = 'p24_amount=' . $p24_amount;
  19. $headers[] = 'p24_currency=PLN';
  20. $headers[] = 'p24_description=' . $p24_description;
  21. $headers[] = 'p24_country=PL';
  22. $headers[] = 'p24_url_return=' . urlencode($p24_url_return);
  23. $headers[] = 'p24_url_status=' . urlencode($p24_url_status);
  24. $headers[] = 'p24_api_version=3.2';
  25. $headers[] = 'p24_sign=' . md5($p24_session_id . '|' . PRZELEWY24_MERCHANT_ID . '|' . $p24_amount . '|PLN|' . PRZELEWY24_CRC);
  26. $headers[] = 'p24_email=' . $p24_email;
  27.  
  28. $oCURL = curl_init();
  29. curl_setopt($oCURL, CURLOPT_POST, 1);
  30. curl_setopt($oCURL, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
  31. curl_setopt($oCURL, CURLOPT_POSTFIELDS, implode('&', $headers));
  32. curl_setopt($oCURL, CURLOPT_URL, 'https://' . PRZELEWY24_TYPE . '.przelewy24.pl/trnRegister');
  33. curl_setopt($oCURL, CURLOPT_SSL_VERIFYHOST, 2);
  34. curl_setopt($oCURL, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  35. curl_setopt($oCURL, CURLOPT_RETURNTRANSFER, 1);
  36. curl_setopt($oCURL, CURLOPT_SSL_VERIFYPEER, false);
  37. $response = curl_exec($oCURL);
  38. curl_close($oCURL);
  39.  
  40. parse_str($response, $output);
  41. return isset($output['token']) ? $output['token'] : 0;
  42. }
  43.  
  44. public function Pay($p24_amount = null, $p24_description = null, $p24_email = null, $p24_url_return = null, $p24_url_status = null)
  45. {
  46. $token = $this->CreateToken($p24_amount, $p24_description, $p24_email, $p24_url_return, $p24_url_status);
  47. return 'https://' . PRZELEWY24_TYPE . '.przelewy24.pl/trnRequest/' . $token;
  48. }
  49.  
  50. public function Verify($data = null)
  51. {
  52. $headers[] = 'p24_merchant_id=' . $data['p24_merchant_id'];
  53. $headers[] = 'p24_pos_id=' . $data['p24_pos_id'];
  54. $headers[] = 'p24_session_id=' . $data['p24_session_id'];
  55. $headers[] = 'p24_amount=' . $data['p24_amount'];
  56. $headers[] = 'p24_currency=PLN';
  57. $headers[] = 'p24_order_id=' . $data['p24_order_id'];
  58. $headers[] = 'p24_sign=' . md5($data['p24_session_id'] . '|' . $data['p24_order_id'] . '|' . $data['p24_amount'] . '|PLN|' . PRZELEWY24_CRC);
  59.  
  60. $oCURL = curl_init();
  61. curl_setopt($oCURL, CURLOPT_POST, 1);
  62. curl_setopt($oCURL, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
  63. curl_setopt($oCURL, CURLOPT_POSTFIELDS, implode('&', $headers));
  64. curl_setopt($oCURL, CURLOPT_URL, 'https://' . PRZELEWY24_TYPE . '.przelewy24.pl/trnVerify');
  65. curl_setopt($oCURL, CURLOPT_SSL_VERIFYHOST, 2);
  66. curl_setopt($oCURL, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  67. curl_setopt($oCURL, CURLOPT_RETURNTRANSFER, 1);
  68. curl_setopt($oCURL, CURLOPT_SSL_VERIFYPEER, false);
  69. $response = curl_exec($oCURL);
  70. curl_close($oCURL);
  71.  
  72. parse_str($response, $output);
  73. if ($output['error'] == 0) {
  74. $cos = 'true';
  75. }else{
  76. $cos = 'false';
  77. }
  78. return $cos;
  79. }
  80. }
  81. ?>


plik payments.php
  1. <?php
  2.  
  3. // ob_start();
  4.  
  5. include_once('przelewy24.php');
  6.  
  7. $oPrzelewy24_API = new Przelewy24_API();
  8.  
  9. // Powrotny adres URL
  10. $p24_url_return = 'http://37.28.156.151/projekty/przelewy24-test/payments.php';
  11.  
  12. // Adres dla weryfikacji płatności
  13. $p24_url_status = 'http://37.28.156.151/projekty/przelewy24-test/payments.php';
  14. $oPrzelewy24_API->Verify($_POST);
  15.  
  16. if(isset($_POST['submit'])){
  17. // Kwota do zapłaty musi być pomnożona razy 100.
  18. // Czyli, jeżeli użytkownik ma zapłacić 499 złotych, to kwota do zapłaty
  19. // to 499 * 100 (wyrażona w groszach)
  20. $redirect = $oPrzelewy24_API->Pay('45', 'platnosc', 'daniel.kozinaa@gmail.com', $p24_url_return, $p24_url_status);
  21. $_SESSION['test'] = $oPrzelewy24_API->Verify($_POST);
  22. Header('Location: ' . $redirect); exit;
  23. }
  24. ?>
  25. <form action="" method="post">
  26. <input type="submit" name="submit" value="send">
  27. </form>
  28. <?php
  29. var_dump($_SESSION['test']);
  30. ?>
Go to the top of the page
+Quote Post
trueblue
post 5.05.2018, 15:25:02
Post #2





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

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


http://forum.php.pl/index.php?showtopic=258972


--------------------
Go to the top of the page
+Quote Post
monetek
post 9.05.2018, 13:13:43
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.05.2018

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


Niestety link nie prowadzi mnie do rozwiązania problemu. Cytuje "Wczoraj mnie oświeciło i jak zrozumiałem jak to działa" - a nie napisał jak sobie z tym poradził. Ten fragment nie działa.

  1. if (isset($_POST['p24_merchant_id']) AND isset($_POST['p24_sign'])) {
  2. if ($oPrzelewy24_API->Verify($_POST) === true) {
  3. // Tutaj dokonujemy aktywacji usługi, która jest opłacana
  4. }
  5. }


Nie wiem jak to ugryźć. Co powinienem zrobić. Po powrocie klienta na stronę chciałbym dowiedzieć się czy zapłacił czy nie.
Go to the top of the page
+Quote Post
trueblue
post 9.05.2018, 13:54:51
Post #4





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

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


Po powrocie klienta na stronę nie ma informacji czy zapłacił czy nie. Możesz co najwyżej poinformować go o wstępnym powodzeniu lub nie, transakcji, ale nie o samym fakcie zaksięgowania kwoty.
leonpro778 podał w poście pod linkiem przebieg procesu zakupu. Serwis płatności wysyła powiadomienie na wskazany adres o statusie transakcji. Pod tym adresem powinieneś umieścić kod, który pokazałeś.


--------------------
Go to the top of the page
+Quote Post
monetek
post 9.05.2018, 15:55:22
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.05.2018

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


Po kliknięciu "Zapłać" albo "Odrzuć" system wraca na moją stronę po czym rzeczywiście mam status "true" co świadczy o jakimś wstępnym powodzeniu - masz rację. Wkleiłem w/w kod w całości i niestety mi nic nie zwrócił. Dopiero gdy usunąłem pierwszego if'a wywołałem sobie jakieś echo. Mam wrażenie jakby pierwszy if był zupełnie pusty (zmienne $_POST['p24_merchant_id'] i isset($_POST['p24_sign'])) Znam listę kroków ale nie potrafię sobie wyobrazić tego. Jak powinienem dokładnie zweryfikować czy pieniądze rzeczywiście są przyjęte czy nie (otrzymuję potwierdzenie na email żę potwierdzono płatność) ?
Go to the top of the page
+Quote Post
trueblue
post 9.05.2018, 16:00:09
Post #6





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

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


Przeczytaj dokumentację P24. Nie chodzi o kod, ale przebieg procesu płatności.


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 9.05.2018, 22:05:46
Post #7





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Klient może zapłacić za usługę nawet za miesiąc i tylko wtedy Przelewy24 połączy się z Twoim API informując Twój system o zaksięgowaniu płatności.

Musisz po prostu stworzyć u siebie API, i dodać linki do Przelewy24

Pamiętaj tylko że Twoje API musi potwierdzić autentyczność powiadomienia, bo przecież ktoś może poznać adres API i wcisnąć Ci kit o zaksięgowaniu wpłaty a tego byś nie chciał.


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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: 16.04.2024 - 06:08