public function request_log($method, $params, $rpc_id) { $class = isset(self::$_res_service[$method]) ? self::$_res_service[$method] : ''; $api_mdl = app::get('apiactionlog')->model('apilog'); if ($class) { $obj = kernel::single($class); $title = $obj->get_title(); $time = time(); $original_bn = $params['tid']; if (is_null($rpc_id)) { $microtime = utils::microtime(); $rpc_id = str_replace('.', '', strval($microtime)); $randval = uniqid('', true); $rpc_id .= strval($randval); $rpc_id = md5($rpc_id); $data = array('apilog' => $rpc_id, 'calltime' => $time, 'params' => $params, 'api_type' => 'request', 'msg_id' => '', 'worker' => $method, 'original_bn' => $original_bn, 'task_name' => $title, 'log_type' => 'order', 'createtime' => $time, 'last_modified' => $time, 'retry' => $retry ? $retry : 0); } else { $arr_pk = explode('-', $rpc_id); $rpc_id = $arr_pk[0]; $tmp = $api_mdl->getList('*', array('apilog' => $rpc_id)); if ($tmp && $tmp[0]['status'] != 'sending') { $retry = $tmp[0]['retry'] + 1; } $data = array('apilog_id' => $tmp[0]['apilog_id'], 'apilog' => $rpc_id, 'calltime' => $time, 'api_type' => 'request', 'worker' => $method, 'original_bn' => $original_bn, 'task_name' => $title, 'log_type' => 'order', 'createtime' => $time, 'last_modified' => $time); } $result = $api_mdl->save($data); $rpc_id = $rpc_id . "-" . $time; return $rpc_id; } }
private function begin_transaction($method, $params, $rpc_id = null) { $obj_rpc_poll = app::get('base')->model('rpcpoll'); if (is_null($rpc_id)) { $time = time(); $microtime = utils::microtime(); $rpc_id = str_replace('.', '', strval($microtime)); //mt_srand($microtime); //$randval = mt_rand(); $randval = uniqid('', true); $rpc_id .= strval($randval); $rpc_id = md5($rpc_id); //$rpc_id = rand(0,$microtime); $data = array('id' => $rpc_id, 'network' => $this->network_id, 'calltime' => $time, 'method' => $method, 'params' => $params, 'type' => 'request', 'callback' => $this->callback_class . ':' . $this->callback_method, 'callback_params' => $this->callback_params); $rpc_id = $rpc_id . '-' . $time; $obj_rpc_poll->insert($data); } else { $arr_pk = explode('-', $rpc_id); $rpc_id = $arr_pk[0]; $rpc_calltime = $arr_pk[1]; $tmp = $obj_rpc_poll->getList('*', array('id' => $rpc_id, 'calltime' => $rpc_calltime)); if ($tmp) { $data = array('fail_times' => $tmp[0]['fail_times'] + 1); $fiter = array('id' => $rpc_id, 'calltime' => $rpc_calltime); $obj_rpc_poll->update($data, $fiter); } $rpc_id = $rpc_id . '-' . $rpc_calltime; } return $rpc_id; }
function gen_id() { $sign = '9' . date("Ymd"); /*$sqlString = 'SELECT MAX(reship_id) AS maxno FROM sdb_b2c_reship WHERE reship_id LIKE \''.$sign.'%\''; $aRet = $this->db->selectrow($sqlString); if(is_null($aRet['maxno'])) $aRet['maxno'] = 0; $maxno = substr($aRet['maxno'], -6) + 1; if ($maxno==1000000){ $maxno = 1; } return $sign.substr("00000".$maxno, -6); $microtime = utils::microtime(); mt_srand($microtime); $randval = mt_rand();*/ while (true) { $microtime = utils::microtime(); mt_srand($microtime); $randval = substr(mt_rand(), 0, -3) . rand(100, 999); $aRet = $this->db->selectrow("SELECT COUNT(*) as c FROM sdb_b2c_reship WHERE reship_id='" . ($sign . $randval) . "'"); if (!$aRet['c']) { break; } } return $sign . $randval; }
/** * 得到唯一的编号. * * @params null * * @return string 售后序号 */ public function apply_id() { $tb = $this->table_name(1); do { $microtime = utils::microtime(); mt_srand($microtime); $i = substr(mt_rand(), -3); $request_id = '7' . date('ymdHis') . $i; $row = $this->db->selectrow('SELECT request_id from ' . $tb . ' where request_id =' . $request_id); } while ($row); return $request_id; }
/** * * @params null * @return string 订单编号 */ public function apply_id() { $tb = $this->table_name(1); do { $microtime = utils::microtime(); mt_srand($microtime); $i = substr(mt_rand(), -5); $new_order_id = date('y') + date('m') + date('d') . date('His') . $i; $row = $this->db->selectrow('SELECT order_id from ' . $tb . ' where order_id =' . $new_order_id); } while ($row); return $new_order_id; }
function apply_id($delivery_sdf) { $sign = $delivery_sdf['delivery_type'] == 'send' ? '1' : '2'; $tb = $this->table_name(1); do { $microtime = utils::microtime(); mt_srand($microtime); $i = substr(mt_rand(), -3); $delivery_id = $sign . date('ymdHi') . $i; $row = $this->db->selectrow('SELECT delivery_id from ' . $tb . ' where delivery_id =' . $delivery_id); } while ($row); return $delivery_id; }
public function apply_id($type = 'comment') { $sign = $type == 'comment' ? '8' : '9'; $tb = $this->table_name(1); do { $microtime = utils::microtime(); mt_srand($microtime); $i = substr(mt_rand(), -3); $comment_id = $sign . (date('y') + date('m') + date('d')) . date('His') . $i; $row = $this->db->selectrow('SELECT bill_id from ' . $tb . ' where bill_id =' . $bill_id); } while ($row); return $comment_id; }
private function _getDeliveryId($tid) { $sign = '1' . date("Ymd"); while (true) { $microtime = utils::microtime(); mt_srand($microtime); $randval = substr(mt_rand(), 0, -3) . rand(100, 999); $db = app::get('sysitem')->database(); $aRet = $db->executeQuery('select count(*) as c from syslogistics_delivery where tid="' . $tid . '" and delivery_id="' . $sign . $randval . '"')->fetchAll(); if (!$aRet['c']) { break; } } return $sign . $randval; }
public function apply_id($bill_sdf) { if (is_null($bill_sdf) || empty($bill_sdf['bill_type']) || empty($bill_sdf['pay_object'])) { trigger_error("单号申请失败", E_USER_ERROR); exit; } $t_map = array('payment' => '1', 'refund' => '2'); $o_map = array('order' => '0', 'recharge' => '1'); $key = $t_map[$bill_sdf['bill_type']] . $o_map[$bill_sdf['pay_object']]; $tb = $this->table_name(1); do { $microtime = utils::microtime(); mt_srand($microtime); $i = substr(mt_rand(), -3); $bill_id = $key . (date('y') + date('m') + date('d')) . date('His') . $i; $row = $this->db->selectrow('SELECT bill_id from ' . $tb . ' where bill_id =' . $bill_id); } while ($row); return $bill_id; }
public function call($method, $params, $rpc_id = null, $gzip = false) { $api_log = kernel::single('apiactionlog_router_logging'); $rpc_id = $api_log->request_log($method, $params, $rpc_id); if (!$rpc_id) { $microtime = utils::microtime(); $rpc_id = str_replace('.', '', strval($microtime)); $randval = uniqid('', true); $rpc_id .= strval($randval); $rpc_id = md5($rpc_id); } $headers = array('Connection' => 'Close'); if ($gzip) { $headers['Content-Encoding'] = 'gzip'; } $query_params = array('app_id' => 'ecos.' . $this->app->app_id, 'method' => $method, 'date' => date('Y-m-d H:i:s'), 'callback_url' => kernel::openapi_url('openapi.rpc_callback', 'async_result_handler', array('id' => $rpc_id, 'app_id' => $this->app->app_id)), 'format' => 'json', 'certi_id' => base_certificate::certi_id(), 'v' => $this->api_version($method), 'from_node_id' => base_shopnode::node_id($this->app->app_id)); $query_params = array_merge((array) $params, $query_params); // rpc_id 分id 和 calltime $arr_rpc_key = explode('-', $rpc_id); $rpc_id = $arr_rpc_key[0]; $rpc_calltime = $arr_rpc_key[1]; $query_params['task'] = $rpc_id; if (!base_shopnode::token($this->app->app_id)) { $query_params['sign'] = base_certificate::gen_sign($query_params); } else { $query_params['sign'] = base_shopnode::gen_sign($query_params, $this->app->app_id); } $url = $this->get_url($this->network_id); //私有矩阵apiurl if ("private" == app::get('system')->getConf('system.matrix.set')) { unset($query_params['sign']); $query_params['v'] = 'v2_0'; if ($this->network_id == 2) { $query_params['callback_url'] = ""; } $query_params['sign'] = kernel::single('system_shopmatrix')->get_sign($query_params, base_shopnode::node_id($this->app->app_id)); $url = kernel::single('system_shopmatrix')->get_api_url(base_shopnode::node_id($this->app->app_id)); } $core_http = kernel::single('base_httpclient'); $response = $core_http->set_timeout($this->timeout)->post($url, $query_params, $headers); logger::info('Response: ' . $response); if ($response === HTTP_TIME_OUT) { $headers = $core_http->responseHeader; logger::info('Request timeout, process-id is ' . $headers['process-id']); $api_log->update(array('msg_id' => $headers['process-id'], 'status' => 'fail', 'msg' => '请求超时'), $rpc_id, $rpc_calltime); $this->status = RPC_RST_RUNNING; return false; } else { $result = json_decode($response); if ($result) { $this->error = $response->error; switch ($result->rsp) { case 'running': $this->status = RPC_RST_RUNNING; $api_log->update(array('msg_id' => $result->msg_id, 'status' => 'running'), $rpc_id, $rpc_calltime); // 存入中心给的process-id也就是msg-id return true; case 'succ': $result = json_decode($response, true); $api_log->update(array('msg_id' => $result['msg_id'], 'status' => 'success', 'calltime' => time()), $rpc_id, $rpc_calltime); $this->status = RPC_RST_FINISH; $this->rpc_response = $response; return $result['data']; case 'fail': $this->error = 'Bad response'; $this->status = RPC_RST_ERROR; $api_log->update(array('msg_id' => $result->msg_id, 'status' => 'fail', 'msg' => $result->res), $rpc_id, $rpc_calltime); $this->rpc_response = $response; return false; } } else { //error 解码失败 } } }