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