RefillPhone.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace refill\zhixin_fast;
  3. require_once(BASE_HELPER_RAPI_PATH . '/zhixin_fast/config.php');
  4. use mtopcard;
  5. use refill;
  6. use Log;
  7. class RefillPhone extends refill\IRefillPhone
  8. {
  9. public function __construct($cfgs)
  10. {
  11. parent::__construct($cfgs);
  12. }
  13. private function add_params(int $phone, int $amount, string $order_sn, int $card_type): array
  14. {
  15. $cp_getter = function ($card_type)
  16. {
  17. if ($card_type == mtopcard\ChinaMobileCard) {
  18. return "01";
  19. } elseif ($card_type == mtopcard\ChinaUnicomCard) {
  20. return "03";
  21. } elseif ($card_type == mtopcard\ChinaTelecomCard) {
  22. return "02";
  23. } else {
  24. return false;
  25. }
  26. };
  27. $cp = $cp_getter($card_type);
  28. if ($cp === false) {
  29. return [];
  30. }
  31. $params = [
  32. 'mrch_no' => config::MRCH_NO,
  33. 'request_time' => date('YmdHis'),
  34. 'client_order_no' => $order_sn,
  35. 'product_type' => 1,
  36. 'phone_no' => "$phone",
  37. 'cp' => $cp,
  38. 'city_code' => "",
  39. 'recharge_amount' => $amount * 100,
  40. 'recharge_type' => 0,
  41. 'recharge_desc' => "",
  42. 'notify_url' => config::NOTIFY_URL,
  43. ];
  44. $params['sign'] = config::sign($params);
  45. return $params;
  46. }
  47. //[$state, $errmsg, $neterr]
  48. public function add($card_no, $card_type, $amount, $params, &$net_errno = 0): array
  49. {
  50. $params = $this->add_params($card_no, $amount, $params['order_sn'], $card_type);
  51. if (empty($params)) {
  52. return [false, '提单参数不符合', false];
  53. }
  54. $resp = http_post_data(config::ORDER_URL, json_encode($params), config::ExtHeaders);
  55. if (empty($resp)) {
  56. return [false, '网络错误', true];
  57. }
  58. else
  59. {
  60. Log::record($resp, Log::DEBUG);
  61. $resp = json_decode($resp, true);
  62. if (empty($resp)) {
  63. return [false, '网络错误', true];
  64. }
  65. $nRtn = intval($resp['code']);
  66. if ($nRtn === 2) {
  67. return [true, $resp['data']['up_order_no'], false];
  68. } elseif (in_array($nRtn, config::ERRCODES, true)) {
  69. return [false, config::ERRMSG[$nRtn], false];
  70. } elseif (in_array($nRtn, [625])) {
  71. $net_errno = "HTTP-$nRtn";
  72. return [false, "重复订单号", true];
  73. } else {
  74. $net_errno = "HTTP-998";
  75. return [false, "其他异常", true];
  76. }
  77. }
  78. }
  79. private function query_params($refill_info)
  80. {
  81. $params = [
  82. 'mrch_no' => config::MRCH_NO,
  83. 'request_time' => date('YmdHis'),
  84. 'client_order_no' => $refill_info['order_sn'],
  85. 'order_time' => date('YmdHis')
  86. ];
  87. $params['sign'] = config::sign($params);
  88. return $params;
  89. }
  90. public function query($refill_info): array
  91. {
  92. $params = $this->query_params($refill_info);
  93. $resp = http_post_data(config::QUERY_URL, json_encode($params), config::ExtHeaders);
  94. if (empty($resp)) {
  95. return [false, '系统错误', ''];
  96. }
  97. else
  98. {
  99. Log::record($resp, Log::DEBUG);
  100. $resp = json_decode($resp, true);
  101. if (empty($resp)) {
  102. return [false, '系统错误', ''];
  103. }
  104. $official_sn = '';
  105. $nRtn = intval($resp['code']);
  106. if ($nRtn === 2)
  107. {
  108. $order_id = $refill_info['order_id'];
  109. $recharge_status = $resp['data']['recharge_status'];
  110. if ($recharge_status == "2") {
  111. $official_sn = $resp['data']['elecardID'] ?? '';
  112. $ch_trade_no = $resp['data']['up_order_no'] ?? '';
  113. Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no,'official_sn' => $official_sn]);
  114. $order_state = ORDER_STATE_SUCCESS;
  115. }
  116. elseif($recharge_status == "6") {
  117. $ch_trade_no = $resp['data']['up_order_no'] ?? '';
  118. Model('refill_order')->edit($order_id, ['ch_trade_no' => $ch_trade_no]);
  119. $order_state = ORDER_STATE_CANCEL;
  120. }
  121. else {
  122. $order_state = ORDER_STATE_SEND;
  123. }
  124. }
  125. elseif ($nRtn == 626 && (time() - $refill_info['commit_time'] >= 600)) {
  126. $order_state = ORDER_STATE_NOEXIST;
  127. }
  128. else {
  129. return [false, '其他,或网络错误', ''];
  130. }
  131. return [true, $order_state, $official_sn];
  132. }
  133. }
  134. private function balance_params()
  135. {
  136. $params = [
  137. 'mrch_no' => config::MRCH_NO,
  138. 'request_time' => date('YmdHis')
  139. ];
  140. $params['sign'] = config::sign($params);
  141. return $params;
  142. }
  143. public function balance(): array
  144. {
  145. $params = $this->balance_params();
  146. $resp = http_post_data(config::BALANCE_URL, json_encode($params), config::ExtHeaders);
  147. if (empty($resp)) {
  148. return [false, '系统错误'];
  149. }
  150. else
  151. {
  152. Log::record($resp, Log::DEBUG);
  153. $resp = json_decode($resp, true);
  154. if (empty($resp)) {
  155. return [false, '系统错误'];
  156. } elseif (intval($resp['code']) === 2) {
  157. return [true, ncPriceFormat($resp['data']['balance'])];
  158. } else {
  159. return [false, '其它,失败'];
  160. }
  161. }
  162. }
  163. }