Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][HTML][PHP]Adres raportów PayU, Problem z raportami
programistaarek
post 6.04.2017, 09:35:10
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


Witam, serdecznie mam zakupione konto w systemie PayU i korzystam z typu płatności Classic API. Moja strona to autorski sklep, gdzie będzie maksymalnie 10 produktów do kupna stąd też nie dodawałem sklepu gotowego. Formularz zgłoszenia zamówienia oraz przelew na konto działa bez problemu, lecz rzeczą, której nie jestem w stanie przeskoczyć to zawartość pliku raporty. Mam na serwerze plik, który został podany w PayU w adresie raportów.
Nie wiem co ja mam tam kompletnie wpisać wiem, że jest dokumentacja PayU oraz rozmawiałem z ich pomocą techniczną i nadal nic nie jestem w stanie po prostu tego przeskoczyć nie wiem co mam tam uzupełnić. Oni mi coś mówili, że metodą POST mam im zwrócić wartość „OK” oraz ze zwróconej zmiennej session_id mam wyliczyć sig dodając również post_id ts oraz key1 konta, które zostało założone w serwisie.
Później zaś mam jakąś metodą Payment/get wysłać im tego sig'a oraz dopytać o dane zamówienia jego status. Chciałbym otrzymać gotowe rozwiązanie, gdyż moja cierpliwość do tego się już skończyła. A, więc chcę to wysłanie OK wraz z wyliczonym sigiem+ pobranie od nich statusu zamówienia, aby było ukazane jaki status ma zamówienie. Jeśli status równa się 99 (zakończone) skrypt może wykonać Update na mojej stronie osobie, która zakupi dany produkt.
Więc pobranie statusu dla zakończonego wraz z danymi jak id sesji czy koszt zamówienia.
Teraz pytanie czy jest ktokolwiek w stanie mi w tym pomóc? Chodzi mi o pomoc wysłania gotowego rozwiązania abym mógł sobie tylko gotowe dane wprowadzić.



Obecnie mam taki plik w raportach

  1. <?
  2. include('include/baza.php');
  3.  
  4.  
  5.  
  6.  
  7. $pos_id="**************";
  8. $key1 = "";
  9. $key2 = "**************";
  10. $ts = time();
  11.  
  12.  
  13.  
  14.  
  15.  
  16. function httpPost($url,$params)
  17. {
  18. $postData = '';
  19. //create name value pairs seperated by &
  20. foreach($params as $k => $v)
  21. {
  22. $postData .= $k . '='.$v.'&';
  23. }
  24. $postData = rtrim($postData, '&');
  25.  
  26. $ch = curl_init();
  27.  
  28. curl_setopt($ch,CURLOPT_URL,$url);
  29. curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  30. curl_setopt($ch,CURLOPT_HEADER, false);
  31. curl_setopt($ch, CURLOPT_POST, count($postData));
  32. curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  33.  
  34. $output=curl_exec($ch);
  35.  
  36. curl_close($ch);
  37. return $output;
  38.  
  39. }
  40.  
  41. $tablica = array(
  42. "pos_id" => $pos_id,
  43. "ts" => $ts,
  44. "session_id" => $_POST['session_id']
  45. );
  46.  
  47.  
  48. ksort($tablica);
  49. //built url
  50. $zmienna='';
  51. foreach ($tablica as $key => $value){
  52. $zmienna = $zmienna.$key."=".urlencode($value)."&";
  53. }
  54. // sig
  55. $sig = hash('sha256', $zmienna.$key2);
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. $params = array(
  64. "pos_id" => $pos_id,
  65. "key2" => $key2,
  66. "ts" => $ts,
  67. "sig" => $sig,
  68. "session_id" => $_POST['session_id']
  69. );
  70.  
  71. echo httpPost("https://secure.payu.com/paygw/UTF/Payment/confirm",$params);
  72.  
  73.  
  74.  
  75. /// pobranie danych które zwraca PayU
  76.  
  77.  
  78. $pending = array(1,4,5); // 1 - nowa, 4 - rozpoczęta, 5 - oczekuje na odbiór
  79. $success = array(99); // płatność zaakceptowana
  80. $fail = array(2,3,7,888); // 2-anulowana, 3-odrzucona, 7-płatność odrzucona, 888-bledny status, prosimy o kontakt
  81.  
  82.  
  83.  
  84. if (in_array($status, $pending)){
  85.  
  86. // Raport, że płatność w toku
  87. echo "OK";
  88.  
  89. mysql_query("INSERT INTO `raport` (tresc) VALUES('W toku | sesja => ".$sesja." | numer_zamowienia => ".$numer."')") or die("Błąd rejestracji [server error]");
  90.  
  91.  
  92.  
  93.  
  94.  
  95. }elseif (in_array($status, $success)){
  96.  
  97. // Raport, że opłacono
  98.  
  99. mysql_query("INSERT INTO `raport` (tresc) VALUES('Opłącono | sesja => ".$sesja." | numer_zamowienia => ".$numer."')") or die("Błąd rejestracji [server error]");
  100.  
  101.  
  102. echo "OK";
  103. }elseif (in_array($status, $fail)){
  104.  
  105. // Raport, że odrzucono
  106.  
  107.  
  108.  
  109. mysql_query("INSERT INTO `raport` (tresc) VALUES('Odrzucono | sesja => ".$sesja." | numer_zamowienia => ".$numer."')") or die("Błąd rejestracji [server error]");
  110.  
  111. echo "OK";
  112. }
  113.  
  114. exit('OK');
  115. ?>
  116.  


