Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne][HTML][PHP]Adres raportów PayU, Problem z raportami
programistaarek
post
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
 
Start new topic
Odpowiedzi
programistaarek
post
Post #2





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

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 19:36