test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
10 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class Logistics {
/**
* Comment: 通过物流id获取物流信息
* Author: zzw
* Date: 2019/10/8 14:31
* @param $id int 物流信息id(express表的id)
* @return mixed
*/
public static function orderLogisticsInfo($id){
#1、获取设置信息
$set = Setting::wlsetting_read('api')['logistics'];
if(!$set) Commons::sRenderError('平台暂未开启物流查询');
#1、根据物流类型调用物流信息查询方法
switch ($set['type']){
case 1;
$res = self::logisticsSelectFunction_1($set,$id);
if($res['EBusinessID'] == 1630990){
//报错 使用付费版本再次获取
$res = self::logisticsSelectFunction_1($set,$id,8001);
}
break;//快递鸟
case 2;break;//菜鸟裹裹
case 3;break;//快递100
default:Commons::sRenderError('平台暂未开启物流查询');break;
}
return $res;
}
/**
* Comment: 物流信息查询方法一(快递鸟)
* Author: zzw
* Date: 2019/10/8 16:15
* @param $set array 设置信息
* @param $id int 物流id
* @param int $requestType 1002=免费版本;8001=付费版本
* @return mixed
*/
protected static function logisticsSelectFunction_1($set,$id,$requestType = 1002){
#1、获取设置信息
$userId = trim($set['id']);//电商ID
$AppKey = trim($set['app_key']);//电商加密私钥
$ReqURL = 'http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx';//请求url
#2、获取物流信息
$info = pdo_get(PDO_NAME."express",['id'=>$id],['expressname','expresssn','tel']) OR Commons::sRenderError('暂无物流信息');
$logisticsInfo = self::codeComparisonTable($info['expressname'],'alias');
#3、生成请求内容
$requestDataParams = [
'OrderCode' => '' ,//订单编号
'ShipperCode' => trim($logisticsInfo['code']) ,//快递公司编码
'LogisticCode' => trim($info['expresssn']) ,//物流单号
];
if(trim($logisticsInfo['code']) == 'SF') $requestDataParams['CustomerName'] = substr($info['tel'],-4);
if(trim($logisticsInfo['code']) == 'JD') $requestDataParams['CustomerName'] = trim($set['jd_code']);
$requestData = json_encode($requestDataParams);
$data = [
'EBusinessID' => $userId,
'RequestType' => $requestType,//1002=免费版本;8001=付费版本
'RequestData' => urlencode($requestData) ,
'DataType' => '2',
];
#4、生成请求签名
$data['DataSign'] = urlencode(base64_encode(md5($requestData.$AppKey)));
#4、生成请求header头部信息
$temps = array();
foreach ($data as $key => $value) {
$temps[] = sprintf('%s=%s', $key, $value);
}
$post_data = implode('&', $temps);
$url_info = parse_url($ReqURL);
if(empty($url_info['port'])) {
$url_info['port']=80;
}
$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
$httpheader.= "Host:" . $url_info['host'] . "\r\n";
$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
$httpheader.= "Connection:close\r\n\r\n";
$httpheader.= $post_data;
#4、请求获取物流信息
return curlPostRequest($ReqURL,$data,$httpheader);
}
/**
* Comment: 通过类型匹配物流公司信息
* Author: zzw
* Date: 2019/10/8 16:56
* @param $name string 物流公司配置名称(name=匹配名称,alias=匹配别名,code=匹配编码)
* @param $type int 匹配类型
* @param $getArray bool 是否返回所有物流公司信息数组
* @return array
*/
public static function codeComparisonTable($name = '',$type = 0,$getArray = false){
#1、生成匹配项数组
$data = [
[ 'name' => '顺丰' , 'alias' => 'shunfeng' , 'code' => 'SF' ] ,
[ 'name' => '百世快递' , 'alias' => 'baishikuaidi' , 'code' => 'HTKY' ] ,
[ 'name' => '中通快递' , 'alias' => 'zhongtong' , 'code' => 'ZTO' ] ,
[ 'name' => '申通快递' , 'alias' => 'shentong' , 'code' => 'STO' ] ,
[ 'name' => '圆通速递' , 'alias' => 'yuantong' , 'code' => 'YTO' ] ,
[ 'name' => '韵达速递' , 'alias' => 'yundasd' , 'code' => 'YD' ] ,
[ 'name' => '邮政快递包裹' , 'alias' => 'youzhengguonei' , 'code' => 'YZPY' ] ,
[ 'name' => 'EMS' , 'alias' => 'ems' , 'code' => 'EMS' ] ,
[ 'name' => '天天快递' , 'alias' => 'tiantian' , 'code' => 'HHTT' ] ,
[ 'name' => '京东快递' , 'alias' => 'jd' , 'code' => 'JD' ] ,
[ 'name' => '优速快递' , 'alias' => 'youshuwuliu' , 'code' => 'UC' ] ,
[ 'name' => '德邦快递' , 'alias' => 'debangwuliu' , 'code' => 'DBL' ] ,
[ 'name' => '极兔快递' , 'alias' => 'JTSD' , 'code' => 'JTSD' ] ,
[ 'name' => '宅急送' , 'alias' => 'zhaijisong' , 'code' => 'ZJS' ] ,
[ 'name' => 'aae全球专递' , 'alias' => 'aae' , 'code' => 'AAE' ] ,
[ 'name' => '安捷快递' , 'alias' => 'anjie' , 'code' => 'AJ' ] ,
[ 'name' => 'bht' , 'alias' => 'bht' , 'code' => 'BHT' ] ,
[ 'name' => '百福东方国际物流' , 'alias' => 'baifudongfang' , 'code' => 'BFDF' ] ,
[ 'name' => '中国东方(COE)' , 'alias' => 'coe' , 'code' => 'COE' ] ,
[ 'name' => '中国东方(COE)' , 'alias' => 'coe' , 'code' => 'COE' ] ,
[ 'name' => '大田物流' , 'alias' => 'datianwuliu' , 'code' => 'DTWL' ] ,
[ 'name' => 'dhl' , 'alias' => 'dhl' , 'code' => 'DHL' ] ,
[ 'name' => 'dpex' , 'alias' => 'dpex' , 'code' => 'DPEX' ] ,
[ 'name' => 'd速快递' , 'alias' => 'dsukuaidi' , 'code' => 'DSWL' ] ,
[ 'name' => '递四方' , 'alias' => 'disifang' , 'code' => 'D4PX' ] ,
[ 'name' => 'fedex(国外)' , 'alias' => 'fedex' , 'code' => 'FEDEX_GJ' ] ,
[ 'name' => 'fedex(国外)' , 'alias' => 'fedex' , 'code' => 'FEDEX_GJ' ] ,
[ 'name' => '飞康达物流' , 'alias' => 'feikangda' , 'code' => 'FKD' ] ,
[ 'name' => '广东邮政物流' , 'alias' => 'guangdongyouzhengwuliu' , 'code' => 'GDEMS' ] ,
[ 'name' => '共速达' , 'alias' => 'gongsuda' , 'code' => 'GSD' ] ,
[ 'name' => '恒路物流' , 'alias' => 'hengluwuliu' , 'code' => 'HLWL' ] ,
[ 'name' => '华夏龙物流' , 'alias' => 'huaxialongwuliu' , 'code' => 'HXLWL' ] ,
[ 'name' => '佳怡物流' , 'alias' => 'jiayiwuliu' , 'code' => 'JYWL' ] ,
[ 'name' => '京广速递' , 'alias' => 'jinguangsudikuaijian' , 'code' => 'JGSD' ] ,
[ 'name' => '急先达' , 'alias' => 'jixianda' , 'code' => 'JXD' ] ,
[ 'name' => '佳吉物流' , 'alias' => 'jjwl' , 'code' => 'CNEX' ] ,
[ 'name' => '加运美物流' , 'alias' => 'jymwl' , 'code' => 'JYM' ] ,
[ 'name' => '晋越快递' , 'alias' => 'jykd' , 'code' => 'JYKD' ] ,
[ 'name' => '快捷速递' , 'alias' => 'kuaijiesudi' , 'code' => 'DJKJWL' ] ,
[ 'name' => '联邦快递(国内)' , 'alias' => 'lianb' , 'code' => 'FEDEX' ] ,
[ 'name' => '联邦快递(国内)' , 'alias' => 'lianb' , 'code' => 'FEDEX' ] ,
[ 'name' => '联昊通物流' , 'alias' => 'lianhaowuliu' , 'code' => 'LHT' ] ,
[ 'name' => '龙邦物流' , 'alias' => 'longbanwuliu' , 'code' => 'LB' ] ,
[ 'name' => '立即送' , 'alias' => 'lijisong' , 'code' => 'LJSKD' ] ,
[ 'name' => '民航快递' , 'alias' => 'minghangkuaidi' , 'code' => 'MHKD' ] ,
[ 'name' => '门对门' , 'alias' => 'menduimen' , 'code' => 'MDM' ] ,
[ 'name' => 'OCS' , 'alias' => 'ocs' , 'code' => 'OCS' ] ,
[ 'name' => '全晨快递' , 'alias' => 'quanchenkuaidi' , 'code' => 'QCKD' ] ,
[ 'name' => '全日通快递' , 'alias' => 'quanritongkuaidi' , 'code' => 'QRT' ] ,
[ 'name' => '全一快递' , 'alias' => 'quanyikuaidi' , 'code' => 'UAPEX' ] ,
[ 'name' => '如风达' , 'alias' => 'rufengda' , 'code' => 'RFD' ] ,
[ 'name' => '速尔物流' , 'alias' => 'sue' , 'code' => 'SURE' ] ,
[ 'name' => '盛丰物流' , 'alias' => 'shengfeng' , 'code' => 'SFWL' ] ,
[ 'name' => '赛澳递' , 'alias' => 'saiaodi' , 'code' => 'SAD' ] ,
[ 'name' => '天地华宇' , 'alias' => 'tiandihuayu' , 'code' => 'HOAU' ] ,
[ 'name' => 'tnt' , 'alias' => 'tnt' , 'code' => 'TNT' ] ,
[ 'name' => 'ups' , 'alias' => 'ups' , 'code' => 'UPS' ] ,
[ 'name' => '万家物流' , 'alias' => 'wanjiawuliu' , 'code' => 'WJWL' ] ,
[ 'name' => '万象物流' , 'alias' => 'wxwl' , 'code' => 'WXWL' ] ,
[ 'name' => '信丰物流' , 'alias' => 'xinfengwuliu' , 'code' => 'XFEX' ] ,
[ 'name' => '亚风速递' , 'alias' => 'yafengsudi' , 'code' => 'YFSD' ] ,
[ 'name' => '邮政国际包裹挂号信' , 'alias' => 'youzhengguoji' , 'code' => 'GJYZ' ] ,
[ 'name' => '远成物流' , 'alias' => 'yuanchengwuliu' , 'code' => 'YCWL' ] ,
[ 'name' => '运通快递' , 'alias' => 'yuntongkuaidi' , 'code' => 'YTKD' ] ,
[ 'name' => '源安达' , 'alias' => 'yad' , 'code' => 'YADEX' ] ,
[ 'name' => '中铁快运' , 'alias' => 'zhongtiekuaiyun' , 'code' => 'ZTWL' ] ,
[ 'name' => '中邮物流' , 'alias' => 'zhongyouwuliu' , 'code' => 'ZYKD' ] ,
[ 'name' => '芝麻开门' , 'alias' => 'zhimakaimen' , 'code' => 'ZMKM' ] ,
[ 'name' => '韵达快运' , 'alias' => 'yunda' , 'code' => 'YDKY' ] ,
[ 'name' => '其他快递' , 'alias' => '' , 'code' => '' ] ,
];
if($getArray) return $data;//返回所有物流公司信息数组
#2、根据匹配类型进行数组转码,将对应类型的键值转为键名
$key = array_column($data,trim($type));
$newData = array_combine($key,$data);
#2、返回匹配内容
return $newData[$name];
}
}