A treść raportu z PayU ukazuje mi taki błąd : " code (OK): 200, Response (ERROR): "<?xml version="1.0" encoding="UTF-8"?> <response> <status>ERROR</status> <error> <nr>103</nr> <message>Kod błędu: 103</message> </error> </response>OK" "

Jak mam poprawnie wyliczyć ten numer sig? Bo bład 103 wzkasuje na jego złe przesłanie.


--------------------
Go to the top of the page
+Quote Post
Rysh
post 6.04.2017, 09:51:03
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Użyj gotowego rozwiązania jeśli masz się męczyć:

https://github.com/PayU/openpayu_php


--------------------
Go to the top of the page
+Quote Post
programistaarek
post 6.04.2017, 17:23:21
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


A jeśli bym się miał pomęczyć to jak by to mogło wyglądać smile.gif?
Wiem sprawdzałem tą dokumentację co mi właśnie przesłałęś i który skrypt z niej odpowiada tym raportom o które mi chodzi konkretnie smile.gif?

Mam ważne pytanie już opanowałem w sumie to wysyłanie danych smile.gif teraz problem jest trudniejszy. Pomoc techniczna mówiła mi, że wyślą do mnie dane w formacie .xml

  1. <response>
  2. <status>***************</status>
  3. <trans>
  4. <id>***************</id>
  5. <pos_id>***************</pos_id>
  6. <session_id>***************</session_id>
  7. <order_id>***************</order_id>
  8. <amount>***************</amount>
  9. <status>***************</status>
  10. <pay_type>***************</pay_type>
  11. <pay_gw_name>***************</pay_gw_name>
  12. <desc>***************</desc>
  13. <desc2>***************</desc2>
  14. <create>***************</create>
  15. <init>***************</init>
  16. <sent>***************</sent>
  17. <recv/>
  18. <cancel/>
  19. <auth_fraud>***************</auth_fraud>
  20. <ts>***************</ts>
  21. <sig>***************</sig>
  22. <add_client_street/>
  23. <add_bank_name>***************.</add_bank_name>
  24. <add_owner_name>***************.</add_owner_name>
  25. <add_cc_number_hash>***************</add_cc_number_hash>
  26. <add_client_account>***************</add_client_account>
  27. <add_client_bank_date>***************</add_client_bank_date>
  28. <add_clients_count>***************</add_clients_count>
  29. <add_client_bank_desc>
  30. ***************
  31. </add_client_bank_desc>
  32. <add_trans_prev>
  33. ***************
  34. </add_trans_prev>
  35. <add_cc_number>***************</add_cc_number>
  36. <add_trans_title>***************</add_trans_title>
  37. <add_client_post_code>***************</add_client_post_code>
  38. <add_client_address>
  39. ***************
  40. </add_client_address>
  41. <add_owner_address>***************</add_owner_address>
  42. <add_client_name>
  43. ***************
  44. </add_client_name>
  45. <add_client_city>***************</add_client_city>
  46. </trans>
  47. </response>


