load->_model('Model_logic_order','logic_order');
$this->load->_model('Model_logic_tools','logic_tools');
$this->load->_model('Model_awlgx','awlgx');
$this->load->_model("Model_express","express");
$this->load->_model("Model_logic_ding","logic_ding");
}
private $key = "6amg!pnfrlbpnjgirv"; //加密所需要到的key
private $iv = "6ook4k!2w94m6jtm";//加密所需要到的iv
//定义方法的调用规则 获取URI第二段值
public function _remap($arg,$arg_array)
{
if($arg == 'search')
{
$this->search();
}else if($arg == 'logistics'){
$this->_logistics();
}
else{
$this->_a();
}
}
public function _a(){
die();
}
/**
* 搜索订单状态和快递信息接口
* @param $arg_array[0] string 请求店铺
* @param $arg_array[1] string 请求单号
*/
public function searchcsss(){
$data = file_get_contents('PHP://input');
$data = json_decode($data, true);
$shop = isset($data['shop'])?$data['shop']:"";
$order_no = isset($data['order_no'])?$data['order_no']:"";
$apply_time = isset($data['time'])?$data['time']:0;
$jiami_str = isset($data['key'])?$data['key']:"";
$now_time = time();
if(strlen( $apply_time."") != 10){
die($this->logic_tools->ret_json(-1,"参数异常"));
}
if(empty($shop)){
die($this->logic_tools->ret_json(-1,"请求店铺异常"));
}
$shop_key = $this->logic_tools->getshopname($shop);
if(empty($jiami_str)){
die($this->logic_tools->ret_json(-1,"秘钥信息不存在"));
}
$jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
if(empty($shop_key)){
die($this->logic_tools->ret_json(-1,"该店铺的秘钥不存在"));
}
$jiemi_arr = explode("+",$jiemi_str);
$jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
$jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
if((int)$jiemi_time != (int)$apply_time){
die($this->logic_tools->ret_json(-1,"请求超时"));
}
if( $now_time - $apply_time > 100){
die($this->logic_tools->ret_json(-1,"请求已超时"));
}
if($jiemi_key != $shop_key){
die($this->logic_tools->ret_json(-1,"该店铺的秘钥不正确"));
}
if(empty($order_no)){
die($this->logic_tools->ret_json(-1,"请求单号异常"));
}
$table_name = $this->logic_tools->getOrderTable($shop);
if(empty($table_name)){
die($this->logic_tools->ret_json(-1,"店铺未开通此功能!!!"));
}
$info = $this->logic_order->getInfoByTableName($table_name,"orderinfo = '".$shop.$order_no. "' and shop = ".$shop,"id,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime");
if(empty($info)){
die($this->logic_tools->ret_json(-1,"未查询到相关快递信息"));
}
$receive_time = "";//客户签到时间
$shipping_time = "";//快递接受发货时间
$express_trace = [];
$express_info = $this->express->read($info['express']);
if(!empty($info['excontent'])){
$tmp_arr = explode("
",$info['excontent']);
if(!empty($tmp_arr)){
$tc_tmp_str = array_pop($tmp_arr);
if(empty($tmp_arr)){
$express_trace = [
$tc_tmp_str,
];
}else{
$re_arr = array_reverse($tmp_arr);
if(!isset($re_arr[0])){
$this->logic_ding->sendToDing("Apiexpress接口95行异常".json_encode($info,JSON_UNESCAPED_UNICODE));
}
if(strpos($re_arr[0],"[") !== false){
$shipping_time_arr = explode("[",$re_arr[0] ) ;
$shipping_time = $shipping_time_arr[0];
if($info['expressstate'] == 6){
$receive_tmp_arr = explode("[",$tmp_arr[0] ) ;
$receive_time = $receive_tmp_arr[0];
}
}else{
$shipping_time = date("Y-m-d H:i:s",$info['dlzemailtime']);
if($info['expressstate'] == 6){
$receive_time = -1;
}
}
$express_trace = $re_arr;
}
ob_clean();
}else{
die($this->logic_tools->ret_json(-1,"物流信息存储异常"));
}
}else{
die($this->logic_tools->ret_json(-1,"运单时间太久,暂无法查询"));
}
if(empty($info['dtime'])){
$preparing = [
"desc"=>"",
"status"=>0,
"date"=>"",
];
}else{
$preparing = [
"desc"=>"The Order Has Been Created And TheMerchant lspreparing Your Order.",
"status"=>1,
"date"=>date("Y-m-d H:i:s",$info['dtime']),
];
}
if(empty($info['printtime'])){
$warehouse_processing = [
"desc"=>"",
"status"=>0,
"date"=>"",
];
}else{
$warehouse_processing = [
"desc"=>"Packing And Final Check",
"status"=>1,
"date"=>date("Y-m-d H:i:s",$info['printtime']),
];
}
if(empty($shipping_time)){
$shipping = [
"desc"=>"",
"status"=>0,
"date"=>"",
];
}else{
$shipping = [
"desc"=>"Courier Company Picked Up The Package",
"status"=>1,
"date"=>$shipping_time,
];
}
if(empty($receive_time)){
$received = [
"desc"=>"",
"status"=>0,
"date"=>"",
];
}else{
if($receive_time < 0){
$received = [
"desc"=>"Order signed for successfully",
"status"=>1,
"date"=>0,
];
}else{
$received = [
"desc"=>"Order signed for successfully",
"status"=>1,
"date"=>$receive_time,
];
}
}
$icon = 7;
$final_express_name = $express_name = strtolower($express_info['iscode']);
if(strpos($express_name,"usps") !== false){
$icon = 1;
$final_express_name = "usps";
}
if(strpos($express_name,"dhl") !== false){
$icon = 2;
$final_express_name = "dhl";
}
if(strpos($express_name,"ups") !== false){
$icon = 3;
$final_express_name = "ups";
}
if(strpos($express_name,"fedex") !== false){
$icon = 4;
$final_express_name = "fedex";
}
if(strpos($express_name,"aramex") !== false){
$icon = 5;
$final_express_name = "aramex";
}
if(strpos($express_name,"ges") !== false){
$icon = 6;
$final_express_name = "ges";
}
$ret_arr = [
"order_no"=>$order_no,
'icon'=>$icon,
"express_name"=>strtoupper($final_express_name) ,
"waybill"=>$info['waybill'],
"preparing"=>$preparing,//店家处理
"warehouse_processing"=>$warehouse_processing,//工厂处理
"shipping"=> $shipping,//快递发货
"received"=>$received,//客户收货
"express_trace"=>$express_trace,//快递跟踪信息
"address_info"=>[
"client"=>$info['client'],//客户姓名
"name"=>$info['name'],//收件人姓名
"country"=>$info['country'],//国家
"province"=>$info['province'],//省份
"city"=>$info['city'],//城市
"address"=>$info['address'],//地址
"address2"=>$info['address2'],//地址
"street"=>$info['street'],//街道
"phone"=>$info['phone'],//电话
"zipcode"=>$info['zipcode'],//邮编
]
];
die($this->logic_tools->ret_json(1,"success",$ret_arr));
}
/* 搜索订单状态和快递信息接口
* @param $arg_array[0] string 请求店铺
* @param $arg_array[1] string 请求单号
*/
public function search(){
$data = file_get_contents('PHP://input');
$data = json_decode($data, true);
$shop = isset($data['shop'])?$data['shop']:"";
$order_no = isset($data['order_no'])?$data['order_no']:"";
$type = isset($data['type'])?$data['type']:"";
$apply_time = isset($data['time'])?$data['time']:0;
$jiami_str = isset($data['key'])?$data['key']:"";
$now_time = time();
if(strlen( $apply_time."") != 10){
die($this->logic_tools->ret_json(-1,"参数异常"));
}
if(empty($shop)){
die($this->logic_tools->ret_json(-1,"请求店铺异常"));
}
$shop_key = $this->logic_tools->getshopname($shop);
if(empty($jiami_str)){
die($this->logic_tools->ret_json(-1,"秘钥信息不存在"));
}
$jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
if(empty($shop_key)){
die($this->logic_tools->ret_json(-1,"该店铺的秘钥不存在"));
}
$jiemi_arr = explode("+",$jiemi_str);
$jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
$jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
if((int)$jiemi_time != (int)$apply_time){
die($this->logic_tools->ret_json(-1,"请求超时"));
}
if( $now_time - $apply_time > 100){
die($this->logic_tools->ret_json(-1,"请求已超时"));
}
if($jiemi_key != $shop_key){
die($this->logic_tools->ret_json(-1,"该店铺的秘钥不正确"));
}
if(empty($order_no) ){
die($this->logic_tools->ret_json(-1,"请求查询的单号不能为空"));
}
$table_name = $this->logic_tools->getOrderTable($shop);
if(empty($table_name)){
die($this->logic_tools->ret_json(-1,"店铺未开通此功能!!!"));
}
// $type == 2 为运单号
if($type == 2){
$info = $this->logic_order->getInfoByTableName($table_name,"waybill = '".$order_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
//当检索不到运单号时,返回订单已经备货了
if(empty($info)){
die($this->logic_tools->ret_json(1,"success",[
"order_no"=>"",
'icon'=>"",
"express_name"=>"" ,
"waybill"=>$order_no,
"preparing"=>[
"desc"=>"The Order Has Been Created And TheMerchant ls preparing Your Order.",
"status"=>1,
"date"=>"",
"title"=>"preparing order",
],//店家处理
"warehouse_processing"=>[
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"shipped",
],//工厂处理
"shipping"=> [
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"in transit",
],//快递发货
"received"=>[
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"delivered",
],//客户收货
"express_trace"=>[],//快递跟踪信息
"address_info"=>[
"client"=>"",//客户姓名
"name"=>"",//收件人姓名
"country"=>"",//国家
"province"=>"",//省份
"city"=>"",//城市
"address"=>"",//地址
"address2"=>"",//地址
"street"=>"",//街道
"phone"=>"",//电话
"zipcode"=>"",//邮编
]
]));
}
}else{
$info = $this->logic_order->getInfoByTableName($table_name,"orderinfo = '".$shop.$order_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
if(empty($info)){
die($this->logic_tools->ret_json(-1,"未查询到相关快递信息"));
}
if(empty($info['waybill']) && ($info['printtime'])){
//如果没有运单号,则返回订单已经备货了
die($this->logic_tools->ret_json(1,"success",[
"order_no"=>$info['number'],
'icon'=>"",
"express_name"=>"" ,
"waybill"=>"",
"preparing"=>[
"desc"=>"The Order Has Been Created And TheMerchant ls preparing Your Order.",
"status"=>1,
"date"=>"",
"title"=>"preparing order",
],//店家处理
"warehouse_processing"=>[
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"shipped",
],//工厂处理
"shipping"=> [
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"in transit",
],//快递发货
"received"=>[
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"delivered",
],//客户收货
"express_trace"=>[],//快递跟踪信息
"address_info"=>[
"client"=>$info['client'],//客户姓名
"name"=>$info['name'],//收件人姓名
"country"=>$info['country'],//国家
"province"=>$info['province'],//省份
"city"=>$info['city'],//城市
"address"=>$info['address'],//地址
"address2"=>$info['address2'],//地址
"street"=>$info['street'],//街道
"phone"=>$info['phone'],//电话
"zipcode"=>$info['zipcode'],//邮编
]
]));
}
}
$receive_time = "";//客户签到时间
$shipping_time = "";//快递接受发货时间
$express_trace = [];
$express_info = $this->express->read($info['express']);
if(!empty($info['excontent'])){
$tmp_arr = explode("
",$info['excontent']);
if(!empty($tmp_arr)){
$tc_tmp_str = array_pop($tmp_arr);
if(empty($tmp_arr)){
$express_trace = [
$tc_tmp_str,
];
}else{
$re_arr = array_reverse($tmp_arr);
if(!isset($re_arr[0])){
$this->logic_ding->sendToDing("Apiexpress接口95行异常".json_encode($info,JSON_UNESCAPED_UNICODE));
}
if(strpos($re_arr[0],"[") !== false){
$shipping_time_arr = explode("[",$re_arr[0] ) ;
$shipping_time = $shipping_time_arr[0];
if($info['expressstate'] == 6){
$receive_tmp_arr = explode("[",$tmp_arr[0] ) ;
$receive_time = $receive_tmp_arr[0];
}
}else{
$shipping_time = date("Y-m-d H:i:s",$info['dlzemailtime']);
if($info['expressstate'] == 6){
$receive_time = -1;
}
}
$express_trace = $re_arr;
}
ob_clean();
}else{
die($this->logic_tools->ret_json(-1,"物流信息存储异常"));
}
}else{
//已出库 但是超过30天没有物流信息
if(($info['library'] > 1) && ( time() - $info['librarytime'] > 24 * 3600 * 30)){
die($this->logic_tools->ret_json(-1,"运单时间太久,暂无法查询"));
}
}
if(empty($info['librarytime'])){
$warehouse_processing = [
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"shipped",
];
}else{
$warehouse_processing = [
"desc"=>"Courier company picked up the package",
"status"=>1,
"date"=>date("Y-m-d H:i:s",$info['librarytime']),
"title"=>"shipped",
];
}
$shipping = [
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"in transit",
];
//在途 没有签收 并且 出库了
if(empty($receive_time) && $info['librarytime'] > 0){
$shipping = [
"desc"=>"",
"status"=>1,
"date"=>"",
"title"=>"in transit",
];
}
if(empty($receive_time)){
$received = [
"desc"=>"",
"status"=>0,
"date"=>"",
"title"=>"delivered",
];
}else{
if($receive_time < 0){
$received = [
"desc"=>"Order signed for successfully",
"status"=>1,
"date"=>0,
"title"=>"delivered",
];
}else{
$received = [
"desc"=>"Order signed for successfully",
"status"=>1,
"date"=>$receive_time,
"title"=>"delivered",
];
}
}
$icon = 7;
$final_express_name = $express_name = strtolower($express_info['iscode']);
if(strpos($express_name,"usps") !== false){
$icon = 1;
$final_express_name = "usps";
}
if(strpos($express_name,"dhl") !== false){
$icon = 2;
$final_express_name = "dhl";
}
if(strpos($express_name,"ups") !== false){
$icon = 3;
$final_express_name = "ups";
}
if(strpos($express_name,"fedex") !== false){
$icon = 4;
$final_express_name = "fedex";
}
if(strpos($express_name,"aramex") !== false){
$icon = 5;
$final_express_name = "aramex";
}
if(strpos($express_name,"ges") !== false){
$icon = 6;
$final_express_name = "ges";
}
$ret_arr = [
"order_no"=>$order_no,
'icon'=>$icon,
"express_name"=>strtoupper($final_express_name) ,
"waybill"=>$info['waybill'],
"preparing"=>[
"desc"=>"The Order Has Been Created And TheMerchant ls preparing Your Order.",
"status"=>1,
"date"=>"",
"title"=>"preparing order",
],//店家处理
"warehouse_processing"=>$warehouse_processing,//工厂处理
"shipping"=> $shipping,//快递发货
"received"=>$received,//客户收货
"express_trace"=>$express_trace,//快递跟踪信息
"address_info"=>[
"client"=>$info['client'],//客户姓名
"name"=>$info['name'],//收件人姓名
"country"=>$info['country'],//国家
"province"=>$info['province'],//省份
"city"=>$info['city'],//城市
"address"=>$info['address'],//地址
"address2"=>$info['address2'],//地址
"street"=>$info['street'],//街道
"phone"=>$info['phone'],//电话
"zipcode"=>$info['zipcode'],//邮编
]
];
die($this->logic_tools->ret_json(1,"success",$ret_arr));
}
/**
* 检索订单的物流信息 不含订单状态
*/
public function _logistics(){
$data = file_get_contents('PHP://input');
$data = json_decode($data, true);
$shop = isset($data['shop'])?$data['shop']:"";
$waybill_no = isset($data['order_no'])?$data['order_no']:"";
$apply_time = isset($data['time'])?$data['time']:0;
$jiami_str = isset($data['key'])?$data['key']:"";
$now_time = time();
if(strlen( $apply_time."") != 10){
echo json_encode(array('track'=>'','msg'=>'apply time format exception','success'=>0));exit;
}
if(empty($shop)){
echo json_encode(array('track'=>'','msg'=>'The shop cannot be empty','success'=>0));exit;
}
$shop_key = $this->logic_tools->getshopname($shop);
if(empty($jiami_str)){
echo json_encode(array('track'=>'','msg'=>'This store has not configured any parameters','success'=>0));exit;
}
$jiemi_str = $this->logic_tools->toolsjiemi($jiami_str,$this->key,$this->iv);
if(empty($shop_key)){
echo json_encode(array('track'=>'','msg'=>'This shop has not configured any parameters','success'=>0));exit;
}
$jiemi_arr = explode("+",$jiemi_str);
$jiemi_key = isset($jiemi_arr[0])?$jiemi_arr[0]:"";
$jiemi_time = isset($jiemi_arr[1])?$jiemi_arr[1]:"";
if((int)$jiemi_time != (int)$apply_time){
//Request exceeds the deadline
echo json_encode(array('track'=>'','msg'=>'Request exceeds the deadline','success'=>0));exit;
}
if( $now_time - $apply_time > 100){
echo json_encode(array('track'=>'','msg'=>'Request exceeds the deadline','success'=>0));exit;
}
if($jiemi_key != $shop_key){
echo json_encode(array('track'=>'','msg'=>'The key of this shop is incorrect','success'=>0));exit;
}
if(empty($waybill_no) ){
echo json_encode(array('track'=>'','msg'=>'The tracking number requested for query cannot be empty','success'=>0));exit;
}
$table_name = $this->logic_tools->getOrderTable($shop);
if(empty($table_name)){
echo json_encode(array('track'=>'','msg'=>'The shop has not activated this feature!!!','success'=>0));exit;
}
$info = $this->logic_order->getInfoByTableName($table_name,"waybill = '".$waybill_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
if(empty($info)){
$info = $this->logic_order->getInfoByTableName($table_name,"orderinfo = '".$shop.$waybill_no. "' and shop = ".$shop,"id,number,orderinfo,express,excontent,expressstate,waybill,dtime,printtime,client,name,country,province,city,address,address2,street,phone,zipcode,dlzemailtime,library,librarytime");
}
if(empty($info)){
echo json_encode(array('track'=>'','msg'=>'No logistics information','success'=>0));exit;
}
if(empty($info['excontent'])){
echo json_encode(array('track'=>'','msg'=>'No logistics information','success'=>0));exit;
}
if(strpos($info['excontent'],"[") !== false && strpos($info['excontent'],"]") !== false ){
}else{
echo json_encode(array('track'=>array('f'=>1,'data'=>$info['excontent']),'msg'=>'','success'=>1));exit;
}
$tmp_arr = explode("
",$info['excontent']);
if(!empty($tmp_arr)){
$final_arr = [];
foreach($tmp_arr as $k => $v){
$one_tmp_arr = explode("[",$v);
$two_tmp_arr = explode("]",$one_tmp_arr[1]);
$final_arr[] = $two_tmp_arr[1]." [".$two_tmp_arr[0]."] ".$one_tmp_arr;
}
$final_str = implode("
",$final_arr);
ob_clean();
}else{
echo json_encode(array('track'=>'','msg'=>'Abnormal express delivery information','success'=>0));exit;
}
echo json_encode(array('track'=>array('f'=>1,'data'=>$final_str),'msg'=>'','success'=>1));exit;
}
}