RefillPhone.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. namespace refill\gdsinopec;
  3. require_once(BASE_HELPER_RAPI_PATH . '/gdsinopec/config.php');
  4. use refill;
  5. use Log;
  6. use Swoole;
  7. class RefillPhone extends refill\IRefillThird
  8. {
  9. public function __construct($cfgs)
  10. {
  11. parent::__construct($cfgs);
  12. }
  13. public function get_supplier()
  14. {
  15. $access_token = config::token();
  16. if($access_token === false) {
  17. return [false, 'token获取失败'];
  18. }
  19. $params['access_token'] = $access_token;
  20. $resp = http_request(config::SUPPLIER_URL, $params, 'GET', false, config::ExtHeaders, $net_errno);
  21. if (empty($resp)) {
  22. return [false, '网络错误'];
  23. } else {
  24. Log::record($resp, Log::DEBUG);
  25. $resp = json_decode($resp, true);
  26. if (empty($resp)) {
  27. return [false, '网络错误'];
  28. } elseif ($resp['state'] === 'ok') {
  29. return [true, $resp['data']['list']];
  30. } else {
  31. return [false, $resp['info']];
  32. }
  33. }
  34. }
  35. public function find_list($supplier_origin)
  36. {
  37. $access_token = config::token();
  38. if($access_token === false) {
  39. return [false, 'token获取失败'];
  40. }
  41. $params['access_token'] = $access_token;
  42. $params['page_number'] = 1;
  43. $params['page_size'] = config::PAGE_SIZE;
  44. $params['supplier_origin'] = $supplier_origin;
  45. $resp = http_request(config::LIST_URL, $params, 'GET', false, config::ExtHeaders, $net_errno);
  46. if (empty($resp)) {
  47. return [false, '网络错误'];
  48. } else {
  49. Log::record($resp, Log::DEBUG);
  50. $resp = json_decode($resp, true);
  51. if (empty($resp)) {
  52. return [false, '网络错误'];
  53. } elseif ($resp['state'] === 'ok') {
  54. return [true, $resp['data']['list']];
  55. } else {
  56. return [false, $resp['info']];
  57. }
  58. }
  59. }
  60. private function match_product($supplier_origin, $amount)
  61. {
  62. [$state, $products] = $this->find_list($supplier_origin);
  63. if($state === false) {
  64. return [false, $products];
  65. } else {
  66. $match_products = [];
  67. $amount = intval($amount);
  68. foreach ($products as $product)
  69. {
  70. $value = intval($product['value']);
  71. $match_products[$value] = $product;
  72. }
  73. if(!empty($match_products) && array_key_exists($amount, $match_products)) {
  74. return [true, $match_products[$amount]];
  75. }else{
  76. return [false, '面值匹配失败'];
  77. }
  78. }
  79. }
  80. private function getProduct($product_code)
  81. {
  82. $thrid_refill = Model('thrid_refill');
  83. return $thrid_refill->getProduct(['system_code' => $product_code,'opened' => 1]);
  84. }
  85. private function req_params(int $phone, $supplier_origin, $product_id, string $order_sn, $sku)
  86. {
  87. $params['supplier_origin'] = $supplier_origin;
  88. $params['quantity'] = 1;
  89. $params['product_id'] = $product_id;
  90. $params['mobile'] = $phone;
  91. $params['customer_order_id'] = $order_sn;
  92. $params['sku'] = $sku;
  93. return json_encode($params);
  94. }
  95. public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
  96. {
  97. $province = $params['province'] ?? -1;
  98. if($province <= 0) {
  99. return [false, '省份获取错误', false];
  100. }
  101. $tokener = function ()
  102. {
  103. $times = 10;
  104. do
  105. {
  106. $token = config::token();
  107. if($token === false) {
  108. Swoole\Coroutine::sleep(10);
  109. } else {
  110. return $token;
  111. }
  112. } while($times-- > 0);
  113. return false;
  114. };
  115. $access_token = $tokener();
  116. if($access_token === false) {
  117. return [false, 'token获取失败', false];
  118. }
  119. $order_sn = $params['order_sn'];
  120. $supplier_origin = config::SUPPLIER_ORIGIN[$province];
  121. if(empty($supplier_origin)) {
  122. return [false, '该省份不支持', false];
  123. }
  124. $third_product = $this->getProduct($params['product_code']);
  125. [$state, $product] = $this->match_product($supplier_origin, $third_product['refill_amount']);
  126. if($state === false) {
  127. return [false, $product, false];
  128. }
  129. $product_id = $product['id'];
  130. $sku = $product['sku'];
  131. $params = $this->req_params($card_no, $supplier_origin, $product_id, $order_sn, $sku);
  132. $url = config::ORDER_URL . $access_token;
  133. $resp = http_post_data($url, $params, config::ExtHeaders, $net_errno);
  134. if (empty($resp)) {
  135. return [false, '网络错误', true];
  136. }
  137. else
  138. {
  139. Log::record($resp, Log::DEBUG);
  140. $resp = json_decode($resp, true);
  141. if (empty($resp)) {
  142. return [false, '网络错误', true];
  143. } elseif ($resp['state'] === 'ok') {
  144. return [true, $resp['data']['order_id'], false];
  145. } else {
  146. return [false, $resp['info'], false];
  147. }
  148. }
  149. }
  150. public function query($refill_info)
  151. {
  152. $access_token = config::token();
  153. if($access_token === false) {
  154. return [false, 'token获取失败'];
  155. }
  156. $params['access_token'] = $access_token;
  157. $params['customer_order_id'] = $refill_info['order_sn'];
  158. $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
  159. if (empty($resp)) {
  160. return [false, '网络错误'];
  161. }
  162. else
  163. {
  164. Log::record($resp, Log::DEBUG);
  165. $resp = json_decode($resp, true);
  166. if (empty($resp)) {
  167. return [false, '网络错误'];
  168. }
  169. elseif ($resp['state'] === 'ok')
  170. {
  171. $status = $resp['data']['order_status'];
  172. if ($status === 2) {
  173. $order_state = ORDER_STATE_SUCCESS;
  174. } elseif ($status === 3) {
  175. $order_state = ORDER_STATE_CANCEL;
  176. } elseif ($status === 0) {
  177. $order_state = ORDER_STATE_SEND;
  178. } else {
  179. return [false, $status];
  180. }
  181. return [true, $order_state];
  182. }
  183. else {
  184. return [false, $resp['info']];
  185. }
  186. }
  187. }
  188. public function callback()
  189. {
  190. return false;
  191. }
  192. }