I mam pytanie jeśli mi to PayU zwróci jak mam odczytać danę do zmiennej php bym mógł odczytać trans->status ?
Czytałem pobraniu danych z xml do php, ale tam było operowane na jakimś już gotowym pliku a ja miał bym to pobrac z kodu więc skad mam to pobrac obecnie mam taki kod jak go zmodyfikować?


  1. <?
  2. $tcs = simplexml_load_file('dane.xml');
  3.  
  4.  
  5.  
  6.  
  7. $tcs->trans[0]->status;
  8.  
  9.  
  10.  
  11.  
  12. foreach ($tcs->trans as $z) {
  13.  
  14. $status = $z->status;
  15. echo $status;
  16.  
  17. echo "<br>";
  18.  
  19. $order_id = $z->order_id;
  20. echo $order_id;
  21.  
  22.  
  23. echo "<br>";
  24.  
  25. $session_id = $z->session_id;
  26. echo $session_id;
  27.  
  28.  
  29.  
  30. echo "<br>";
  31.  
  32. $amount = $z->amount;
  33. echo $amount;
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. }
  41.  
  42.  
  43.  
  44.  
  45. ?>
  46.  

Tylko tak jak mówiłem tutaj pobiera mi dane z pliku dane.xml a ja w przypadku otrzymania danych od Pay jak to mam odczytać?


--------------------
Go to the top of the page
+Quote Post
nospor
post 6.04.2017, 17:25:44
Post #4





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Przegladanie sekcji "powiazane" w manualu naprawde nie boli.

http://php.net/manual/en/function.simplexml-load-string.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
programistaarek
post 6.04.2017, 17:48:22
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


Okej np to wyglada spoko już z manuala
  1.  
  2. <?php
  3. $string = <<<XML
  4. <?xml version='1.0'?>
  5. <document>
  6.  <title>Forty What?</title>
  7.  <from>Joe</from>
  8.  <to>Jane</to>
  9.  <body>
  10.   I know that's the answer -- but what's the question?
  11.  </body>
  12. </document>
  13. XML;
  14.  
  15. $xml = simplexml_load_string($string);
  16.  
  17. print_r($xml);
  18. ?>


Gdyż tutaj pobiera dane z $string, a ja nie wiem jak mi to osadzi w kodzie PayU :/


--------------------
Go to the top of the page
+Quote Post
nospor
post 6.04.2017, 18:04:56
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




No przeciez to co ci zwraca PayU to masz w jakiejs zmiennej, no nie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
programistaarek
post 7.04.2017, 14:12:26
Post #7





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


Mhm tylko, że w jakiej nie orientujesz się bo w dokumentacji tego niestety nie znalazłem.

Oraz mam kolejny problem w sumie PayU prosi mnie o przesłanie metodą Payment/get danych jak sig, pos_id, ts, key1 czy taka forma jest prawidłowa i co robię nie tak gdyż mi raport płatności wyrzuca błąd 103 jak by był źle skonstruowany podpis.

  1. function httpPost($url)
  2. {
  3. $postData = '';
  4. //create name value pairs seperated by &
  5.  
  6. $postData = rtrim($postData, '&');
  7.  
  8. $ch = curl_init();
  9.  
  10. curl_setopt($ch,CURLOPT_URL,$url);
  11. curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  12. curl_setopt($ch,CURLOPT_HEADER, false);
  13. curl_setopt($ch, CURLOPT_POST, count($postData));
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  15.  
  16. $output=curl_exec($ch);
  17.  
  18. curl_close($ch);
  19. return $output;
  20.  
  21. }
  22.  
  23. $pos_id = "******";
  24. $key1 = "******";
  25. $key2 = "******"; // dane wpisane z konta PayU
  26. $ts = time();
  27.  
  28.  
  29.  
  30.  
  31.  
  32. $sig = md5( $pos_id + $_POST['session_id'] + $ts + $key1 );
  33.  
  34.  
  35. echo httpPost("https://secure.payu.com/paygw/UTF/Payment/get/xml?sig=".$sig."&ts=".$ts."&pos_id=".$pos_id."&session_id=".$_POST['session_id']."");
  36.  
  37.  
  38.  

Co jest w tym kodzie nie tak?

W obecnej chwili skrypt raportów mam taki

http://wklej.org/id/3080890/

A w historii raportów po stronie PayU mam taki błąd :
Cytat
code (OK): 200, Response (OK): "OK<?xml version="1.0" encoding="UTF-8"?> <response> <status>ERROR</status> <error> <nr>103</nr> <message>Kod błędu: 103</message> </error> </response><br /> <b>Warning</b>: simplexml_load_file(): I/O warning : failed to load external e"


