123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- <?php
- namespace refill\gdsinopec;
- require_once(BASE_HELPER_RAPI_PATH . '/gdsinopec/config.php');
- use refill;
- use Log;
- use Swoole;
- class RefillPhone extends refill\IRefillThird
- {
- public function __construct($cfgs)
- {
- parent::__construct($cfgs);
- }
- public function get_supplier()
- {
- $access_token = config::token();
- if($access_token === false) {
- return [false, 'token获取失败'];
- }
- $params['access_token'] = $access_token;
- $resp = http_request(config::SUPPLIER_URL, $params, 'GET', false, config::ExtHeaders, $net_errno);
- if (empty($resp)) {
- return [false, '网络错误'];
- } else {
- Log::record($resp, Log::DEBUG);
- $resp = json_decode($resp, true);
- if (empty($resp)) {
- return [false, '网络错误'];
- } elseif ($resp['state'] === 'ok') {
- return [true, $resp['data']['list']];
- } else {
- return [false, $resp['info']];
- }
- }
- }
- public function find_list($supplier_origin)
- {
- $access_token = config::token();
- if($access_token === false) {
- return [false, 'token获取失败'];
- }
- $params['access_token'] = $access_token;
- $params['page_number'] = 1;
- $params['page_size'] = config::PAGE_SIZE;
- $params['supplier_origin'] = $supplier_origin;
- $resp = http_request(config::LIST_URL, $params, 'GET', false, config::ExtHeaders, $net_errno);
- if (empty($resp)) {
- return [false, '网络错误'];
- } else {
- Log::record($resp, Log::DEBUG);
- $resp = json_decode($resp, true);
- if (empty($resp)) {
- return [false, '网络错误'];
- } elseif ($resp['state'] === 'ok') {
- return [true, $resp['data']['list']];
- } else {
- return [false, $resp['info']];
- }
- }
- }
- private function match_product($supplier_origin, $amount)
- {
- [$state, $products] = $this->find_list($supplier_origin);
- if($state === false) {
- return [false, $products];
- } else {
- $match_products = [];
- $amount = intval($amount);
- foreach ($products as $product)
- {
- $value = intval($product['value']);
- $match_products[$value] = $product;
- }
- if(!empty($match_products) && array_key_exists($amount, $match_products)) {
- return [true, $match_products[$amount]];
- }else{
- return [false, '面值匹配失败'];
- }
- }
- }
- private function getProduct($product_code)
- {
- $thrid_refill = Model('thrid_refill');
- return $thrid_refill->getProduct(['system_code' => $product_code,'opened' => 1]);
- }
- private function req_params(int $phone, $supplier_origin, $product_id, string $order_sn, $sku)
- {
- $params['supplier_origin'] = $supplier_origin;
- $params['quantity'] = 1;
- $params['product_id'] = $product_id;
- $params['mobile'] = $phone;
- $params['customer_order_id'] = $order_sn;
- $params['sku'] = $sku;
- return json_encode($params);
- }
- public function add($card_no, $card_type, $amount, $params,&$net_errno = 0)
- {
- $province = $params['province'] ?? -1;
- if($province <= 0) {
- return [false, '省份获取错误', false];
- }
- $tokener = function ()
- {
- $times = 10;
- do
- {
- $token = config::token();
- if($token === false) {
- Swoole\Coroutine::sleep(10);
- } else {
- return $token;
- }
- } while($times-- > 0);
- return false;
- };
- $access_token = $tokener();
- if($access_token === false) {
- return [false, 'token获取失败', false];
- }
- $order_sn = $params['order_sn'];
- $supplier_origin = config::SUPPLIER_ORIGIN[$province];
- if(empty($supplier_origin)) {
- return [false, '该省份不支持', false];
- }
- $third_product = $this->getProduct($params['product_code']);
- [$state, $product] = $this->match_product($supplier_origin, $third_product['refill_amount']);
- if($state === false) {
- return [false, $product, false];
- }
- $product_id = $product['id'];
- $sku = $product['sku'];
- $params = $this->req_params($card_no, $supplier_origin, $product_id, $order_sn, $sku);
- $url = config::ORDER_URL . $access_token;
- $resp = http_post_data($url, $params, config::ExtHeaders, $net_errno);
- if (empty($resp)) {
- return [false, '网络错误', true];
- }
- else
- {
- Log::record($resp, Log::DEBUG);
- $resp = json_decode($resp, true);
- if (empty($resp)) {
- return [false, '网络错误', true];
- } elseif ($resp['state'] === 'ok') {
- return [true, $resp['data']['order_id'], false];
- } else {
- return [false, $resp['info'], false];
- }
- }
- }
- public function query($refill_info)
- {
- $access_token = config::token();
- if($access_token === false) {
- return [false, 'token获取失败'];
- }
- $params['access_token'] = $access_token;
- $params['customer_order_id'] = $refill_info['order_sn'];
- $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders);
- if (empty($resp)) {
- return [false, '网络错误'];
- }
- else
- {
- Log::record($resp, Log::DEBUG);
- $resp = json_decode($resp, true);
- if (empty($resp)) {
- return [false, '网络错误'];
- }
- elseif ($resp['state'] === 'ok')
- {
- $status = $resp['data']['order_status'];
- if ($status === 2) {
- $order_state = ORDER_STATE_SUCCESS;
- } elseif ($status === 3) {
- $order_state = ORDER_STATE_CANCEL;
- } elseif ($status === 0) {
- $order_state = ORDER_STATE_SEND;
- } else {
- return [false, $status];
- }
- return [true, $order_state];
- }
- else {
- return [false, $resp['info']];
- }
- }
- }
- public function callback()
- {
- return false;
- }
- }
|