Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Platnosci.pl - integracja ze stroną
Forum PHP.pl > Forum > Przedszkole
BatGraf
Cześć

Już chyba z pół roku chodzę wokół platnosci.pl i nie moge tego ruszyć.

Mam podpisaną z nimi umowę - konto firmowe i mogę działać, ale za diabła nie mogę połapać manuala i zintegrować platności ze stroną. Własną, nie któryms z cmsów czy gotowych sklepów.

Co chcę osiągnąć:

1. możliwość opłacenia czegokolwiek przez platności.pl za pomocą
- płatności online,
- smsa premium - rozwiązane smile.gif Jak, napiszę pod postem, może komuś sie przyda.

2. Dostęp do części strony płatnej smsem - jak wyżej, rozwiazane.

3. informacje automatyczną, zwrotną, że ktoś zapłacił, ile i kiedy.

Strasznie się do Was uśmiecham - może znajdzie się ktos cierpliwy i wyjasni mi po kolei jak to zrobić.

Z góry dzięki smile.gif


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

Jedno rozwiazałem - płatność smsem za dostep do części strony, czy ściągania:

W platnosci.pl w "moje sklepy" zakładam sklep, potem tworzę punkt płatnosci (sms premium) itp. W efekcie dostaję liste kodów jednorazowych w postaci min txt. Zapisuję je jako np kod.txt w katalogu.

I teraz dwa tylko pliki:

form.php

  1. <div class="sms">
  2. <div>
  3. <div>Wyslij sms na numer (tu numer nadany przez platnosci.pl)</div>
  4. </div>
  5. <div align="center"><br />
  6. <span>O treści: </span>
  7. </div>
  8. <div>
  9. <div>(tu treść smsa nadana przez platnosci.pl)</div>
  10. </div>
  11. <p align="center">&nbsp; </p>
  12. <form id="form1" name="form1" method="post" action="sprawdz.php">
  13. <div align="center">
  14. <input type="text" name="kod" id="textfield" />
  15. </div>
  16. </label>
  17. <p align="center">
  18. <input type="submit" name="button" id="button" value="wyslij" />
  19. </label>
  20. </p>
  21. </form>
  22. <div align="center"><img src="obrazki/akceptujemy_platnosci_1.gif" /></div>
  23. </div>



Teraz skrypt sprawdzający czy w pliku txt jest kod, który ludek dostał smsem:

sprawdz.php

  1. <?
  2. function istnieje($haslo) {
  3. $plik= file("kod.txt");
  4. foreach($plik as $linijka) {
  5. if (trim($haslo)==trim($linijka))
  6. return true;
  7. }
  8. return false;
  9. }
  10.  
  11. $kod=$_POST['kod'];
  12.  
  13. if (istnieje($kod)) {
  14. echo "Pobierz - tu można wstawić np link do sciągnięcia pliku, przekierowanie na jakąś stronę itp";
  15. } else {
  16. echo "Błędny kod";
  17. }
  18. ?>



Ponadto zabezpieczyłem plikiem htaccess, wrzuconym do tego katalogu, możliwość podglądu plików txt - żeby nie pobrać kodów:

  1. <Files "*.txt">
  2. order allow,deny
  3. deny from all
  4. </Files>



Tak rozwiązałem. Wiem, że na pewno nie jest to szczyt możliwości, bo można dać sesję i wiele innych, jak również zabezpieczyć plik z kodami bardzij, ale jak na razie to mój szczyt smile.gif

Co do pozostałych - płatności online przelewem bankowym czy kartą, nadal próbuję. Na pewno skróciłoby mi meki czyjeś dobre słowo winksmiley.jpg

aha, próbowałem z koszykiem, ale to tylko obrazek "dodaj do koszyka" a zalezy mi na swojej wersji nazewnictwa
darophp
Też jutro będę tego potrzebował ... muszę zrobić skrypt zamawiania ... no i opłacenia przez płatności.pl
BatGraf
ręcznie czy do jakiegoś cmsa?
Do kilkunastu są gotowe moduły, ja natomiast chcę zrobić panel uzytkownikom, którzy maja u mnie jakąś m-ną usługę i zeby mogli sobie kliknąć "opłać" i widzieć, na jaki czas mają opłacone. W sumie transakcja jak i w sklepie
darophp
Cytat(BatGraf @ 5.08.2010, 21:29:56 ) *
ręcznie czy do jakiegoś cmsa?
Do kilkunastu są gotowe moduły, ja natomiast chcę zrobić panel uzytkownikom, którzy maja u mnie jakąś m-ną usługę i zeby mogli sobie kliknąć "opłać" i widzieć, na jaki czas mają opłacone. W sumie transakcja jak i w sklepie

