<?php
namespace app\common\service;
/**
* 快递信息服务
*/
class Express
{
/**
* 查询快递状态
* @param string $express_num 快递订单号
* @param string $express_com 快递公司编码
* @param integer $type 接口类型,1 为快递100,2 为百度
* @return array | boolean
*/
public static function process($express_num,$express_com = null ,$type = 0)
{
$data = [];
$type = $type ?: \think\Config::get('express_api_type');
switch ($type){
case 2:
$data = self::processBaidu($express_num,$express_com);
break;
case 1:
$data = self::processKuaidi100($express_num,$express_com);
break;
default:
$data = self::processKuaidi100($express_num,$express_com);
break;
}
return self::formatData($data,$type,$express_num,$express_com);
}
/**
* 格式化数据,为统一数据返回
* @param unknown $data
* @param unknown $type
* @param unknown $num
* @param unknown $com
*/
public static function formatData($data,$type,$num,$com)
{
$return = [];
switch ($type){
case 2:
$return['message'] = $data['msg']?:'ok';
$return['status'] = $data['error_code'] ?: 200;
$return['ischeck'] = $data['data']['info']['state'] == 3 ? 1 : 0;
$return['state'] = $data['data']['info']['state'];
$return['updatetime'] = format_time($data['data']['info']['context'][0]['time']);
$return['nu'] = $return['num'] = $num;
$return['com'] = $com;
$return['data'] = [];
foreach ($data['data']['info']['context'] as $value){
$return['data'][] = [
'time' => $value['time'],
'context' => $value['desc'],
'ftime' => format_time($value['time']),
];
}
break;
case 1:
default:
$return = $data;
$return['num'] = $num;
foreach ($return['data'] as &$value){
$value['time'] = strtotime($value['time']);
}
break;
}
$return['state_text'] = self::getStateText($return['state']);
$return['com_info'] = self::getComInfo($com);
return $return;
}
/**
* 获取状态文字
* @param unknown $state
*/
public static function getStateText($state)
{
$text = [
0 => '在途中',
1 => '已揽件',
2 => '疑难',
3 => '已签收',
4 => '退签',
5 => '派件中',
6 => '退回',
];
return isset($text[$state]) ? $text[$state] : '未知';
}
/**
* 获取公司信息
* @param unknown $com
*/
public function getComInfo($com)
{
return [];
}
/**
* 查询快递状态,调用快递100接口
* @param string $express_num 快递订单号
* @param string $express_com 快递公司编码
* @return array | boolean
*/
public static function processKuaidi100($express_num,&$express_com = null)
{
if(!$express_num){
return false;
}
$header = [];
$cookies = [];
if(!$express_com){
$auto_url = 'https://www.kuaidi100.com/autonumber/autoComNum?text='.$express_num;
$express_com_data = json_decode(Tools::curl($auto_url,['text'=>$express_num],$cookies,$header),true);
if(isset($express_com_data['auto'][0]['comCode'])){
$express_com = $express_com_data['auto'][0]['comCode'];
}
}
$param = [
'type' => $express_com,
'postid' => $express_num,
'id' => 1,
'valicode' => Tools::getRandChar(4,3),
'temp' => '0.'.Tools::getRandChar(17,4),
];
$url ='https://www.kuaidi100.com/query?'.http_build_query($param);
$rs = Tools::curl($url,false,$cookies,$header);
return $rs ? json_decode($rs,true) : false;
}
/**
* 查询快递状态,调用百度快递查询接口
* @param string $express_num 快递订单号
* @param string $express_com 快递公司编码
* @return array | boolean
*/
public static function processBaidu($express_num,&$express_com = null)
{
if(!$express_num){
return false;
}
$cookies = 'BAIDUID=FC90082031B5BF81C4BD5D84DF23FB96:FG=1;';
$ip = Tools::getRandIp();
$header = [
'X-FORWARDED-FOR:'.$ip,
'CLIENT-IP:'.$ip,
];
if(!$express_com){
$auto_url = 'https://www.kuaidi100.com/autonumber/autoComNum?text='.$express_num;
$express_com_data = json_decode(Tools::curl($auto_url,['text'=>$express_num],$cookies,$header),true);
if(isset($express_com_data['auto'][0]['comCode'])){
$express_com = $express_com_data['auto'][0]['comCode'];
}
}
$param = [
'appid' => '4001',
'com' => $express_com,
'nu' => $express_num,
'vcode' => '',
'_' => Tools::getTimestamp(13),
];
$url = 'https://sp0.baidu.com/9_Q4sjW91Qh3otqbppnN2DJv/pae/channel/data/asyncqury?'.http_build_query($param);
$rs = Tools::curl($url,false,$cookies,$header);
return $rs ? json_decode($rs,true) : false;
}
}
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。