RefillCallBack.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace refill\sohan_fast;
  3. require_once(BASE_HELPER_RAPI_PATH . '/sohan_fast/config.php');
  4. use refill;
  5. class RefillCallBack implements refill\IRefillCallBack
  6. {
  7. private function sign($params) : string
  8. {
  9. //MD5(Orderid=SH2009_05150001&Chargeid=2893131209&Orderstatu_int=16&Errorcode=0000&Password=0FE8E43F53BB5848)
  10. $keys = ['Orderid','Chargeid','Orderstatu_int','Errorcode','Password'];
  11. $body = '';
  12. foreach ($keys as $key)
  13. {
  14. if($key == 'Password') {
  15. $body .= "$key=" . config::appSecret;
  16. }
  17. else{
  18. $body .= "$key=$params[$key]&";
  19. }
  20. }
  21. return md5($body);
  22. }
  23. public function verify($params): bool
  24. {
  25. $sign = $this->sign($params);
  26. if ($params['Sign'] == $sign) {
  27. return true;
  28. } else {
  29. return false;
  30. }
  31. }
  32. //[$order_id, $success, $can_try, $need_handle, $official_sn]
  33. public function notify($params): array
  34. {
  35. $order_sn = $params['Orderid'];
  36. $ch_trade_no = $params['Chargeid'];
  37. $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
  38. if (empty($order_info)) {
  39. return [false, false, false, false, ''];
  40. }
  41. $order_id = $order_info['order_id'];
  42. $status = intval($params['Orderstatu_int']);
  43. if (in_array($status, [11, 16])) {
  44. $official_sn = config::get_osn($params['Orderstatu_text']);
  45. Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no, 'official_sn' => $official_sn]);
  46. return [$order_id, true, false, true, $official_sn];
  47. }
  48. elseif (in_array($status, [20, 21, 26])) {
  49. Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no]);
  50. return [$order_id, false, true, true, ''];
  51. }
  52. else {
  53. return [$order_id, false, false, false, ''];
  54. }
  55. }
  56. }