Co źle robię w skrypcie?


--------------------
Go to the top of the page
+Quote Post
nospor
post 7.04.2017, 14:20:27
Post #8





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




Blad 103 mowi o zlym sig. Jak wyliczac sig masz napisane tu
http://developers.payu.com/en/classic_api....ning_parameters

Byc moze go zle wyliczasz


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
programistaarek
post 7.04.2017, 18:08:20
Post #9





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


Wybłagałem PayU O gotowy kod to pluje błedami ... 52 linijka a w raportach taki błąd :
Cytat
code (OK): 200, Response (ERROR): "<br /> <b>Parse error</b>: syntax error, unexpected ''Content-Length: '' (T_CONSTANT_ENCAPSED_STRING) in <b>/raporty.php</b> on line <b>52</b><br /> "

Co jest nie tak w tej linijce jak to naprawić?
  1. <?php
  2. $server = 'www.platnosci.pl';
  3. $server_script = '/paygw/UTF/Payment/get';
  4. define(PLATNOSCI_POS_ID, --------------------);
  5. define(PLATNOSCI_KEY1, "---------------");
  6. define(PLATNOSCI_KEY2, "---------------------");
  7.  
  8. function get_status($parts){
  9. if ($parts[1] != PLATNOSCI_POS_ID) return array('code' => false,'message' => 'błędny numer POS'); //--- wrong POS
  10. $sig = md5($parts[1].$parts[2].$parts[3].$parts[5].$parts[4].$parts[6].$parts[7].PLATNOSCI_KEY2);
  11. if ($parts[8] != $sig) return array('code' => false,'message' => 'bledny podpis'); //--- wrong signature
  12. switch ($parts[5]) {
  13. case 1: return array('code' => $parts[5], 'message' => 'status 1'); break;
  14. case 2: return array('code' => $parts[5], 'message' => 'status 2'); break;
  15. case 3: return array('code' => $parts[5], 'message' => 'status 3'); break;
  16. case 4: return array('code' => $parts[5], 'message' => 'status 4'); break;
  17. case 5: return array('code' => $parts[5], 'message' => 'status 5'); break;
  18. case 6: return array('code' => $parts[5], 'message' => 'no authorization'); break;
  19. case 7: return array('code' => $parts[5], 'message' => 'status 7'); break;
  20. case 99: return array('code' => $parts[5], 'message' => 'status 99'); break;
  21. case 888: return array('code' => $parts[5], 'message' => 'error status'); break;
  22. default: return array('code' => false, 'message' => 'no status'); break;
  23. }
  24. }
  25.  
  26.  
  27. if(!isset($_POST['pos_id']) || !isset($_POST['session_id']) || !isset($_POST['ts']) || !isset($_POST['sig'])) die('ERROR: EMPTY PARAMETERS'); //-- empty parameters
  28.  
  29. if ($_POST['pos_id'] != PLATNOSCI_POS_ID) die('ERROR: WRONG POS ID'); //--- wrong POS
  30.  
  31. $sig = md5( $_POST['pos_id'] . $_POST['session_id'] . $_POST['ts'] . PLATNOSCI_KEY2);
  32. if ($_POST['sig'] != $sig) die('ERROR: WRONG SIGNATURE'); //--- wrong signature
  33.  
  34. $ts = time();
  35. $sig = md5( PLATNOSCI_POS_ID . $_POST['session_id'] . $ts . PLATNOSCI_KEY1);
  36. $parameters = "pos_id=" . PLATNOSCI_POS_ID . "&session_id=" . $_POST['session_id'] . "&ts=" . $ts . "&sig=" . $sig;
  37.  
  38. $fsocket = false;
  39. $curl = false;
  40. $result = false;
  41.  
  42. if ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30)) ) {
  43. $fsocket = true;
  44. } elseif (function_exists('curl_exec')) {
  45. $curl = true;
  46. }
  47.  
  48. if ($fsocket == true) {
  49. $header = 'POST ' . $server_script . ' HTTP/1.0' . "\r\n" .
  50. 'Host: ' . $server . "\r\n" .
  51. 'Content-Type: application/x-www-form-urlencoded' . "\r\n"
  52. 'Content-Length: ' . strlen($parameters) . "\r\n" .
  53. 'Connection: close' . "\r\n\r\n";
  54. @fputs($fp, $header . $parameters);
  55. $platnosci_response = '';
  56. while (!@feof($fp)) {
  57. $res = @fgets($fp, 1024);
  58. $platnosci_response .= $res;
  59. }
  60. @fclose($fp);
  61.  
  62. } elseif ($curl == true) {
  63. $ch = curl_init();
  64. curl_setopt($ch, CURLOPT_URL, "https://" . $server . $server_script);
  65. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  66. curl_setopt($ch, CURLOPT_HEADER, 0);
  67. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  68. curl_setopt($ch, CURLOPT_POST, 1);
  69. curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
  70. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  71. $platnosci_response = curl_exec($ch);
  72. curl_close($ch);
  73. } else {
  74. die("ERROR: No connect method ...\n");
  75. }
  76.  
  77.  
  78. if (eregi("<trans>.*<pos_id>([0-9]*)</pos_id>.*<session_id>(.*)</session_id>.*<order_id>(.*)</order_id>.*<amount>([0-9]*)</amount>.*<status>([0-9]*)</status>.*<desc>(.*)</desc>.*<ts>([0-9]*)</ts>.*<sig>([a-z0-9]*)</sig>.*</trans>", $platnosci_response, $parts)) $result = get_status($parts);
  79. if ( $result['code'] ) { //--- recognised status of transaction
  80.  
  81. $pos_id = $parts[1];
  82. $session_id = $parts[2];
  83. $order_id = $parts[3];
  84. $amount = $parts[4]; //--in grosze
  85. $status = $parts[5];
  86. $desc = $parts[6];
  87. $ts = $parts[7];
  88. $sig = $parts[8];
  89. /* TODO: change of transaction status in system of the shop */
  90.  
  91.  
  92. if ( $result['code'] == '99' ) {
  93. if ( money_are_on_the_account ) {
  94. // payment sucessful so we send back OK
  95. echo "OK";
  96. }
  97. } else if ( $result['code'] == '2' ) {
  98. // transaction cancelled, we can also cancell transaction
  99. } else {
  100. // other actions
  101. }
  102.  
  103.  
  104. // If all operations are done then we send back OK
  105. // in other case we generate error
  106. // if ( ewerything_ok ) {
  107. echo "OK";
  108. // } else {
  109. //
  110. // }
  111.  
  112.  
  113. } else {
  114. /* TODO: obsluga powiadamiania o blednych statusach transakcji*/
  115. echo "ERROR: Data error ....\n";
  116. echo "code=" . $result['code'] . " message=" . $result['message'] . "\n";
  117. echo $platnosci_response;
  118. // powiadomienie bedzie wyslane ponownie przez platnosci.pl information about changing a status will be send again from platnosci.pl
  119. // we can write information to logs....
  120. }
  121.  
  122. ?>


