Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tpay - brak poprawnej odpowiedzi po zaktualizowaniu sumy md5
Forum PHP.pl > Forum > PHP
DawidR1
Witam, od jakiegoś czasu dostaję maile z tpay odnośnie płatności (brak poprawnej odpowiedzi). Chciałem poprosić o sprawdzenie mojego kodu php co w nim jest nie tak, bo ja już nie daje rady.

Zmianie uległa suma kontrolna tworzonej transakcji "92: 'md5sum' => md5(implode('&',$tranferuj_md5sum))" - dodany & i potwierdzenie juz nie dziala.

  1. public function cancel_order()
  2. {
  3. $cookie = cookie::get('sklep');
  4. if(empty($cookie)){
  5. echo 'Próba naruszenia - brak id sesji - proszę włączyć obsługę ciasteczek "cookie"';
  6. exit();
  7. }
  8.  
  9. $order = ORM::factory('order')->where('unique_id',(int)$this->uri->segment(3) )->find();
  10. if(is_numeric($this->uri->segment(3)) and $order->ip_address = my::client_ip())
  11. {
  12. if($order->status_id != 5)
  13. {
  14. $status_changes = unserialize($order->status_changes);
  15. $status_changes[] = array('status'=>ORM::factory('order_status')->find($order->status_id)->name,'date'=>date('Y-m-d H:i:s'));
  16. $order->status_id = 5;
  17. $order->transferuj_status = 'Zamówienie anulowane przez klienta.';
  18. $order->status_changes = serialize($status_changes);
  19. $order->save();
  20. unset($_SESSION['shop']);
  21. $_SESSION['msg']['info'] = 'Zamówienie zostało pomyślnie anulowane.';
  22. $this->_send_email_about_canceling($this->uri->segment(3), $order->email);
  23. url::redirect('shop/order_form');
  24. }
  25. $order->save();
  26. }
  27. else
  28. $_SESSION['msg']['error'] == 'Zamówienie nie mogło być anulowane - błędne ID zamówienia lub próba naruszenia.';
  29.  
  30. url::redirect('shop/order_form');
  31. }
  32.  
  33.  
  34. public function show_order_summary()
  35. {
  36. $tpl = new View('shop/show_order_summary');
  37. if(!is_numeric($this->uri->segment(3)))
  38. {
  39. echo 'Błąd zamówienia'; exit();
  40.  
  41. }
  42.  
  43. $order = ORM::factory('order')->where('unique_id',$this->uri->segment(3))->find();
  44.  
  45. if($order->status_id != 1){//jezeli anulowana
  46. if($order->status_id == 5)
  47. $_SESSION['msg']['info'] = 'Zamówienie zostało anulowane';
  48. else
  49. $_SESSION['msg']['info'] = 'Zamówienie jest w trakcie realizacji';
  50.  
  51. url::redirect('shop/show_order_summary/'.$this->uri->segment(3).'/cancelled');
  52.  
  53. }
  54. $product_info_summary = unserialize($order->summary);
  55.  
  56. foreach ($product_info_summary as $product){
  57. $amount_to_pay += $product['price_brutto']*$product['amount'];
  58. $payment_delivery = $product['payment_delivery'];
  59. }
  60. $amount_to_pay += $payment_delivery;
  61. $crc = time();
  62.  
  63. $status = $this->uri->segment(4);
  64. $tpl->status = $status;
  65. if($status == 'ok')
  66. {
  67. $_SESSION['msg']['info'] = 'Transakcja wykonana pomyślnie.';
  68. unset($_SESSION['shop']);
  69. }
  70. elseif($status == 'error')
  71. {
  72. $_SESSION['msg']['error'] = 'Transakcja nie powiodła się.';
  73. unset($_SESSION['shop']);
  74.  
  75. }
  76.  
  77.  
  78. if(empty($status))
  79. {
  80. $tranferuj_md5sum = array(
  81. 'id' => $this->id_sprzedawcy,
  82. 'kwota' => str_replace(',','.',$amount_to_pay),
  83. 'crc' => $crc,
  84. 'kod' => $this->kod_pomocniczny// kod potwierdyajacz sprzedawcy
  85. );
  86.  
  87. $transferuj_data = array(
  88. 'id' => $this->id_sprzedawcy,//ID sprzedawcy
  89. 'kwota' => str_replace(',','.',$amount_to_pay),//0.00
  90. 'opis' => kohana::config('settings.cms.title.value'),//Opis transakcji
  91. 'crc' => $crc,//Ciag pomocniczy
  92. 'md5sum' => md5(implode('&',$tranferuj_md5sum)),// sumy kontrolnej
  93. 'akceptuje_regulamin' => 'TRUE',// wartosc nieistatna
  94. 'wyn_url' => url::base().'shop/transferuj_receive_information/'.$this->uri->segment(3),//Adres URL powaiadomienia
  95. 'wyn_email' => kohana::config('settings.cms.shop_email.value'),//Adres mailowy powiadomienia kohana::config('settings.cms.email.value')
  96. 'opis_sprzed' => kohana::config('settings.cms.title.value'),
  97. 'pow_url' => url::base().'shop/show_order_summary/'.$this->uri->segment(3).'/ok',//Adres powrotny po wykonaniu transakcji z wynikiem poprawnym
  98. 'pow_url_blad' => url::base().'shop/show_order_summary/'.$this->uri->segment(3).'/error',//Adres powrotny po wykonaniu transakcji z wynikiem b?dnym (domy?nie j/w)
  99. 'pow_tekst' => 'Wróć do strony: '.kohana::config('settings.cms.short_title.value'),//Tekst na przycisku powrotnym
  100. 'email' => $order->email,
  101. 'nazwisko' => $order->lastname,
  102. 'imie' => $order->firstname,
  103. 'adres' => $order->address,
  104. 'miasto' => $order->city,
  105. 'kod' => $order->zipcode,
  106. 'kraj' => 'Polska',
  107. 'telefon' => $order->phone
  108. );
  109. }
  110. //unset($_SESSION['shop']);
  111. $tpl->transferuj_data = $transferuj_data;
  112. $tpl->order = $order;
  113. $tpl->product_info_summary = $product_info_summary;
  114. $tpl->transferuj_ip_address = $this->transferuj_ip_address;
  115. $tpl->transferuj_address = $this->transferuj_address;
  116.  
  117. $this->template->content .= $tpl->render();
  118. }
  119.  
  120. public function show_basket()//realized by ajax
  121. {
  122.  
  123. $this->auto_render = false;
  124. $tpl = view::factory('shop/mini_basket');
  125.  
  126. $tpl->shop_basket = $_SESSION['shop']['basket'];
  127. return $tpl->render();
  128. }
  129.  
  130. public function remove_from_basket()
  131. {
  132. $this->auto_render = false;
  133. unset($_SESSION['shop']['basket'][$_POST['id']]);
  134. echo $this->show_basket();
  135. }
  136.  
  137. public function _validate_postcode(Validation $array, $field)
  138. {
  139.  
  140. if(!empty($array[$field]))
  141. if(!preg_match('/^[0-9]{2}-?[0-9]{3}$/Du',$array[$field]))
  142. $array->add_error($field, 'postcode');
  143. }
  144.  
  145. public function _string_must_not_be_number(Validation $array, $field)
  146. {
  147. if(isset($array[$field]) && is_numeric($array[$field]))
  148. $array->add_error($field, 'string_must_not_be_number');
  149. }
  150.  
  151.  
  152. public function transferuj_receive_information()
  153. {
  154. $this->build_body = false;
  155. $order_unique_id = $this->uri->segment(3);
  156. //if(!$order_unique_id)
  157. // echo 'Błąd - błędny nr zamówienia. ';
  158. $transferuj_dane_transakcji = array(
  159. 'id',
  160. 'tr_status',
  161. 'tr_id',
  162. 'tr_amount' ,
  163. 'md5sum',
  164. 'tr_paid',
  165. 'tr_error',
  166. 'tr_date',
  167. 'tr_desc',
  168. 'tr_email'
  169. );// tylko zeby wiedziec jakie pola przesyla
  170. $order = ORM::factory('order')->where('unique_id',$order_unique_id)->find();
  171.  
  172. if($_SERVER['REMOTE_ADDR']== $this->transferuj_ip_address && !empty($_POST))
  173. {
  174. $post = $_POST;
  175. if($post['md5sum'] != md5($post['id'].$post['tr_id'].$post['tr_amount'].$post['tr_crc'].$this->kod_pomocniczny))
  176. {
  177. $order->transferuj_status = 'BŁĄD';
  178. $order->transferuj_transaction_id = $post['tr_id'];
  179. $order->paid_amount = $post['tr_paid'];
  180. $order->transferuj_error = 'Błąd transakcji: niepoprawna suma MD5 - próba naruszenia';
  181. $order->save();
  182.  
  183. }else
  184. {
  185. // sprawdzenie stanu transakcji
  186. if($post['tr_status'] =='TRUE' && $post['tr_error']=='none')
  187. {
  188.  
  189. $order->transferuj_status = 'OK';
  190. $order->transferuj_transaction_id = $post['tr_id'];
  191. $order->paid_amount = $post['tr_paid'];
  192. $order->transferuj_error = 'Sukces';
  193. $order->save();
  194.  
  195. }
  196. elseif($post['tr_status'] =='TRUE' && $post['tr_error'] == 'overpay')
  197. {
  198. $order->transferuj_status = $post['tr_error'];
  199. $order->transferuj_transaction_id = $post['tr_id'];
  200. $order->paid_amount = $post['tr_paid'];
  201. $order->transferuj_error = 'Ostrzeżenie - '.$post['tr_error'].' (nadpłata)';
  202. $order->save();
  203.  
  204. }
  205. elseif($post['tr_status'] =='TRUE' && $post['tr_error'] == 'surcharge')
  206. {
  207. $order->transferuj_status = $post['tr_error'];
  208. $order->transferuj_transaction_id = $post['tr_id'];
  209. $order->paid_amount = $post['tr_paid'];
  210. $order->transferuj_error = 'Ostrzeżenie - '.$post['tr_error'].' (niedopłata)';
  211. $order->save();
  212. }
  213. elseif($post['tr_status'] =='FALSE')
  214. {
  215. $order->transferuj_status = 'BŁĄD';
  216. $order->save();
  217. }
  218. }
  219.  
  220.  
  221. echo 'TRUE'; exit();
  222.  
  223. }
  224.  
  225. echo 'FALSE'; exit();
  226.  
  227.  
  228. }
