Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Platnosci.pl Premium SMS + skrypt.
Forum PHP.pl > Forum > PHP
cahais
Witam koledzy.

Ostatnio mam mały problem z platnosci.pl SMS. Otóż z tego co zrozumiałem czytając dokumentację wyglądało by na to że wszystko robię dobrze. Oczywiście się mylę bo coś nie działa.

Chce osiągnąć efekt podobny jak na nk.pl. Po wyborze usługi przenosi nas do serwisu platnosci.pl, gdzie wyświetlany jest koszt i kod sms jaki wysyłamy. A po wysłaniu wszystko robi za nas skrypt tj. aktywuje usługę.

kod odbioru płatności:

  1. require_once('../config.php');
  2. require_once('../funkcje.php');
  3.  
  4. $server = 'www.platnosci.pl';
  5. $server_script = '/paygw/ISO/Payment/get';
  6. define(PLATNOSCI_POS_ID, 83000);
  7. define(PLATNOSCI_KEY1, "asdasdasdasd");
  8. define(PLATNOSCI_KEY2, "baasdasdasd");
  9.  
  10. function get_status($parts){
  11. if ($parts[1] != PLATNOSCI_POS_ID) return array('code' => false,'message' => 'błędny numer POS'); //--- bledny numer POS
  12. $sig = md5($parts[1].$parts[2].$parts[3].$parts[5].$parts[4].$parts[6].$parts[7].PLATNOSCI_KEY2);
  13. if ($parts[8] != $sig) return array('code' => false,'message' => 'błędny podpis'); //--- bledny podpis
  14. switch ($parts[5]) {
  15. case 1: return array('code' => $parts[5], 'message' => 'nowa'); break;
  16. case 2: return array('code' => $parts[5], 'message' => 'anulowana'); break;
  17. case 3: return array('code' => $parts[5], 'message' => 'odrzucona'); break;
  18. case 4: return array('code' => $parts[5], 'message' => 'rozpoczęta'); break;
  19. case 5: return array('code' => $parts[5], 'message' => 'oczekuje na odbiór'); break;
  20. case 6: return array('code' => $parts[5], 'message' => 'autoryzacja odmowna'); break;
  21. case 7: return array('code' => $parts[5], 'message' => 'płatność odrzucona'); break;
  22. case 99: return array('code' => $parts[5], 'message' => 'płatność odebrana - zakończona'); break;
  23. case 888: return array('code' => $parts[5], 'message' => 'błędny status'); break;
  24. default: return array('code' => false, 'message' => 'brak statusu'); break;
  25. }
  26. }
  27.  
  28.  
  29. if(!isset($_POST['pos_id']) || !isset($_POST['session_id']) || !isset($_POST['ts']) || !isset($_POST['sig'])) die('ERROR: EMPTY PARAMETERS'); //-- brak wszystkich parametrow
  30.  
  31. if ($_POST['pos_id'] != PLATNOSCI_POS_ID) die('ERROR: WRONG POS ID'); //--- błędny numer POS
  32.  
  33. $sig = md5( $_POST['pos_id'] . $_POST['session_id'] . $_POST['ts'] . PLATNOSCI_KEY2);
  34. if ($_POST['sig'] != $sig) die('ERROR: WRONG SIGNATURE'); //--- błędny podpis
  35.  
  36. $ts = time();
  37. $sig = md5( PLATNOSCI_POS_ID . $_POST['session_id'] . $ts . PLATNOSCI_KEY1);
  38. $parameters = "pos_id=" . PLATNOSCI_POS_ID . "&session_id=" . $_POST['session_id'] . "&ts=" . $ts . "&sig=" . $sig;
  39.  
  40. $fsocket = false;
  41. $curl = false;
  42. $result = false;
  43.  
  44. if ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30)) ) {
  45. $fsocket = true;
  46. } elseif (function_exists('curl_exec')) {
  47. $curl = true;
  48. }
  49.  
  50. if ($fsocket == true) {
  51. $header = 'POST ' . $server_script . ' HTTP/1.0' . "\r\n" .
  52. 'Host: ' . $server . "\r\n" .
  53. 'Content-Type: application/x-www-form-urlencoded' . "\r\n" .
  54. 'Content-Length: ' . strlen($parameters) . "\r\n" .
  55. 'Connection: close' . "\r\n\r\n";
  56. @fputs($fp, $header . $parameters);
  57. $platnosci_response = '';
  58. while (!@feof($fp)) {
  59. $res = @fgets($fp, 1024);
  60. $platnosci_response .= $res;
  61. }
  62. @fclose($fp);
  63.  
  64. } elseif ($curl == true) {
  65. $ch = curl_init();
  66. curl_setopt($ch, CURLOPT_URL, "https://" . $server . $server_script);
  67. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  68. curl_setopt($ch, CURLOPT_HEADER, 0);
  69. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  70. curl_setopt($ch, CURLOPT_POST, 1);
  71. curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
  72. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  73. $platnosci_response = curl_exec($ch);
  74. curl_close($ch);
  75. } else {
  76. die("ERROR: No connect method ...\n");
  77. }
  78.  
  79.  
  80. 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);
  81. if ( $result['code'] ) { //--- rozpoznany status transakcji
  82.  
  83. $pos_id = $parts[1];
  84. $session_id = $parts[2];
  85. $order_id = $parts[3];
  86. $amount = $parts[4]; //-- w groszach
  87. $status = $parts[5];
  88. $desc = $parts[6];
  89. $ts = $parts[7];
  90. $sig = $parts[8];
  91. /* TODO: zmiana statusu transakcji w systemie Sklepu */
  92.  
  93. if( $status['code']=='99' ){
  94.  
  95. mysql_query("UPDATE transakcje SET status='1' WHERE uid='$session_id' LIMIT 1");
  96.  
  97. $res = mysql_query("SELECT * FROM transakcje WHERE uid='$session_id' LIMIT 1");
  98. $order = mysql_fetch_assoc($res);
  99.  
  100. if( $order['amount']==$amount ){
  101.  
  102. mysql_query("UPDATE usługa SET `on`='1' WHERE `uid`='$session_id' LIMIT 1;");
  103.  
  104.  
  105. }
  106. }
  107.  
  108.  
  109. } else {
  110. /* TODO: obsługa powiadamiania o błędnych statusach transakcji*/
  111. echo "ERROR: Blad danych ....\n";
  112. echo "code=" . $result['code'] . " message=" . $result['message'] . "\n";
  113. echo $platnosci_response;
  114. // powiadomienie bedzie wysłane ponownie przez platnosci.pl
  115. // ewentualnie dodajemy sobie jakis wpis do logow ...
  116. }


ktoś ma jakiś pomysłquestionmark.gif Pilne
modern-web
Rozumiem, że oczekujesz gotowego rozwiązania, tak?
Zadam Ci zasadnicze pytanie - czy Ty tak właściwie wiesz co robi dana część podanego przez Ciebie skryptu?
Spróbuj sam i pokaż co już zrobiłeś, bo to co nam pokazałeś to tylko skrypt przyjmowania płatności.

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