RefillOil.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace refill\gftd;
  3. require_once(BASE_HELPER_RAPI_PATH . '/gftd/config.php');
  4. use refill;
  5. use mtopcard;
  6. use Log;
  7. class RefillOil extends refill\IRefillOil
  8. {
  9. public function __construct($cfgs)
  10. {
  11. parent::__construct($cfgs);
  12. }
  13. private function req_params(string $card_no,int $card_type,int $amount,array $other)
  14. {
  15. $params['appid'] = config::APP_ID;
  16. $params['ts'] = time();
  17. $params['productId'] = $this->product_id($amount,$card_type);
  18. $params['outOrderNumber'] = $other['order_sn'];
  19. $params['fuelCardNumber'] = $card_no;
  20. $params['fuelCardUserName'] = "";
  21. $params['fuelCardUserID'] = "";
  22. $card_info = refill\util::read_card($card_no,$card_type);
  23. $params['telephone'] = $card_info['bind_phone'];
  24. $params['phoneNumber'] = $card_info['bind_phone'];
  25. return [$params, $card_info];
  26. }
  27. private function product_id(int $amount,int $cart_type)
  28. {
  29. if($cart_type === mtopcard\PetroChinaCard)
  30. {
  31. switch ($amount) {
  32. case 100: return 1;
  33. case 200: return 2;
  34. case 500: return 3;
  35. case 1000: return 4;
  36. }
  37. }
  38. else
  39. {
  40. switch ($amount) {
  41. case 100: return 5;
  42. case 200: return 6;
  43. case 500: return 7;
  44. case 1000: return 8;
  45. }
  46. }
  47. return false;
  48. }
  49. private function sign($params)
  50. {
  51. $body = $this->body($params);
  52. $body .= config::APP_SECRET;
  53. return md5($body);
  54. }
  55. protected function check_empty($value)
  56. {
  57. if (!isset($value))
  58. return true;
  59. if ($value === null)
  60. return true;
  61. if (trim($value) === "")
  62. return true;
  63. return false;
  64. }
  65. private function body($params)
  66. {
  67. ksort($params);
  68. $body = "";
  69. $i = 0;
  70. foreach ($params as $k => $v)
  71. {
  72. if (false === $this->check_empty($v) && "@" != substr($v, 0, 1))
  73. {
  74. if ($i == 0) {
  75. $body .= "{$k}" . "=" . $v;
  76. } else {
  77. $body .= "&" . "{$k}" . "=" . $v;
  78. }
  79. $i++;
  80. }
  81. }
  82. return $body;
  83. }
  84. public function add($card_no,$card_type,$amount,$input)
  85. {
  86. [$params,$card_info] = $this->req_params($card_no,$card_type,$amount,$input);
  87. $sign = $this->sign($params);
  88. $params['signature'] = $sign;
  89. $uri = config::ORDER_URL . "/fuelRecharge/create";
  90. $resp = http_post_data($uri,json_encode($params), config::ExtHeaders);
  91. if(empty($resp)) {
  92. return [false,'系统错误',true];
  93. }
  94. else
  95. {
  96. Log::record($resp,Log::DEBUG);
  97. $resp = json_decode($resp,true);
  98. if(empty($resp)) {
  99. return [false,'系统错误',true];
  100. }
  101. elseif($resp['code'] == 0)
  102. {
  103. refill\util::inc_card($card_no,$card_info);
  104. $data = $resp['data'];
  105. return [true,$data['orderNumber'], false];
  106. }
  107. else {
  108. return [false,$resp['message'], false];
  109. }
  110. }
  111. }
  112. private function query_params($order_sn)
  113. {
  114. $params['appid'] = config::APP_ID;
  115. $params['ts'] = time();
  116. $params['outOrderNumber'] = $order_sn;
  117. return $params;
  118. }
  119. public function query($refill_info)
  120. {
  121. $order_sn = $refill_info['order_sn'];
  122. $order_id = $refill_info['order_id'];
  123. $params = $this->query_params($order_sn);
  124. $sign = $this->sign($params);
  125. $params['signature'] = $sign;
  126. $uri = config::ORDER_URL . "/fuelRecharge/order/detail";
  127. $resp = http_post_data($uri,json_encode($params), config::ExtHeaders);
  128. Log::record("query resp={$resp}",Log::DEBUG);
  129. if(empty($resp)) {
  130. return [false,'网络错误'];
  131. }
  132. Log::record($resp,Log::DEBUG);
  133. $resp = json_decode($resp,true);
  134. if(empty($resp)) {
  135. return [false,'网络错误'];
  136. }
  137. elseif($resp['code'] == 0)
  138. {
  139. $data = $resp['data'];
  140. $status = intval($data['orderStatus']);
  141. if ($status === 101) {
  142. $updata['official_sn'] = $data['voucher'];
  143. $updata['ch_trade_no'] = $data['orderNumber'];
  144. $updata['err_msg'] = $resp['message'];
  145. Model('refill_order')->edit($order_id, $updata);
  146. return [true, ORDER_STATE_SUCCESS];
  147. }
  148. elseif ($status === 102) {
  149. $updata['official_sn'] = $data['voucher'];
  150. $updata['ch_trade_no'] = $data['orderNumber'];
  151. $updata['err_msg'] = $resp['message'];
  152. Model('refill_order')->edit($order_id, $updata);
  153. $this->onError($resp['message'],$order_id);
  154. return [true, ORDER_STATE_CANCEL];
  155. }
  156. elseif($status === 100 || $status === 106) {
  157. return [true, ORDER_STATE_SEND];
  158. }
  159. else {
  160. return [false, $resp['message']];
  161. }
  162. }
  163. else {
  164. return [false,$resp['message']];
  165. }
  166. }
  167. public function onError($msg,$order_id)
  168. {
  169. if(in_array($msg,config::BlackMsgs))
  170. {
  171. $refill = Model('refill_order');
  172. $order = $refill->getOrderInfo(['order_id' => $order_id]);
  173. if(empty($order)) return false;
  174. $card_no = $order['card_no'];
  175. if(!empty($card_no)) {
  176. refill\util::set_black($card_no);
  177. return true;
  178. }
  179. }
  180. return false;
  181. }
  182. }