ohm
A czy tpay np nie podawał informacji o tym że na przykład zmieniła się weryfikacja md5? Przede wszystkim to uderzaj do nich na support.
DawidR1
informował i to poprawiłem, płatności przechodzą, ale na stronie u siebie nie mam potwierdzenia. Tpay odsyła tylko do manuala.
Uważam że gdzieś od linii 172 sie wysypało i daje komunikat FALSE.
viking
A nie możesz używać po prostu bibliotek tpay z githuba? Poprawiali to (wiem bo też w pewnym momencie dostaliśmy w firmie maila o zmianach). Albo zobacz zmiany u nich i dopasuj do swojego kodu.
nospor
if($post['md5sum'] != md5($post['id'].$post['tr_id'].$post['tr_amount'].$post['tr_crc'].$this->kod_pomocniczny))
Ja tam sie nie znam, ale jak mowisz ze nagle trzeba laczyc przez & to czemu w tym kodzie nie laczysz?
nospor
No ale co jest nieprostego? Skoro do nich slesz md5sum z & to czemu potem sprawdzasz bez & questionmark.gif

Toz logiczne ze sie nie zgadzaja wowczas
DawidR1
też myślałem że to to, ale sam tpay mi napisał ze tak ma być

"Uprzejmie informujemy, iż kod przesłany przez Państwa w poprzedniej wiadomości dotyczy sumy kontrolnej z powiadomienia i odbierania danych po transakcji, ta md5 pozostaje bez zmian ( https://docs.tpay.com/#!/Tpay/tpay_notifications)"
nospor
No to idz linijka po linijce i sprawdzaj gdzie kod sie wysypuje. Ja wiem ze to idzie z od nich wiec jakis file_put_contents() i do dziela

A tak na szybko, skoro daje ci FALSE to znaczy ze ten warunek
if($_SERVER['REMOTE_ADDR']== $this->transferuj_ip_address && !empty($_POST))
nie jest spelniony
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-2024 Invision Power Services, Inc.