diff --git a/extend/service/ExtendService.php b/extend/service/ExtendService.php
new file mode 100644
index 000000000..4d505ef48
--- /dev/null
+++ b/extend/service/ExtendService.php
@@ -0,0 +1,103 @@
+<?php
+
+// +----------------------------------------------------------------------
+// | Think.Admin
+// +----------------------------------------------------------------------
+// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// +----------------------------------------------------------------------
+// | 官方网站: http://think.ctolog.com
+// +----------------------------------------------------------------------
+// | 开源协议 ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | github开源项目:https://github.com/zoujingli/Think.Admin
+// +----------------------------------------------------------------------
+
+namespace service;
+
+use think\Db;
+use think\Request;
+
+/**
+ * 扩展服务
+ * Class ExtendService
+ * @package service
+ */
+class ExtendService
+{
+
+    /**
+     * 发送短信验证码
+     * @param string $phone 手机号
+     * @param string $content 短信内容
+     * @param string $productid 短信通道ID
+     * @return bool
+     */
+    public static function sendSms($phone, $content, $productid = '676767')
+    {
+        $tkey = date("YmdHis");
+        $data = [
+            'username' => sysconf('sms_username'), 'tkey' => $tkey,
+            'content'  => $content, 'mobile' => $phone, 'productid' => $productid,
+            'password' => md5(md5(sysconf('sms_password')) . $tkey),
+        ];
+        $result = HttpService::post('http://www.ztsms.cn/sendNSms.do', $data);
+        list($code, $msg) = explode(',', $result . ',');
+        $insert = ['phone' => $phone, 'content' => $content, 'result' => $result];
+        Db::name('MemberSmsHistory')->insert($insert);
+        return intval($code) === 1;
+    }
+
+    /**
+     * 查询短信余额
+     * @return array
+     */
+    public static function querySmsBalance()
+    {
+        $tkey = date("YmdHis");
+        $data = [
+            'username' => sysconf('sms_username'), 'tkey' => $tkey,
+            'password' => md5(md5(sysconf('sms_password')) . $tkey),
+        ];
+        $result = HttpService::post('http://www.ztsms.cn/balanceN.do', $data);
+        if ($result > -1) {
+            return ['code' => 1, 'num' => $result, 'msg' => '获取短信剩余条数成功!'];
+        } elseif ($result > -2) {
+            return ['code' => 0, 'num' => '0', 'msg' => '用户名或者密码不正确!'];
+        } elseif ($result > -3) {
+            return ['code' => 0, 'num' => '0', 'msg' => 'tkey不正确!'];
+        } elseif ($result > -4) {
+            return ['code' => 0, 'num' => '0', 'msg' => '用户不存在或用户停用!'];
+        }
+    }
+
+    /**
+     * 通用物流单查询
+     * @param string $code 快递物流编号
+     * @return array
+     */
+    public static function expressByAuto($code)
+    {
+        list($result, $client_ip) = [[], Request::instance()->ip()];
+        $header = ['Host' => 'www.kuaidi100.com', 'CLIENT-IP' => $client_ip, 'X-FORWARDED-FOR' => $client_ip];
+        $autoResult = HttpService::get("http://www.kuaidi100.com/autonumber/autoComNum?text={$code}", [], 30, $header);
+        foreach (json_decode($autoResult)->auto as $vo) {
+            $result[$vo->comCode] = self::express($vo->comCode, $code);
+        }
+        return $result;
+    }
+
+    /**
+     * 查询物流信息
+     * @param string $express_code 快递公司编辑
+     * @param string $express_no 快递物流编号
+     * @return array
+     */
+    public static function express($express_code, $express_no)
+    {
+        list($microtime, $client_ip) = [microtime(true), Request::instance()->ip()];
+        $header = ['Host' => 'www.kuaidi100.com', 'CLIENT-IP' => $client_ip, 'X-FORWARDED-FOR' => $client_ip];
+        $location = "http://www.kuaidi100.com/query?type={$express_code}&postid={$express_no}&id=1&valicode=&temp={$microtime}";
+        return json_decode(HttpService::get($location, [], 30, $header), true);
+    }
+
+}
\ No newline at end of file