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; } }