Ja - własna strona, tzn dla klienta prawie to samo co ty z tym ze klient wybiera paczkę lub paletę o danej wadze --> dane --> opłacenie przez platnosci.pl ...

Więc .. ?
BatGraf
no i cisza smile.gif Kurde, jakoś może przebrnę przez dokumentację. Myślałem, że znajdzie się ktoś, kto mi trochę ułatwi, bo nie piszę od razu, bez kombinowania samemu.
darophp
Ze strony platnosci.pl:
Skrypt PHP umożliwiający pobranie informacji o statusie płatności.
  1. <?php
  2. $server = 'www.platnosci.pl';
  3. $server_script = '/paygw/ISO/Payment/get';
  4. define(PLATNOSCI_POS_ID, 123);
  5. define(PLATNOSCI_KEY1, "1234567890123456");
  6. define(PLATNOSCI_KEY2, "9123456789012345");
  7.  
  8. function get_status($parts){
  9. if ($parts[1] != PLATNOSCI_POS_ID) return array('code' => false,'message' => 'błędny numer POS'); //--- bledny numer 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' => 'błędny podpis'); //--- bledny podpis
  12. switch ($parts[5]) {
  13. case 1: return array('code' => $parts[5], 'message' => 'nowa'); break;
  14. case 2: return array('code' => $parts[5], 'message' => 'anulowana'); break;
  15. case 3: return array('code' => $parts[5], 'message' => 'odrzucona'); break;
  16. case 4: return array('code' => $parts[5], 'message' => 'rozpoczęta'); break;
  17. case 5: return array('code' => $parts[5], 'message' => 'oczekuje na odbiór'); break;
  18. case 6: return array('code' => $parts[5], 'message' => 'autoryzacja odmowna'); break;
  19. case 7: return array('code' => $parts[5], 'message' => 'płatność odrzucona'); break;
  20. case 99: return array('code' => $parts[5], 'message' => 'płatność odebrana - zakończona'); break;
  21. case 888: return array('code' => $parts[5], 'message' => 'błędny status'); break;
  22. default: return array('code' => false, 'message' => 'brak statusu'); 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'); //-- brak wszystkich parametrow
  28.  
  29. if ($_POST['pos_id'] != PLATNOSCI_POS_ID) die('ERROR: WRONG POS ID'); //--- błędny numer POS
  30.  
  31. $sig = md5( $_POST['pos_id'] . $_POST['session_id'] . $_POST['ts'] . PLATNOSCI_KEY2);
  32. if ($_POST['sig'] != $sig) die('ERROR: WRONG SIGNATURE'); //--- błędny podpis
  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'] ) { //--- rozpoznany status transakcji
  80.  
  81. $pos_id = $parts[1];
  82. $session_id = $parts[2];
  83. $order_id = $parts[3];
  84. $amount = $parts[4]; //-- w groszach
  85. $status = $parts[5];
  86. $desc = $parts[6];
  87. $ts = $parts[7];
  88. $sig = $parts[8];
  89. /* TODO: zmiana statusu transakcji w systemie Sklepu */
  90.  
  91. /* przykladowo:
  92.   if ( $result['code'] == '99' ) {
  93.   if ( rozliczamy_zamowienie_srodki_wplynely ) {
  94.   // udalo sie zapisac dane wiec odsylamy OK
  95.   echo "OK";
  96.   exit;
  97.   }
  98.   } else if ( $result['code'] == '2' ) {
  99.   // transakcja anulowana mozemy również anulować zamowienie
  100.   } else {
  101.   // inne akcje
  102.   }
  103.   */
  104.  
  105. // jezeli wszytskie operacje wykonane poprawnie wiec odsylamy ok
  106. // w innym przypadku należy wygenerować błąd
  107. // if ( wszystko_ok ) {
  108. echo "OK";
  109. exit;
  110. // } else {
  111. //
  112. // }
  113.  
  114.  
  115. } else {
  116. /* TODO: obsługa powiadamiania o błędnych statusach transakcji*/
  117. echo "ERROR: Blad danych ....\n";
  118. echo "code=" . $result['code'] . " message=" . $result['message'] . "\n";
  119. echo $platnosci_response;
  120. // powiadomienie bedzie wysłane ponownie przez platnosci.pl
  121. // ewentualnie dodajemy sobie jakis wpis do logow ...
  122. }
  123.  
  124. ?>


I tyle ... co dalej.. może ktoś pomóc ?

http://www.platnosci.pl/download.php?files,23 smile.gif
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.