├── composer.json ├── LICENSE ├── README.md └── src └── Express.php /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dzer/yii2-express", 3 | "description": "快递单号查询,支持国内近100家快递单号查询。", 4 | "type": "yii2-extension", 5 | "keywords": ["yii2","extension","快递"], 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "dzer", 10 | "email": "d20053140@gmail.com", 11 | "homepage": "http://dzer.me" 12 | } 13 | ], 14 | "require": { 15 | "yiisoft/yii2": "*" 16 | }, 17 | "autoload": { 18 | "psr-4": { 19 | "dzer\\express\\": "src/" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 dzer 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 快递单号查询 2 | 3 | ## 安装 4 | 5 | 环境要求:yii2 6 | 7 | 1. 使用 [composer](https://getcomposer.org/) 8 | 9 | ```shell 10 | composer require dzer/yii2-express 11 | ``` 12 | 13 | ## 使用 14 | 15 | 基本使用: 16 | 17 | ```php 18 | '顺丰', 116 | 'yuantong' => '圆通速递', 117 | 'shentong' => '申通', 118 | 'yunda' => '韵达快运', 119 | 'ems' => 'ems快递', 120 | 'tiantian' => '天天快递', 121 | 'zhaijisong' => '宅急送', 122 | 'quanfengkuaidi' => '全峰快递', 123 | 'zhongtong' => '中通速递', 124 | 'rufengda' => '如风达', 125 | 'debangwuliu' => '德邦物流', 126 | 'huitongkuaidi' => '汇通快运', 127 | 'aae' => 'aae全球专递', 128 | 'anjie' => '安捷快递', 129 | 'anxindakuaixi' => '安信达快递', 130 | 'biaojikuaidi' => '彪记快递', 131 | 'bht' => 'bht', 132 | 'baifudongfang' => '百福东方国际物流', 133 | 'coe' => '中国东方(COE)', 134 | 'changyuwuliu' => '长宇物流', 135 | 'datianwuliu' => '大田物流', 136 | 'dhl' => 'dhl', 137 | 'dpex' => 'dpex', 138 | 'dsukuaidi' => 'd速快递', 139 | 'disifang' => '递四方', 140 | 'fedex' => 'fedex(国外)', 141 | 'feikangda' => '飞康达物流', 142 | 'fenghuangkuaidi' => '凤凰快递', 143 | 'feikuaida' => '飞快达', 144 | 'guotongkuaidi' => '国通快递', 145 | 'ganzhongnengda' => '港中能达物流', 146 | 'guangdongyouzhengwuliu' => '广东邮政物流', 147 | 'gongsuda' => '共速达', 148 | 'hengluwuliu' => '恒路物流', 149 | 'huaxialongwuliu' => '华夏龙物流', 150 | 'haihongwangsong' => '海红', 151 | 'haiwaihuanqiu' => '海外环球', 152 | 'jiayiwuliu' => '佳怡物流', 153 | 'jinguangsudikuaijian' => '京广速递', 154 | 'jixianda' => '急先达', 155 | 'jjwl' => '佳吉物流', 156 | 'jymwl' => '加运美物流', 157 | 'jindawuliu' => '金大物流', 158 | 'jialidatong' => '嘉里大通', 159 | 'jykd' => '晋越快递', 160 | 'kuaijiesudi' => '快捷速递', 161 | 'lianb' => '联邦快递(国内)', 162 | 'lianhaowuliu' => '联昊通物流', 163 | 'longbanwuliu' => '龙邦物流', 164 | 'lijisong' => '立即送', 165 | 'lejiedi' => '乐捷递', 166 | 'minghangkuaidi' => '民航快递', 167 | 'meiguokuaidi' => '美国快递', 168 | 'menduimen' => '门对门', 169 | 'ocs' => 'OCS', 170 | 'peisihuoyunkuaidi' => '配思货运', 171 | 'quanchenkuaidi' => '全晨快递', 172 | 'quanjitong' => '全际通物流', 173 | 'quanritongkuaidi' => '全日通快递', 174 | 'quanyikuaidi' => '全一快递', 175 | 'santaisudi' => '三态速递', 176 | 'shenghuiwuliu' => '盛辉物流', 177 | 'sue' => '速尔物流', 178 | 'shengfeng' => '盛丰物流', 179 | 'saiaodi' => '赛澳递', 180 | 'tiandihuayu' => '天地华宇', 181 | 'tnt' => 'tnt', 182 | 'ups' => 'ups', 183 | 'wanjiawuliu' => '万家物流', 184 | 'wenjiesudi' => '文捷航空速递', 185 | 'wuyuan' => '伍圆', 186 | 'wxwl' => '万象物流', 187 | 'xinbangwuliu' => '新邦物流', 188 | 'xinfengwuliu' => '信丰物流', 189 | 'yafengsudi' => '亚风速递', 190 | 'yibangwuliu' => '一邦速递', 191 | 'youshuwuliu' => '优速物流', 192 | 'youzhengguonei' => '邮政包裹挂号信', 193 | 'youzhengguoji' => '邮政国际包裹挂号信', 194 | 'yuanchengwuliu' => '远成物流', 195 | 'yuanweifeng' => '源伟丰快递', 196 | 'yuanzhijiecheng' => '元智捷诚快递', 197 | 'yuntongkuaidi' => '运通快递', 198 | 'yuefengwuliu' => '越丰物流', 199 | 'yad' => '源安达', 200 | 'yinjiesudi' => '银捷速递', 201 | 'zhongtiekuaiyun' => '中铁快运', 202 | 'zhongyouwuliu' => '中邮物流', 203 | 'zhongxinda' => '忠信达', 204 | 'zhimakaimen' => '芝麻开门' 205 | ); 206 | ``` 207 | ## License 208 | 209 | MIT 210 | -------------------------------------------------------------------------------- /src/Express.php: -------------------------------------------------------------------------------- 1 | 6 | * 7 | * This source file is subject to the MIT license that is bundled 8 | * with this source code in the file LICENSE. 9 | */ 10 | 11 | /** 12 | * Express 13 | * 14 | * @author dzer 15 | * @copyright 2016 dzer 16 | * 17 | * @link https://github.com/dzer 18 | * @link http://dzer.me 19 | */ 20 | 21 | namespace dzer\express; 22 | 23 | use Yii; 24 | 25 | class Express extends \yii\base\Component 26 | { 27 | /** 28 | * 快递100查询地址 29 | * 30 | * @var string 31 | */ 32 | static $url = 'http://www.kuaidi100.com/query?'; 33 | 34 | /** 35 | * 物流编码 36 | * 支持以下物流查询 37 | * 38 | * @var array 39 | */ 40 | static $data = array( 41 | 'shunfeng' => '顺丰', 42 | 'yuantong' => '圆通速递', 43 | 'shentong' => '申通', 44 | 'yunda' => '韵达快运', 45 | 'ems' => 'ems快递', 46 | 'tiantian' => '天天快递', 47 | 'zhaijisong' => '宅急送', 48 | 'quanfengkuaidi' => '全峰快递', 49 | 'zhongtong' => '中通速递', 50 | 'rufengda' => '如风达', 51 | 'debangwuliu' => '德邦物流', 52 | 'huitongkuaidi' => '汇通快运', 53 | 'aae' => 'aae全球专递', 54 | 'anjie' => '安捷快递', 55 | 'anxindakuaixi' => '安信达快递', 56 | 'biaojikuaidi' => '彪记快递', 57 | 'bht' => 'bht', 58 | 'baifudongfang' => '百福东方国际物流', 59 | 'coe' => '中国东方(COE)', 60 | 'changyuwuliu' => '长宇物流', 61 | 'datianwuliu' => '大田物流', 62 | 'dhl' => 'dhl', 63 | 'dpex' => 'dpex', 64 | 'dsukuaidi' => 'd速快递', 65 | 'disifang' => '递四方', 66 | 'fedex' => 'fedex(国外)', 67 | 'feikangda' => '飞康达物流', 68 | 'fenghuangkuaidi' => '凤凰快递', 69 | 'feikuaida' => '飞快达', 70 | 'guotongkuaidi' => '国通快递', 71 | 'ganzhongnengda' => '港中能达物流', 72 | 'guangdongyouzhengwuliu' => '广东邮政物流', 73 | 'gongsuda' => '共速达', 74 | 'hengluwuliu' => '恒路物流', 75 | 'huaxialongwuliu' => '华夏龙物流', 76 | 'haihongwangsong' => '海红', 77 | 'haiwaihuanqiu' => '海外环球', 78 | 'jiayiwuliu' => '佳怡物流', 79 | 'jinguangsudikuaijian' => '京广速递', 80 | 'jixianda' => '急先达', 81 | 'jjwl' => '佳吉物流', 82 | 'jymwl' => '加运美物流', 83 | 'jindawuliu' => '金大物流', 84 | 'jialidatong' => '嘉里大通', 85 | 'jykd' => '晋越快递', 86 | 'kuaijiesudi' => '快捷速递', 87 | 'lianb' => '联邦快递(国内)', 88 | 'lianhaowuliu' => '联昊通物流', 89 | 'longbanwuliu' => '龙邦物流', 90 | 'lijisong' => '立即送', 91 | 'lejiedi' => '乐捷递', 92 | 'minghangkuaidi' => '民航快递', 93 | 'meiguokuaidi' => '美国快递', 94 | 'menduimen' => '门对门', 95 | 'ocs' => 'OCS', 96 | 'peisihuoyunkuaidi' => '配思货运', 97 | 'quanchenkuaidi' => '全晨快递', 98 | 'quanjitong' => '全际通物流', 99 | 'quanritongkuaidi' => '全日通快递', 100 | 'quanyikuaidi' => '全一快递', 101 | 'santaisudi' => '三态速递', 102 | 'shenghuiwuliu' => '盛辉物流', 103 | 'sue' => '速尔物流', 104 | 'shengfeng' => '盛丰物流', 105 | 'saiaodi' => '赛澳递', 106 | 'tiandihuayu' => '天地华宇', 107 | 'tnt' => 'tnt', 108 | 'ups' => 'ups', 109 | 'wanjiawuliu' => '万家物流', 110 | 'wenjiesudi' => '文捷航空速递', 111 | 'wuyuan' => '伍圆', 112 | 'wxwl' => '万象物流', 113 | 'xinbangwuliu' => '新邦物流', 114 | 'xinfengwuliu' => '信丰物流', 115 | 'yafengsudi' => '亚风速递', 116 | 'yibangwuliu' => '一邦速递', 117 | 'youshuwuliu' => '优速物流', 118 | 'youzhengguonei' => '邮政包裹挂号信', 119 | 'youzhengguoji' => '邮政国际包裹挂号信', 120 | 'yuanchengwuliu' => '远成物流', 121 | 'yuanweifeng' => '源伟丰快递', 122 | 'yuanzhijiecheng' => '元智捷诚快递', 123 | 'yuntongkuaidi' => '运通快递', 124 | 'yuefengwuliu' => '越丰物流', 125 | 'yad' => '源安达', 126 | 'yinjiesudi' => '银捷速递', 127 | 'zhongtiekuaiyun' => '中铁快运', 128 | 'zhongyouwuliu' => '中邮物流', 129 | 'zhongxinda' => '忠信达', 130 | 'zhimakaimen' => '芝麻开门' 131 | ); 132 | 133 | /** 134 | * 查询快递单号 135 | * 136 | * @param string $code 快递编码 137 | * @param string $number 快递单号 138 | * @param string $output 返回数据格式 默认返回数组,可返回json 139 | * @return array|bool|mixed|string 140 | */ 141 | public static function search($number, $code = '', $output = 'json') 142 | { 143 | if (!empty($number) && empty($code)) { 144 | $code = self::getCode($number, 'code'); 145 | } 146 | if (!empty($number) && !empty($code)) { 147 | $data = array( 148 | 'type' => trim($code), 149 | 'postid' => trim($number) 150 | ); 151 | //拼接url 152 | self::$url = self::$url . http_build_query($data); 153 | //请求接口 154 | $result = self::httpGet(self::$url); 155 | if (empty($result)) { 156 | $result = json_encode(array('status' => 400, 'message' => '请求错误')); 157 | } 158 | } else { 159 | $result = json_encode(array('status' => 400, 'message' => '快递单号不正确')); 160 | } 161 | return $output == 'json' ? $result : json_decode($result); 162 | } 163 | 164 | /** 165 | * 获取快递单所属公司 166 | * 167 | * @param $number string 快递单号 168 | * @param $output string 返回格式 169 | * @return string 170 | * @author dzer 171 | */ 172 | public static function getCode($number, $output = 'name') 173 | { 174 | $code = ''; 175 | $result = self::httpGet("http://www.kuaidi100.com/autonumber/auto?num={$number}"); 176 | if (!empty($result)) { 177 | $name = @json_decode($result, true); 178 | $code = isset($name[0]['comCode']) ? $name[0]['comCode'] : ''; 179 | } 180 | return $output == 'name' ? (isset(self::$data[$code]) ? self::$data[$code] : $code) : $code; 181 | } 182 | 183 | /** 184 | * 返回所有的快递 185 | * 186 | * @return array 187 | */ 188 | public static function getAll() 189 | { 190 | return self::$data; 191 | } 192 | 193 | /** 194 | * curl请求 195 | * 196 | * @param string $url 请求连接 197 | * @return bool|mixed 198 | */ 199 | private static function httpGet($url) 200 | { 201 | $oCurl = curl_init(); 202 | curl_setopt($oCurl, CURLOPT_URL, $url); 203 | curl_setopt($oCurl, CURLOPT_TIMEOUT, 10); 204 | curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1); 205 | $sContent = curl_exec($oCurl); 206 | $aStatus = curl_getinfo($oCurl); 207 | curl_close($oCurl); 208 | if (intval($aStatus["http_code"]) == 200) { 209 | return $sContent; 210 | } else { 211 | return false; 212 | } 213 | } 214 | } 215 | --------------------------------------------------------------------------------