Ten post edytował programistaarek 7.04.2017, 18:09:02


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 7.04.2017, 18:31:44
Post #10





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

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


brakuje .
Go to the top of the page
+Quote Post
programistaarek
post 7.04.2017, 18:35:36
Post #11





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


W którym miejscu dokładnie?


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 7.04.2017, 18:42:52
Post #12





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

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


Masz błąd to szukaj w jego okolicy
Go to the top of the page
+Quote Post
programistaarek
post 7.04.2017, 20:26:39
Post #13





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 1.02.2015

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


Proszę abyś pokazał gdzie bo tak to bładzę :/

Teraz mam problem inny a mianowicie nie dodaje mi rekordów do bazy danych :/
W raportach na PayU pisze, że nie dodało mi rekordu do bazy.
Co jest tego przyczyną? Nie dodaje mi nowej informacji do "raport".
  1. <?php
  2. // Początek skryptu raportów
  3.  
  4. // Połączenie z bazą danych
  5. $host_bazy_danych = 'localhost'; //serwer bazy danych
  6. $uzytkownik_bazy_danych = '******'; //użytkownik bazy danych
  7. $haslo_bazy_danych = '*********'; //hasło do bazy danych
  8. $nazwa_bazy_danych = '*******_*******8'; //nazwa bazy danych
  9.  
  10. //nawiązujemy połączenie z serwerem bazy danych, jeżeli się nie uda to pokaże informacje
  11. $polacz = mysql_connect($host_bazy_danych, $uzytkownik_bazy_danych, $haslo_bazy_danych) or die('brak połączenia z serwerem');
  12.  
  13. //wybieramy odpowiednią bazę danych
  14. mysql_select_db($nazwa_bazy_danych,$polacz) or die('nie ma takiej bazy danych');
  15.  
  16. //ustawiamy domyślne kodowanie znaków dla połączenia
  17.  
  18. @mysql_query("set names 'utf8'");
  19.  
  20. //Koniec Połączenia z bazą danych
  21.  
  22. //Koniec Połączenia z bazą danych
  23.  
  24. $server = 'www.platnosci.pl';
  25. $server_script = '/paygw/UTF/Payment/get';
  26. define(PLATNOSCI_POS_ID, ---------);
  27. define(PLATNOSCI_KEY1, "----------------");
  28. define(PLATNOSCI_KEY2, "---------------");
  29.  
  30. function get_status($parts){
  31. if ($parts[1] != PLATNOSCI_POS_ID) return array('code' => false,'message' => 'błędny numer POS'); //--- wrong POS
  32. $sig = md5($parts[1].$parts[2].$parts[3].$parts[5].$parts[4].$parts[6].$parts[7].PLATNOSCI_KEY2);
  33. if ($parts[8] != $sig) return array('code' => false,'message' => 'bledny podpis'); //--- wrong signature
  34. switch ($parts[5]) {
  35. case 1: return array('code' => $parts[5], 'message' => 'status 1'); break;
  36. case 2: return array('code' => $parts[5], 'message' => 'status 2'); break;
  37. case 3: return array('code' => $parts[5], 'message' => 'status 3'); break;
  38. case 4: return array('code' => $parts[5], 'message' => 'status 4'); break;
  39. case 5: return array('code' => $parts[5], 'message' => 'status 5'); break;
  40. case 6: return array('code' => $parts[5], 'message' => 'no authorization'); break;
  41. case 7: return array('code' => $parts[5], 'message' => 'status 7'); break;
  42. case 99: return array('code' => $parts[5], 'message' => 'status 99'); break;
  43. case 888: return array('code' => $parts[5], 'message' => 'error status'); break;
  44. default: return array('code' => false, 'message' => 'no status'); break;
  45. }
  46. }
  47.  
  48.  
  49. if(!isset($_POST['pos_id']) || !isset($_POST['session_id']) || !isset($_POST['ts']) || !isset($_POST['sig'])) die('ERROR: EMPTY PARAMETERS'); //-- empty parameters
  50.  
  51. if ($_POST['pos_id'] != PLATNOSCI_POS_ID) die('ERROR: WRONG POS ID'); //--- wrong POS
  52.  
  53. $sig = md5( $_POST['pos_id'] . $_POST['session_id'] . $_POST['ts'] . PLATNOSCI_KEY2);
  54. if ($_POST['sig'] != $sig) die('ERROR: WRONG SIGNATURE'); //--- wrong signature
  55.  
  56. $ts = time();
  57. $sig = md5( PLATNOSCI_POS_ID . $_POST['session_id'] . $ts . PLATNOSCI_KEY1);
  58. $parameters = "pos_id=" . PLATNOSCI_POS_ID . "&session_id=" . $_POST['session_id'] . "&ts=" . $ts . "&sig=" . $sig;
  59.  
  60. $fsocket = false;
  61. $curl = false;
  62. $result = false;
  63.  
  64. if ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30)) ) {
  65. $fsocket = true;
  66. } elseif (function_exists('curl_exec')) {
  67. $curl = true;
  68. }
  69.  
  70. if ($fsocket == true) {
  71. $header = 'POST ' . $server_script . ' HTTP/1.0' . "\r\n" .
  72. 'Host: ' . $server . "\r\n" .
  73. 'Content-Type: application/x-www-form-urlencoded' . "\r\n" .
  74. 'Content-Length: ' . strlen($parameters) . "\r\n" .
  75. 'Connection: close' . "\r\n\r\n";
  76. @fputs($fp, $header . $parameters);
  77. $platnosci_response = '';
  78. while (!@feof($fp)) {
  79. $res = @fgets($fp, 1024);
  80. $platnosci_response .= $res;
  81. }
  82. @fclose($fp);
  83.  
  84. } elseif ($curl == true) {
  85. $ch = curl_init();
  86. curl_setopt($ch, CURLOPT_URL, "https://" . $server . $server_script);
  87. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  88. curl_setopt($ch, CURLOPT_HEADER, 0);
  89. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  90. curl_setopt($ch, CURLOPT_POST, 1);
  91. curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
  92. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  93. $platnosci_response = curl_exec($ch);
  94. curl_close($ch);
  95. } else {
  96. die("ERROR: No connect method ...\n");
  97. }
  98.  
  99.  
  100. if (eregi("<trans>.*<pos_id>([0-9]*)</pos_id>.*<session_id>(.*)</session_id>.*<order_id>(.*)</order_id>.*<amount>([0-9]*)</amount>.*<status>([0-9]*)</status>.*<desc>(.*)</desc>.*<ts>([0-9]*)</ts>.*<sig>([a-z0-9]*)</sig>.*</trans>", $platnosci_response, $parts)) $result = get_status($parts);
  101. if ( $result['code'] ) { //--- recognised status of transaction
  102.  
  103. $pos_id = $parts[1];
  104. $session_id = $parts[2];
  105. $order_id = $parts[3];
  106. $amount = $parts[4]; //--in grosze
  107. $status = $parts[5];
  108. $desc = $parts[6];
  109. $ts = $parts[7];
  110. $sig = $parts[8];
  111. /* TODO: change of transaction status in system of the shop */
  112.  
  113.  
  114. if ( $result['code'] == '99' ) {
  115.  
  116. $sprawdzenie=mysql_fetch_array(mysql_query("SELECT * FROM `platnosci_czekajace` WHERE `amout`='".$amount."' AND `order_id`='".$order_id."' AND session_id='".$session_id."'"));
  117.  
  118. if(empty($sprawdzenie['id'])){ // sprawdzenie czy taka płatność zamówiona istnieje w bazie
  119.  
  120. // jeśli taka płatność nie istnieje to nie jest wykonywana żadna czynność
  121.  
  122.  
  123. }else{
  124. // jeśli płatność jest w bazie danych zostaje dodane osobie która opłaciła płatność produkt który jest sprawdzany
  125.  
  126. mysql_query("INSERT INTO `raport` (tresc) VALUES('Płatność o numerze sesji ".$_POST['session_id']." jest opłacona')") or die("Błąd rejestracji [server error]");
  127.  
  128.  
  129. // Dodanie do bazy danych testu który osoba zamówiła oraz opłaciła
  130. mysql_query("INSERT INTO `testy_kupione` (nazwa, email, id_testu, id_osoby) VALUES('".$sprawdzenie['nazwa']."','".$sprawdzenie['email']."','".$sprawdzenie['id_testu']."','".$sprawdzenie['id_osoby']."')") or die("Błąd rejestracji [server error]");
  131.  
  132.  
  133. // Usunięcie z bazy danych informacji na temat zamówienia gdyż zostało już zrealizowane
  134.  
  135. mysql_query("DELETE FROM testy_kupione WHERE id=".$sprawdzenie['id']);
  136.  
  137. echo "OK";
  138.  
  139. }
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149. } elseif ( $result['code'] == '2' ) {
  150.  
  151. mysql_query("INSERT INTO `raport` (tresc) VALUES('Płatność o numerze sesji ".$_POST['session_id']." jest odrzucona')") or die("Błąd rejestracji [server error]");
  152.  
  153.  
  154.  
  155. echo "OK";
  156. } else {
  157.  
  158.  
  159. mysql_query("INSERT INTO `raport` (tresc) VALUES('Płatność o numerze sesji ".$_POST['session_id']." jest w toku ") or die("Błąd rejestracji [server error]");
  160.  
  161.  
  162. echo "OK";
  163. }
  164.  
  165.  
  166.  
  167.  
  168.  
  169. echo "OK";
  170.  
  171. } else {
  172. /* TODO: obsluga powiadamiania o blednych statusach transakcji*/
  173. echo "ERROR: Data error ....\n";
  174. echo "code=" . $result['code'] . " message=" . $result['message'] . "\n";
  175. echo $platnosci_response;
  176. // powiadomienie bedzie wyslane ponownie przez platnosci.pl information about changing a status will be send again from platnosci.pl
  177. // we can write information to logs....
  178. }
  179.  
  180. ?>
  181.  


Temat do zamknięcia już ogarnąłem! Dzięki nospor, Pyton_000, oraz Viking na priv za pomoc smile.gif


--------------------
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: 27.04.2025 - 07:43