req_params($card_no, $amount, $card_type, $order_sn, $ch_price); $sign = $this->sign($params); $params['sign'] = $sign; $resp = http_request(config::ORDER_URL, $params, 'POST', false, config::ExtHeaders, $net_errno); if (empty($resp)) { return [false, '网络错误', true]; } else { Log::record($resp, Log::DEBUG); $resp = $this->decode_tag($resp); $ret_code = $resp['ret_code']; if (empty($resp)) { return [false, '网络错误', true]; } elseif ($ret_code === '0') { $bill_status = $resp['bill_status']; if ($bill_status === '成功' || $bill_status === '失败') { QueueClient::async_push("QueryRefillState",['order_id' => $order_id],5); } return [true, $resp['jnet_bill_no'], false]; } elseif (in_array($ret_code, ['-1', '997', '998'], true)) { QueueClient::async_push("QueryRefillState", ['order_id' => $order_id], 5); return [true, $resp['jnet_bill_no'], false]; } elseif (in_array($ret_code, config::ERR_NOS, true)) { return [false, $resp['ret_msg'], false]; } elseif (in_array($ret_code, ['5', '100', '999'], true)) { $net_errno = "HTTP-{$ret_code}"; return [false, $resp['ret_msg'], true]; } else { $err = 998; $net_errno = "HTTP-{$err}"; return [false, $resp['ret_msg'], true]; } } } public function query($refill_info) { $params['agent_id'] = config::AGENT_ID; $params['bill_id'] = $refill_info['order_sn']; $params['time_stamp'] = date("YmdHis"); $key = config::KEY; $content = "agent_id={$params['agent_id']}&bill_id={$params['bill_id']}&time_stamp={$params['time_stamp']}|||{$key}"; $params['sign'] = md5($content); $resp = http_request(config::QUERY_URL, $params, 'POST', false, config::ExtHeaders); if (empty($resp)) { return [false, '网络错误']; } else { $resp = $this->decode_tag($resp); if (empty($resp)) { return [false, '网络错误']; } elseif ($resp['ret_code'] === '0') { $status = $resp['bill_status']; if ($status === '成功') { $official_sn = $resp['operator_bill_no']; $updata['official_sn'] = $official_sn; Model('refill_order')->edit($refill_info['order_id'], $updata); $order_state = ORDER_STATE_SUCCESS; } elseif ($status === '失败') { $order_state = ORDER_STATE_CANCEL; } elseif ($status === '处理中') { $order_state = ORDER_STATE_SEND; } else { return [false, $resp['ret_msg']]; } return [true, $order_state]; } elseif ($resp['ret_code'] === '-1') { if ($resp['bill_status'] === '失败' || $resp['ret_msg'] === '接口单失败') { return [true, ORDER_STATE_CANCEL]; }else{ return [false, $resp['ret_msg']]; } } elseif ($resp['ret_code'] === '8' && (time() - $refill_info['commit_time'] >= 600)) { return [true, ORDER_STATE_NOEXIST]; } else { return [false, $resp['ret_msg']]; } } } public function balance() { $params['agent_id'] = config::AGENT_ID; $params['time_stamp'] = date("YmdHis"); $key = config::KEY; $content = "agent_id={$params['agent_id']}&time_stamp={$params['time_stamp']}|||{$key}"; $params['sign'] = md5($content); $resp = http_request(config::BALANCE_URL, $params, 'POST', false, config::ExtHeaders); if (empty($resp)) { return [false, '网络错误']; } else { Log::record($resp, Log::DEBUG); $resp = $this->decode_tag($resp); if (empty($resp)) { return [false, '网络错误']; } elseif ($resp['ret_code'] === '0') { return [true, $resp['can_used_amt']]; } else { return [false, $resp['ret_msg']]; } } } private function sign($params) { $key = config::KEY; $content = "agent_id={$params['agent_id']}&bill_id={$params['bill_id']}&bill_time={$params['bill_time']}&supply_type={$params['supply_type']}&supply_id={$params['supply_id']}"; $content .= "&product_code={$params['product_code']}&product_num={$params['product_num']}®ion_id={$params['region_id']}&server_id={$params['server_id']}"; $content .= "&charge_account={$params['charge_account']}&time_stamp={$params['time_stamp']}|||{$key}"; return md5($content); } public function decode_tag($squery) { if(empty($squery)) return false; $squery = urldecode($squery); $squery = mb_convert_encoding($squery, "UTF-8", "GB2312"); $result = []; $params = preg_split('/&/', $squery); foreach ($params as $pair) { if(empty($pair)) continue; $kv = explode('=', $pair); $count = count($kv); if($count === 1) { $key = $kv[0]; $val = ""; } elseif($count === 2) { $key = $kv[0]; $val = urldecode($kv[1]); } else { continue; } if(!empty($key)) { $result[$key] = trim($val); } } return $result; } }