Browse Source

项目添加

jichaobo 3 years ago
commit
ca3275aa38
100 changed files with 7289 additions and 0 deletions
  1. 34 0
      .env.example
  2. 5 0
      .gitattributes
  3. 12 0
      .gitignore
  4. 0 0
      .htaccess
  5. 36 0
      README.md
  6. 40 0
      app/Console/Kernel.php
  7. 79 0
      app/Exceptions/Handler.php
  8. 101 0
      app/Http/Controllers/Admin/ActiveController.php
  9. 99 0
      app/Http/Controllers/Admin/ActiveThemeController.php
  10. 33 0
      app/Http/Controllers/Admin/ActiveUserController.php
  11. 172 0
      app/Http/Controllers/Admin/AdminController.php
  12. 159 0
      app/Http/Controllers/Admin/AdvertiseController.php
  13. 34 0
      app/Http/Controllers/Admin/AdvertiseTypeController.php
  14. 138 0
      app/Http/Controllers/Admin/ArticleController.php
  15. 82 0
      app/Http/Controllers/Admin/BaseController.php
  16. 88 0
      app/Http/Controllers/Admin/CompanyController.php
  17. 111 0
      app/Http/Controllers/Admin/CourseController.php
  18. 33 0
      app/Http/Controllers/Admin/CourseUserController.php
  19. 33 0
      app/Http/Controllers/Admin/IndexController.php
  20. 134 0
      app/Http/Controllers/Admin/ProductController.php
  21. 120 0
      app/Http/Controllers/Admin/RoleController.php
  22. 139 0
      app/Http/Controllers/Admin/UserController.php
  23. 66 0
      app/Http/Controllers/Auth/AdminLoginController.php
  24. 32 0
      app/Http/Controllers/Auth/ForgotPasswordController.php
  25. 94 0
      app/Http/Controllers/Auth/LoginBaseController.php
  26. 62 0
      app/Http/Controllers/Auth/LoginController.php
  27. 109 0
      app/Http/Controllers/Auth/RegisterController.php
  28. 39 0
      app/Http/Controllers/Auth/ResetPasswordController.php
  29. 15 0
      app/Http/Controllers/Controller.php
  30. 31 0
      app/Http/Controllers/Home/AboutUsController.php
  31. 80 0
      app/Http/Controllers/Home/ActiveController.php
  32. 87 0
      app/Http/Controllers/Home/BaseController.php
  33. 74 0
      app/Http/Controllers/Home/CourseController.php
  34. 44 0
      app/Http/Controllers/Home/IndexController.php
  35. 39 0
      app/Http/Controllers/Home/InformationController.php
  36. 27 0
      app/Http/Controllers/Home/ProductController.php
  37. 293 0
      app/Http/Controllers/Home/UserController.php
  38. 61 0
      app/Http/Kernel.php
  39. 84 0
      app/Http/Middleware/CheckAdminsRole.php
  40. 17 0
      app/Http/Middleware/EncryptCookies.php
  41. 27 0
      app/Http/Middleware/RedirectIfAuthenticated.php
  42. 18 0
      app/Http/Middleware/TrimStrings.php
  43. 17 0
      app/Http/Middleware/VerifyCsrfToken.php
  44. 68 0
      app/Http/Requests/ActiveRequest.php
  45. 32 0
      app/Http/Requests/ActiveThemeRequest.php
  46. 32 0
      app/Http/Requests/AdminNameRequest.php
  47. 54 0
      app/Http/Requests/AdvertiseRequest.php
  48. 34 0
      app/Http/Requests/ArticleRequest.php
  49. 43 0
      app/Http/Requests/CompanyRequest.php
  50. 69 0
      app/Http/Requests/CourseRequest.php
  51. 31 0
      app/Http/Requests/EmailAndRemarkRequest.php
  52. 31 0
      app/Http/Requests/MobileRequest.php
  53. 34 0
      app/Http/Requests/PasswordRequest.php
  54. 35 0
      app/Http/Requests/ProductRequest.php
  55. 37 0
      app/Http/Requests/RoleRequest.php
  56. 32 0
      app/Http/Requests/UserNameRequest.php
  57. 36 0
      app/Http/Requests/UserProfileRequest.php
  58. 76 0
      app/Libs/Aliyun/Api/Sms/Request/V20170525/QueryInterSmsIsoInfoRequest.php
  59. 103 0
      app/Libs/Aliyun/Api/Sms/Request/V20170525/QuerySendDetailsRequest.php
  60. 121 0
      app/Libs/Aliyun/Api/Sms/Request/V20170525/SendBatchSmsRequest.php
  61. 131 0
      app/Libs/Aliyun/Api/Sms/Request/V20170525/SendInterSmsRequest.php
  62. 113 0
      app/Libs/Aliyun/Api/Sms/Request/V20170525/SendSmsRequest.php
  63. 125 0
      app/Libs/Aliyun/Core/AcsRequest.php
  64. 29 0
      app/Libs/Aliyun/Core/AcsResponse.php
  65. 72 0
      app/Libs/Aliyun/Core/Auth/Credential.php
  66. 12 0
      app/Libs/Aliyun/Core/Auth/ISigner.php
  67. 20 0
      app/Libs/Aliyun/Core/Auth/ShaHmac1Signer.php
  68. 20 0
      app/Libs/Aliyun/Core/Auth/ShaHmac256Signer.php
  69. 124 0
      app/Libs/Aliyun/Core/DefaultAcsClient.php
  70. 50 0
      app/Libs/Aliyun/Core/Exception/ClientException.php
  71. 31 0
      app/Libs/Aliyun/Core/Exception/ServerException.php
  72. 69 0
      app/Libs/Aliyun/Core/Http/HttpHelper.php
  73. 38 0
      app/Libs/Aliyun/Core/Http/HttpResponse.php
  74. 7 0
      app/Libs/Aliyun/Core/IAcsClient.php
  75. 137 0
      app/Libs/Aliyun/Core/Profile/DefaultProfile.php
  76. 14 0
      app/Libs/Aliyun/Core/Profile/IClientProfile.php
  77. 47 0
      app/Libs/Aliyun/Core/Regions/Endpoint.php
  78. 63 0
      app/Libs/Aliyun/Core/Regions/EndpointConfig.php
  79. 53 0
      app/Libs/Aliyun/Core/Regions/EndpointProvider.php
  80. 28 0
      app/Libs/Aliyun/Core/Regions/ProductDomain.php
  81. 1349 0
      app/Libs/Aliyun/Core/Regions/endpoints.xml
  82. 207 0
      app/Libs/Aliyun/Core/RoaAcsRequest.php
  83. 105 0
      app/Libs/Aliyun/Core/RpcAcsRequest.php
  84. 23 0
      app/Libs/Aliyun/Core/SmsConfig.php
  85. 121 0
      app/Libs/Aliyun/Sms.php
  86. 84 0
      app/Models/Active.php
  87. 19 0
      app/Models/ActivesTheme.php
  88. 33 0
      app/Models/ActivesUser.php
  89. 19 0
      app/Models/Admin.php
  90. 21 0
      app/Models/AdminsRole.php
  91. 18 0
      app/Models/Advertise.php
  92. 16 0
      app/Models/AdvertisesType.php
  93. 29 0
      app/Models/Article.php
  94. 29 0
      app/Models/BaseModel.php
  95. 21 0
      app/Models/Company.php
  96. 28 0
      app/Models/Course.php
  97. 24 0
      app/Models/CoursesUser.php
  98. 38 0
      app/Models/Menu.php
  99. 15 0
      app/Models/MenuBaseModel.php
  100. 41 0
      app/Models/MenusAd.php

+ 34 - 0
.env.example

@@ -0,0 +1,34 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_LOG_LEVEL=debug
+APP_URL=http://localhost
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=forge
+DB_USERNAME=root
+DB_PASSWORD=root
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+QUEUE_DRIVER=sync
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_DRIVER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=

+ 5 - 0
.gitattributes

@@ -0,0 +1,5 @@
+* text=auto
+*.css linguist-vendored
+*.scss linguist-vendored
+*.js linguist-vendored
+CHANGELOG.md export-ignore

+ 12 - 0
.gitignore

@@ -0,0 +1,12 @@
+/node_modules
+/public/hot
+/public/storage
+/storage/*.key
+/vendor
+/.idea
+/.vagrant
+Homestead.json
+Homestead.yaml
+npm-debug.log
+yarn-error.log
+.env

+ 0 - 0
.htaccess


+ 36 - 0
README.md

@@ -0,0 +1,36 @@
+# 简要说明
+- 这本来是个人为公司独立开发的网站,现网站后端已被替换,所以公开源码。
+- 已移除有关公司的所有信息,所以还未进行全面改良及测试,可能存在bug,后面会不断更新。
+- 网站包括产品、课程、新闻、活动、会员五大模块,前台进行内容的展示,后台进行内容的配置,并包括管理员权限模块。
+- 前台的前端使用了在网上找来的模板,该模板使用了layui框架,前台则是根据这个模板以及公司需求进行了改造。
+- 后台的前端全部为个人独立撰写。
+- 项目使用了laravel后端框架的5.4版本进行开发。
+- 网站前台为自适应式布局
+
+——————————————————————————————
+# 要求环境
+- 参考 https://laravelacademy.org/post/6665.html 中的 “1、服务器要求”
+- composer
+
+——————————————————————————————
+# 安装步骤
+- 下载本项目并解压
+- composer install
+- 创建数据库,并导入database目录下的menus and menus_ad.sql文件
+- 将.env.example复制为.env,并且更改.env中的数据库相关信息
+- php artisan key:generate(系统自动生成.env文件中的APP_KEY)
+- php artisan migrate(根据项目迁移文件创建项目所需数据库表)
+- php artisan db:seed(根据项目填充文件增加数据库表中所需数据)
+- 该项目站点映射至项目路径的public目录
+- (可删除项目中的doc_images文件夹,该文件夹存的是read.md所需展示的项目效果图)
+
+——————————————————————————————
+# 效果图
+- 存放在doc_images文件夹中
+- 分为三大部分
+```
+    - 前台PC端效果:文件名 “pc_” 开头
+    - 前台手机端效果:文件名以 “mobile_” 开头
+    - 后台效果:文件名以 “admin_” 开头
+```
+

+ 40 - 0
app/Console/Kernel.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace App\Console;
+
+use Illuminate\Console\Scheduling\Schedule;
+use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
+
+class Kernel extends ConsoleKernel
+{
+    /**
+     * The Artisan commands provided by your application.
+     *
+     * @var array
+     */
+    protected $commands = [
+        //
+    ];
+
+    /**
+     * Define the application's command schedule.
+     *
+     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
+     * @return void
+     */
+    protected function schedule(Schedule $schedule)
+    {
+        // $schedule->command('inspire')
+        //          ->hourly();
+    }
+
+    /**
+     * Register the Closure based commands for the application.
+     *
+     * @return void
+     */
+    protected function commands()
+    {
+        require base_path('routes/console.php');
+    }
+}

+ 79 - 0
app/Exceptions/Handler.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Exceptions;
+
+use Exception;
+use Illuminate\Auth\AuthenticationException;
+use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
+
+class Handler extends ExceptionHandler
+{
+    /**
+     * A list of the exception types that should not be reported.
+     *
+     * @var array
+     */
+    protected $dontReport = [
+        \Illuminate\Auth\AuthenticationException::class,
+        \Illuminate\Auth\Access\AuthorizationException::class,
+        \Symfony\Component\HttpKernel\Exception\HttpException::class,
+        \Illuminate\Database\Eloquent\ModelNotFoundException::class,
+        \Illuminate\Session\TokenMismatchException::class,
+        \Illuminate\Validation\ValidationException::class,
+    ];
+
+    /**
+     * Report or log an exception.
+     *
+     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
+     *
+     * @param  \Exception  $exception
+     * @return void
+     */
+    public function report(Exception $exception)
+    {
+        parent::report($exception);
+    }
+
+    /**
+     * Render an exception into an HTTP response.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Exception  $exception
+     * @return \Illuminate\Http\Response
+     */
+    public function render($request, Exception $e)
+    {
+        /**
+         * update by pjh 20180306
+         * 根据异常错误码响应到views/errors中对应视图
+         **/
+        if ($e instanceof HttpException) {
+            $code = $e->getStatusCode();
+            if (view()->exists('errors.'.$code)) {
+                return response()->view('errors.'.$e->getStatusCode());
+            }
+        }
+        return parent::render($request, $e);
+    }
+
+    /**
+     * Convert an authentication exception into an unauthenticated response.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Illuminate\Auth\AuthenticationException  $exception
+     * @return \Illuminate\Http\Response
+     */
+    protected function unauthenticated($request, AuthenticationException $exception)
+    {
+        if ($request->expectsJson()) {
+            return response()->json(['error' => 'Unauthenticated.'], 401);
+        }
+
+        if(in_array('admin', $exception->guards())) {
+            return redirect()->guest('admin/login');
+        }
+
+        return redirect()->guest(route('login'));
+    }
+}

+ 101 - 0
app/Http/Controllers/Admin/ActiveController.php

@@ -0,0 +1,101 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use Validator;
+use App\Models\Active;
+use App\Models\ActivesTheme;
+use App\Http\Requests\ActiveRequest;
+
+class ActiveController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.active.list';
+    protected $view_addupd = 'admin.active.addupd';
+
+    protected $menu_name = 'active';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 活动管理 */
+    // 页面展示
+    public function index($tid)
+    {
+        $actives['actives'] = Active::where('tid', $tid)
+                                    ->orderBy('created_at', 'desc')
+                                    ->paginate(10);
+        $actives['theme'] = ActivesTheme::find($tid);
+
+        $view_para = array_add($this->view_para, 'actives', $actives);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView($tid)
+    {
+        $activesTheme = ActivesTheme::find($tid);
+
+        $view_para = array_add($this->view_para, 'activesTheme', $activesTheme);
+
+        return view($this->view_addupd, $view_para);
+    } 
+    // 表单处理
+    public function addPost($tid, ActiveRequest $request)
+    {
+        $data = Request::all();
+        $data['tid'] = $tid;
+        Active::create($data);
+
+        return redirect()->route($this->menu_name, ['tid' => $tid])->with('success', '添加成功');
+    }
+
+
+    /* 修改 */
+    // 页面展示
+    public function updView($tid, $id)
+    {
+        $active = Active::find($id);
+        if (!$active) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该活动');
+        }
+
+        $activesTheme = ActivesTheme::find($tid);
+
+        $view_para = array_add($this->view_para, 'active', $active);
+        $view_para = array_add($view_para, 'activesTheme', $activesTheme);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($tid, $id, ActiveRequest $request)
+    {
+        $active = Active::find($id);
+        if (!$active) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该活动');
+        }
+
+        $active = Request::except('_token');
+        Active::where('id', $id)
+                ->update($active);
+
+        return redirect()->route($this->menu_name, ['tid' => $tid])->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($tid, $id)
+    {
+        Active::destroy($id);
+        
+        return redirect()->route($this->menu_name, ['tid' => $tid])->with('success', '删除成功');
+    }
+}

+ 99 - 0
app/Http/Controllers/Admin/ActiveThemeController.php

@@ -0,0 +1,99 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\Active;
+use App\Models\ActivesTheme;
+use App\Http\Requests\ActiveThemeRequest;
+
+class ActiveThemeController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.active.list_theme';
+    protected $view_addupd = 'admin.active.addupd_theme';
+
+    protected $menu_name = 'active';
+    protected $route_href = 'activeTheme';
+    
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+    /* 活动主题管理 */
+    // 页面展示
+    public function index()
+    {
+        $activesThemes = ActivesTheme::where([])
+                                        ->orderBy('created_at', 'desc')
+                                        ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'activesThemes', $activesThemes);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        return view($this->view_addupd, $this->view_para);
+    }
+    // 表单处理
+    public function addPost(ActiveThemeRequest $request)
+    {
+        ActivesTheme::create([
+            'name'  =>  Request::input('name')
+        ]);
+
+        return redirect()->route($this->route_href)->with('success', '添加成功');
+    }
+
+
+    /* 修改 */
+    // 页面展示
+    public function updView($tid)
+    {
+        $activesTheme = ActivesTheme::find($tid);
+        if (!$activesTheme) {
+            return redirect()->route($this->route_href)->with('error', '找不到该活动主题');
+        }
+
+        $view_para = array_add($this->view_para, 'activesTheme', $activesTheme);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($tid, ActiveThemeRequest $request)
+    {
+        $activeTheme = ActivesTheme::find($tid);
+        if (!$activeTheme) {
+            return redirect()->route($this->route_href)->with('error', '找不到该活动主题');
+        }
+
+        ActivesTheme::where('id', $tid)
+                    ->update([
+                        'name' =>  Request::input('name')
+                    ]);
+
+        return redirect()->route($this->route_href)->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($tid)
+    {
+        $if_del = Active::where('tid', $tid)
+                        ->count();
+
+        if ($if_del) {
+            return redirect()->route($this->route_href)->with('error', '请先删除该主题下的活动');
+        }
+
+        ActivesTheme::destroy($tid);
+        return redirect()->route($this->route_href)->with('success', '删除成功');
+    }
+}

+ 33 - 0
app/Http/Controllers/Admin/ActiveUserController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Models\ActivesUser;
+
+class ActiveUserController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.active.list_user';
+
+    protected $menu_name = 'active';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 报名管理 */
+    // 页面展示
+    public function index($tid, $id)
+    {
+        $activesUsers = ActivesUser::where('aid', $id)
+                                    ->orderBy('created_at', 'desc')
+                                    ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'activesUsers', $activesUsers);
+
+        return view($this->view, $view_para);
+    }
+}

+ 172 - 0
app/Http/Controllers/Admin/AdminController.php

@@ -0,0 +1,172 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\Admin;
+use App\Models\AdminsRole;
+use App\Http\Requests\AdminNameRequest;
+use App\Http\Requests\PasswordRequest;
+
+class AdminController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.admin.list';
+    protected $view_addupd = 'admin.admin.addupd';
+
+    protected $menu_name = 'admin';
+
+    
+    public function __construct(AdminsRole $adminsRole)
+    {
+        parent::__construct($this->menu_name);
+        $this->adminsRole = $adminsRole;
+    }
+
+
+    public function getRoles()
+    {
+        return AdminsRole::all();
+    }
+
+    public function findAdmin($id)
+    {
+        $admin = Admin::find($id);
+        if ($admin) {
+            $code = 1;
+            $mes = $admin;
+        }
+        else {
+            $code = 0;
+            $mes = redirect()->route($this->menu_name)->with('error', '找不到该管理员');
+        }
+
+        return ['code' => $code, 'mes' => $mes];
+    }
+
+
+    /* 管理员管理 */
+    // 页面展示
+    public function index()
+    {
+        $admins = Admin::where([])
+                        ->orderBy('created_at', 'desc')
+                        ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'admins', $admins);
+        $view_para = array_add($view_para, 'adminsRole', $this->adminsRole);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        $roles = $this->getRoles();
+        $view_para = array_add($this->view_para, 'roles', $roles);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost(AdminNameRequest $request, PasswordRequest $request)
+    {
+        $data = Request::all();
+        $data['password'] = bcrypt($data['password']);
+        Admin::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 修改密码 */
+    // 页面展示
+    public function updPwdView($id)
+    {
+        $find_admin = $this->findAdmin($id);
+        if ( $find_admin['code'] ) {
+            $admin = $find_admin['mes'];
+        }
+        else {
+            return $find_admin['mes'];
+        }
+
+        $view_para = array_add($this->view_para, 'admin', $admin);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPwdPost($id, PasswordRequest $request)
+    {
+        if (1 == $id) {
+            return redirect()->route($this->menu_name)->with('error', '该管理员不可修改密码');
+        }
+
+        $find_admin = $this->findAdmin($id);
+        if ( $find_admin['code'] ) {
+            $admin = $find_admin['mes'];
+        }
+        else {
+            return $find_admin['mes'];
+        }
+
+        $admin->password = bcrypt(Request::input('password'));
+        $admin->save();
+
+        return redirect()->route($this->menu_name)->with('success', '修改密码成功');
+    }
+
+
+    /* 修改角色 */
+    // 页面展示
+    public function updRoleView($id)
+    {
+        $find_admin = $this->findAdmin($id);
+        if ( $find_admin['code'] ) {
+            $admin = $find_admin['mes'];
+        }
+        else {
+            return $find_admin['mes'];
+        }
+
+        $roles = $this->getRoles();
+        $view_para = array_add($this->view_para, 'roles', $roles);
+        $view_para = array_add($view_para, 'admin', $admin);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updRolePost($id)
+    {
+        if (1 == $id) {
+            return redirect()->route($this->menu_name)->with('error', '该管理员不可修改角色');
+        }
+
+        $find_admin = $this->findAdmin($id);
+        if ( $find_admin['code'] ) {
+            $admin = $find_admin['mes'];
+        }
+        else {
+            return $find_admin['mes'];
+        }
+
+        $admin->rid = Request::input('rid');
+        $admin->save();
+
+        return redirect()->route($this->menu_name)->with('success', '修改角色成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        if (1 == $id) {
+            return redirect()->route($this->menu_name)->with('error', '该管理员不可删除');
+        }
+
+        Admin::destroy($id);
+
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+}

+ 159 - 0
app/Http/Controllers/Admin/AdvertiseController.php

@@ -0,0 +1,159 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\Advertise;
+use App\Models\AdvertisesType;
+use App\Http\Requests\AdvertiseRequest;
+
+class AdvertiseController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.advertise.list';
+    protected $view_addupd = 'admin.advertise.addupd';
+
+    protected $menu_name = 'advertise';
+    protected $route_href = 'adv';
+    protected $image_path = 'uploads/advertise/images';
+
+    
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+    // 获取图片文件名
+    public function getImageName($tpid, $sort)
+    {
+        return AdvertisesType::find($tpid)->ename.'_'.$sort;
+    }
+
+    // 获取图片新排序文件名
+    public function getImageNewName($urlPath, $name)
+    {
+        $path = dirname($urlPath);
+        $ext = pathinfo($urlPath, PATHINFO_EXTENSION);
+        return $path.'/'.$name.'.'.$ext;
+    }
+
+
+    /* 广告位管理 */
+    // 页面展示
+    public function index($tpid)
+    {
+        $advs = Advertise::where('tpid', $tpid)
+                                ->orderBy('sort')
+                                ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'advertises', $advs);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView($tpid)
+    {
+        $advType = AdvertisesType::find($tpid);
+        $view_para = array_add($this->view_para, 'advertiseType', $advType);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost($tpid, AdvertiseRequest $request)
+    {
+        $image = Request::file('image');
+        if (!$image) {
+            return redirect()->back()->with('errors_image', '图片不可为空')->withInput();
+        }
+        $errors_image = $this->imageValidator($image);
+        if ($errors_image) {
+            return redirect()->back()->with('errors_image', $errors_image)->withInput();
+        }
+        
+        $data = Request::except('image');
+        $ext = $image->getClientOriginalExtension();
+        $image_name = $this->getImageName($tpid, $data['sort']);
+        $path = $this->imageUpload($image_name, $image, $this->image_path);
+
+        $data['image'] = $path;
+        $data['tpid'] = $tpid;
+        Advertise::create($data);
+
+        return redirect()->route($this->route_href, ['tpid' => $tpid])->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($tpid, $id)
+    {
+        $adv = Advertise::find($id);
+        $advType = AdvertisesType::find($tpid);
+        $view_para = array_add($this->view_para, 'advertise', $adv);
+        $view_para = array_add($view_para, 'advertiseType', $advType);
+
+        return view($this->view_addupd, $view_para);
+    }
+
+    // 表单处理
+    public function updPost($tpid, $id, AdvertiseRequest $request)
+    {
+        $adv = Advertise::find($id);
+        $oldUrlPath = $adv->image;
+        $sort = Request::input('sort');
+        $image_name = $this->getImageName($adv->tpid, $sort);
+        
+        $image = Request::file('image');
+        if ($image) {
+            $adv->image = $this->imageUpload($image_name, $image, $this->image_path); 
+        }
+        else if (file_exists($oldUrlPath) && $adv->sort!=$sort) {
+            $newUrlPath = $this->getImageNewName($oldUrlPath, $image_name);
+            $result = $this->imageRename($oldUrlPath, $newUrlPath);
+            if (!$result) {
+                return redirect()->route($this->route_href, ['tpid' => $tpid])->with('error', '编辑失败');
+            }
+            $adv->image = $newUrlPath;
+        }
+        
+        $adv->sort = Request::input('sort');
+        $adv->href = Request::input('href');
+        $adv->save();
+        return redirect()->route($this->route_href, ['tpid' => $tpid])->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($tpid, $id)
+    {
+        $adv = Advertise::find($id);
+
+        $image_name = $adv->image;
+        /*if (!$image_name) {
+            return redirect()->route($this->route_href, ['tpid' => $tpid])->with('success', '删除成功');
+        }
+        else if (file_exists($image_name)) {
+            $result = $this->imageDelete($image_name);
+            if (!$result) {
+                return redirect()->route($this->route_href, ['tpid' => $tpid])->with('error', '删除失败');
+            }
+        }
+
+        $adv->delete();
+        return redirect()->route($this->route_href, ['tpid' => $tpid])->with('success', '删除成功');*/
+
+        if ($image_name) {
+            if (file_exists($image_name) && !$this->imageDelete($image_name)) {
+                return redirect()->route($this->route_href, ['tpid' => $tpid])->with('error', '删除失败');
+            }
+
+            $adv->delete();
+        }
+
+        return redirect()->route($this->route_href, ['tpid' => $tpid])->with('success', '删除成功');
+    }
+
+}

+ 34 - 0
app/Http/Controllers/Admin/AdvertiseTypeController.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\AdvertisesType;
+
+class AdvertiseTypeController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.advertise.list_type';
+
+    protected $menu_name = 'advertise';
+
+    
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 广告位种类管理 */
+    // 页面展示
+    public function index()
+    {
+        $advTypes = AdvertisesType::where([])
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'advertiseTypes', $advTypes);
+
+        return view($this->view, $view_para);
+    }
+
+}

+ 138 - 0
app/Http/Controllers/Admin/ArticleController.php

@@ -0,0 +1,138 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Auth;
+use Request;
+use App\Models\Article;
+use App\Http\Requests\ArticleRequest;
+
+class ArticleController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.article.list';
+    protected $view_addupd = 'admin.article.addupd';
+
+    protected $menu_name = 'article';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    // 获取所属菜单选项
+    public function getBelongMenus()
+    {
+        $cor_sort1 = $this->menu_home->where('ename', 'cor')
+                                        ->first()
+                                        ->sort1;
+
+        $info_sort1 = $this->menu_home->where('ename', 'info')
+                                        ->first()
+                                        ->sort1;
+                                        
+        $menus_sort1 = [$cor_sort1, $info_sort1];
+
+        return $this->getSomeSecondMenus($menus_sort1);
+    }
+
+
+    /* 文章管理 */
+    // 页面展示
+    public function index()
+    {
+        $articles = Article::where([])
+                            ->orderBy('created_at', 'desc')
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'articles', $articles);
+        $view_para = array_add($view_para, 'menu_home', $this->menu_home);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        $view_para = array_add($this->view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost(ArticleRequest $request)
+    {
+        $cover = Request::file('cover');
+        if (!$cover) {
+            return redirect()->back()->with('errors_image', '封面不可为空')->withInput();
+        }
+        $errors_cover = $this->imageValidator($cover);
+        if ($errors_cover) {
+            return redirect()->back()->with('errors_image', $errors_cover)->withInput();
+        }
+        
+        $path = $this->imageUpload($this->image_name, $cover, $this->image_path);
+
+        $data = Request::except('cover');
+        $data['cover'] = $path;
+        $data['belong'] = implode(',', Request::input('belong'));
+        Article::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $article = Article::find($id);
+        if (!$article) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该文章');
+        }
+
+        $view_para = array_add($this->view_para, 'article', $article);
+        $view_para = array_add($view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($id, ArticleRequest $request)
+    {
+        $article = Article::find($id);
+        if (!$article) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该文章');
+        }
+
+        $cover = Request::file('cover');
+        if ($cover) {
+            $errors_cover = $this->imageValidator($cover);
+            if ($errors_cover) {
+                return redirect()->back()->with('errors_image', $errors_cover)->withInput();
+            }
+            
+            $path = $this->imageUpload($this->image_name, $cover, $this->image_path);
+            $article->cover = $path;
+        }
+
+        $data = Request::except(['_token', 'path']);
+        $data['belong'] = implode(',', Request::input('belong'));
+        Article::where('id', $id)
+                ->update($data);
+        
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        Article::destroy($id);
+        
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+
+}

+ 82 - 0
app/Http/Controllers/Admin/BaseController.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Models\Menu;
+use App\Models\MenusAd;
+use App\Http\Controllers\Controller;
+
+class BaseController extends Controller
+{
+    public function __construct($menu_name = null, $menu_href = null)
+    {
+        $this->menu = new MenusAd();
+        $this->menu_home = new Menu();
+
+        if ($menu_name) {
+            $this_menu = MenusAd::where('ename', $menu_name)
+                                ->first();
+        }
+        else if ($menu_href) {
+            $this_menu = MenusAd::where('href', $menu_href)
+                                ->first();
+        }
+
+        $first_menus = $this->menu->getFirstMenus();
+
+        $this->view_para = [
+            'this_menu'     =>  $this_menu,
+            'model_menu'    =>  $this->menu,
+            'first_menus'	=>	$first_menus,
+        ];
+
+        $this->image_name = time().rand(100000, 999999);
+        $this->image_path = 'uploads/image/'.date('Ymd');
+    }
+
+
+    public function getSomeSecondMenus($menus_sort1)
+    {
+        return Menu::whereIn('sort1', $menus_sort1)
+                    ->where('sort2', '<>', 0)
+                    ->orderBy('sort1')
+                    ->get();
+    }
+
+    public function imageValidator($image)
+    {
+        $ext = $image->getClientOriginalExtension();
+        $ext_rule = ['jpg', 'jpeg', 'png', 'gif'];
+        if (!in_array($ext, $ext_rule)) {
+            return '图片格式只能为jpg/jpeg/png/gif';
+        }
+
+        $size = $image->getClientSize();
+        $max_size = 2097152; // 字节数
+        if ($size > $max_size) {
+            return '图片大小不可超过2048kb';
+        }
+    }
+
+    public function imageUpload($name, $image, $path)
+    {
+        $ext = $image->getClientOriginalExtension(); 
+        $newName = $name.'.'.$ext;
+        $image->move($path, $newName);
+        $urlPath = $path.'/'.$newName;
+        return $urlPath;
+    }
+
+    public function imageDelete($path)
+    {
+        $result = unlink($path);
+        return $result;
+    }
+
+    public function imageRename($oldUrlPath, $newUrlPath)
+    {
+        $result = rename($oldUrlPath, $newUrlPath);
+        return $result;
+    }
+
+}

+ 88 - 0
app/Http/Controllers/Admin/CompanyController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\Company;
+use App\Http\Requests\CompanyRequest;
+
+class CompanyController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.company.list';
+    protected $view_upd = 'admin.company.upd';
+
+    protected $menu_name = 'company';
+    protected $image_path = 'uploads/company/images';
+
+    
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 公司信息管理 */
+    // 页面展示
+    public function index()
+    {
+        $companys = Company::where([])
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'companys', $companys);
+
+        return view($this->view, $view_para);
+    }
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $company = Company::find($id);
+
+        $view_para = array_add($this->view_para, 'company', $company);
+
+        return view($this->view_upd, $view_para);
+    }
+
+    // 表单处理
+    public function updPost($id, CompanyRequest $request)
+    {
+        $company = Company::find($id);
+
+        $image = Request::file('image');
+        if ($image) {
+            $errors_image = $this->imageValidator($image);
+            if ($errors_image) {
+                return redirect()->back()->with('errors_image', $errors_image)->withInput();
+            }
+            
+            $company->image = $this->imageUpload($company->ename, $image, $this->image_path);
+        }
+        
+        $company->value = Request::input('value');
+        $company->save();
+
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 删除图片 */
+    public function delImg($id)
+    {
+        $company = Company::find($id);
+
+        $image_name = $company->image;
+        if ($image_name) {
+            if (file_exists($image_name) && !$this->imageDelete($image_name)) {
+                return redirect()->route($this->menu_name)->with('error', '图片删除失败');
+            }
+
+            $company->image = null;
+            $company->save();
+        }
+
+        return redirect()->route($this->menu_name)->with('success', '图片删除成功');
+    }
+
+}

+ 111 - 0
app/Http/Controllers/Admin/CourseController.php

@@ -0,0 +1,111 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Auth;
+use Request;
+use Validator;
+use App\Models\Course;
+use App\Http\Requests\CourseRequest;
+
+class CourseController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.course.list';
+    protected $view_addupd = 'admin.course.addupd';
+
+    protected $menu_name = 'course';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    // 获取所属菜单选项
+    public function getBelongMenus()
+    {
+        $cor_sort1 = $this->menu_home->where('ename', 'cor')
+                                        ->first()
+                                        ->sort1;
+                                        
+        $menus_sort1 = [$cor_sort1];
+
+        return $this->getSomeSecondMenus($menus_sort1);
+    }
+
+
+    /* 课程管理 */
+    // 页面展示
+    public function index()
+    {
+        $courses = Course::where([])
+                            ->orderBy('created_at', 'desc')
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'courses', $courses);
+        $view_para = array_add($view_para, 'menu_home', $this->menu_home);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        $view_para = array_add($this->view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost(CourseRequest $request)
+    {
+        $data = Request::except('_token');
+        $data['belong'] = implode(',', Request::input('belong'));
+        Course::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $course = Course::find($id);
+        if (!$course) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该课程');
+        }
+        
+        $view_para = array_add($this->view_para, 'course', $course);
+        $view_para = array_add($view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($id, CourseRequest $request)
+    {
+        $course = Course::find($id);
+        if (!$course) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该课程');
+        }
+        
+        $course = Request::except('_token');
+        $course['belong'] = implode(',', Request::input('belong'));
+        Course::where('id', $id)
+                ->update($course);
+
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        Course::destroy($id);
+        
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+}

+ 33 - 0
app/Http/Controllers/Admin/CourseUserController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Models\CoursesUser;
+
+class CourseUserController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.course.list_user';
+
+    protected $menu_name = 'course';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 报名管理 */
+    // 页面展示
+    public function index($id)
+    {
+        $coursesUsers = CoursesUser::where('cid', $id)
+                                    ->orderBy('created_at', 'desc')
+                                    ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'coursesUsers', $coursesUsers);
+
+        return view($this->view, $view_para);
+    }
+}

+ 33 - 0
app/Http/Controllers/Admin/IndexController.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use DB;
+
+class IndexController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.index';
+    
+    protected $menu_name = 'index';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+    
+    // 后台首页
+    public function showIndex()
+    {
+        $laravel = app();
+        $mysqlVersion = DB::select('select VERSION() as version');
+        
+        $view_para = array_add($this->view_para, 'laravel', $laravel);
+        $view_para = array_add($view_para, 'mysqlVersion', $mysqlVersion);
+
+        return view($this->view, $view_para);
+    }
+    
+}

+ 134 - 0
app/Http/Controllers/Admin/ProductController.php

@@ -0,0 +1,134 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Auth;
+use Request;
+use Validator;
+use App\Models\product;
+use App\Http\Requests\ProductRequest;
+
+class ProductController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.product.list';
+    protected $view_addupd = 'admin.product.addupd';
+
+    protected $menu_name = 'product';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    // 获取所属菜单选项
+    public function getBelongMenus()
+    {
+        $pro_sort1 = $this->menu_home->where('ename', 'pro')
+                                        ->first()
+                                        ->sort1;
+
+        $menus_sort1 = [$pro_sort1];
+
+        return $this->getSomeSecondMenus($menus_sort1);
+    }
+
+
+    /* 产品管理 */
+    // 页面展示
+    public function index()
+    {
+        $products = Product::where([])
+                            ->orderBy('sort')
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'products', $products);
+        $view_para = array_add($view_para, 'menu_home', $this->menu_home);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        $view_para = array_add($this->view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost(ProductRequest $request)
+    {
+        $image = Request::file('image');
+        if (!$image) {
+            return redirect()->back()->with('errors_image', '图片不可为空')->withInput();
+        }
+        $errors_image = $this->imageValidator($image);
+        if ($errors_image) {
+            return redirect()->back()->with('errors_image', $errors_image)->withInput();
+        }
+
+        $path = $this->imageUpload($this->image_name, $image, $this->image_path);
+
+        $data = Request::except(['_token', 'image']);
+        $data['image'] = $path;
+        $data['belong'] = implode(',', Request::input('belong'));
+        product::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $product = product::find($id);
+        if (!$product) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该课程');
+        }
+
+        $view_para = array_add($this->view_para, 'product', $product);
+        $view_para = array_add($view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($id, productRequest $request)
+    {
+        $product = product::find($id);
+        if (!$product) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该产品');
+        }
+
+        $image = Request::file('image');
+        if ($image) {
+            $errors_image = $this->imageValidator($image);
+            if ($errors_image) {
+                return redirect()->back()->with('errors_image', $errors_image)->withInput();
+            }
+
+            $path = $this->imageUpload($this->image_name, $image, $this->image_path);
+            $product->image = $path;
+        }
+
+        $product = Request::except(['_token', 'image']);
+        $product['belong'] = implode(',', Request::input('belong'));
+        product::where('id', $id)
+                ->update($product);
+
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        product::destroy($id);
+        
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+}

+ 120 - 0
app/Http/Controllers/Admin/RoleController.php

@@ -0,0 +1,120 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\Admin;
+use App\Models\AdminsRole;
+use App\Http\Requests\RoleRequest;
+
+class RoleController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.role.list';
+    protected $view_addupd = 'admin.role.addupd';
+
+    protected $menu_name = 'role';
+
+    
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    // 获取所属菜单选项
+    public function getBelongMenus()
+    {
+        return $this->menu->where('sort2', '<>', 0)
+                            ->where('sort3', '<>', 0)
+                            ->whereNotNull('href')
+                            ->orderBy('sort1')
+                            ->orderBy('sort2')
+                            ->orderBy('sort3')
+                            ->get();
+    }
+
+
+    /* 角色管理 */
+    // 页面展示
+    public function index()
+    {
+        $roles = AdminsRole::where([])
+                            ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'roles', $roles);
+        $view_para = array_add($view_para, 'menu', $this->menu);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        $view_para = array_add($this->view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function addPost(RoleRequest $request)
+    {
+        $data = Request::except('_token');
+        $data['menus_id'] = implode(',', Request::input('menus_id'));
+        AdminsRole::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $role = AdminsRole::find($id);
+        if (!$role) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该角色');
+        }
+        
+        $view_para = array_add($this->view_para, 'role', $role);
+        $view_para = array_add($view_para, 'menus', $this->getBelongMenus());
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost($id, RoleRequest $request)
+    {
+        if (1 == $id) {
+            return redirect()->route($this->menu_name)->with('error', '该角色不可编辑');
+        }
+
+        $role = AdminsRole::find($id);
+        if (!$role) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该角色');
+        }
+        
+        $role = Request::except('_token');
+        $role['menus_id'] = implode(',', Request::input('menus_id'));
+        AdminsRole::where('id', $id)
+                    ->update($role);
+
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        $if_del = Admin::where('rid', $id)
+                        ->count();
+
+        if ($if_del) {
+            return redirect()->route($this->menu_name)->with('error', '请先删除该角色下的管理员');
+        }
+
+        AdminsRole::destroy($id);
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+
+}

+ 139 - 0
app/Http/Controllers/Admin/UserController.php

@@ -0,0 +1,139 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Request;
+use App\Models\User;
+use App\Models\UsersProfile;
+use App\Http\Requests\MobileRequest;
+use App\Http\Requests\UserNameRequest;
+use App\Http\Requests\EmailAndRemarkRequest;
+
+class UserController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'admin.user.list';
+    protected $view_addupd = 'admin.user.addupd';
+    protected $view_pro = 'admin.user.pro';
+
+    protected $menu_name = 'user';
+
+
+    public function __construct()
+    {
+        parent::__construct($this->menu_name);
+    }
+
+
+    /* 会员管理 */
+    // 页面展示
+    public function index()
+    {
+        $users = User::where([])
+                        ->orderBy('created_at', 'desc')
+                        ->paginate(10);
+
+        $view_para = array_add($this->view_para, 'users', $users);
+
+        return view($this->view, $view_para);
+    }
+
+
+    /* 添加 */
+    // 页面展示
+    public function addView()
+    {
+        return view($this->view_addupd, $this->view_para);
+    }
+    // 表单处理
+    public function addPost(
+                                UserNameRequest $request,
+                                MobileRequest $request,
+                                EmailAndRemarkRequest $request
+                            )
+    {
+        // 生成不重复的id值,对外唯一标识用户
+        do {
+            $uid = str_random(128);
+            $exist_uid = User::where('uuid', $uid)->count();
+        } while($exist_uid);
+
+        $data = Request::all();
+        $data['uuid'] = $uid;
+        $data['password'] = bcrypt('888888');  // 设置会员默认密码:888888
+        User::create($data);
+
+        return redirect()->route($this->menu_name)->with('success', '添加成功');
+    }
+
+
+    /* 编辑 */
+    // 页面展示
+    public function updView($id)
+    {
+        $user = User::find($id);
+        if (!$user) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该会员');
+        }
+
+        $view_para = array_add($this->view_para, 'user', $user);
+
+        return view($this->view_addupd, $view_para);
+    }
+    // 表单处理
+    public function updPost(
+                                $id,
+                                MobileRequest $request,
+                                EmailAndRemarkRequest $request
+                            )
+    {
+        $user = User::find($id);
+        if (!$user) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该会员');
+        }
+        
+        $user->mobile = Request::input('mobile');
+        $user->email = Request::input('email');
+        $user->remark = Request::input('remark');
+        $user->save();
+
+        return redirect()->route($this->menu_name)->with('success', '编辑成功');
+    }
+
+
+    /* 密码重置 */
+    public function updPwd($id)
+    {
+        $user = User::find($id);
+        if (!$user) {
+            return redirect()->route($this->menu_name)->with('error', '找不到该会员');
+        }
+
+        $user->password = bcrypt('888888');
+        $user->save();
+
+        return redirect()->route($this->menu_name)->with('success', '密码重置成功');
+    }
+
+
+    /* 删除 */
+    public function del($id)
+    {
+        User::destroy($id);
+        
+        return redirect()->route($this->menu_name)->with('success', '删除成功');
+    }
+
+
+    /* 查看资料 */
+    public function proView($id)
+    {
+        $profile = UsersProfile::find($id);
+        $userName = User::find($id)->name;
+
+        $view_para = array_add($this->view_para, 'pro', $profile);
+        $view_para = array_add($view_para, 'userName', $userName);
+
+        return view($this->view_pro, $view_para);
+    }
+}

+ 66 - 0
app/Http/Controllers/Auth/AdminLoginController.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use Auth;
+use App\Http\Controllers\Auth\LoginBaseController;
+
+class AdminLoginController extends LoginBaseController
+{
+    /**
+     * 重写 Where to redirect users after login.
+     *
+     * @var string
+     */
+    protected $redirectTo = '/admin';
+
+    /**
+     * 重写 Create a new controller instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        $this->middleware('guest:admin')->except('logout');
+    }
+
+    /**
+     * 重写 Show the application's login form.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function showLoginForm()
+    {
+        return view('auth.admin_login');
+    }
+
+    /**
+     * 重写 Get the guard to be used during authentication.
+     *
+     * @return \Illuminate\Contracts\Auth\StatefulGuard
+     */
+    protected function guard()
+    {
+        return Auth::guard('admin');
+    }
+
+    /**
+     * 定义 操作认证数据库表名称
+     *
+     * @return string
+     */
+    public function usertable()
+    {
+        return TABLE_ADMINS;
+    }
+
+    /**
+     * 定义 注销后重定向路径
+     *
+     * @return string
+     */
+    public function redirectToLogout()
+    {
+        return '/admin/login';
+    }
+}

+ 32 - 0
app/Http/Controllers/Auth/ForgotPasswordController.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
+
+class ForgotPasswordController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller is responsible for handling password reset emails and
+    | includes a trait which assists in sending these notifications from
+    | your application to your users. Feel free to explore this trait.
+    |
+    */
+
+    use SendsPasswordResetEmails;
+
+    /**
+     * Create a new controller instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        $this->middleware('guest');
+    }
+}

+ 94 - 0
app/Http/Controllers/Auth/LoginBaseController.php

@@ -0,0 +1,94 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use DB;
+use Carbon\Carbon;
+use Illuminate\Http\Request;
+use App\Http\Controllers\Controller;
+use Illuminate\Foundation\Auth\AuthenticatesUsers;
+
+class LoginBaseController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Login Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller handles authenticating users for the application and
+    | redirecting them to your home screen. The controller uses a trait
+    | to conveniently provide its functionality to your applications.
+    |
+    */
+
+    use AuthenticatesUsers;
+
+    /**
+     * 重写 Validate the user login request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return void
+     */
+    public function validateLogin(Request $request)
+    {
+        $this->validate($request, [
+            $this->username() => 'required|string|max:25',
+            'password' => 'required|string|min:6|max:16',
+            'captcha' => 'required|captcha',
+        ]);
+    }
+
+    /**
+     * 重写 The user has been authenticated.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  mixed  $user
+     * @return mixed
+     */
+    protected function authenticated(Request $request, $user)
+    {
+        $time = Carbon::now();
+        DB::table($this->usertable())
+            ->where('name', $user->name)
+            ->update([
+                'last_time' => $time,
+            ]);
+    }
+
+    /**
+     * 重写 Get the login username to be used by the controller.
+     *
+     * @return string
+     */
+    public function username()
+    {
+        return 'name';
+    }
+
+    /**
+     * 重写 Log the user out of the application.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function logout(Request $request)
+    {
+        $this->guard()->logout();
+        return redirect($this->redirectToLogout());
+    }
+
+
+    /**
+     * 重写 Get the post register / login redirect path.
+     *
+     * @return string
+     */
+    public function redirectPath()
+    {
+        if (method_exists($this, 'redirectTo')) {
+            return $this->redirectTo();
+        }
+
+        return property_exists($this, 'redirectTo') ? $this->redirectTo : '/';
+    }
+}

+ 62 - 0
app/Http/Controllers/Auth/LoginController.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Models\Menu;
+use App\Models\Company;
+use App\Http\Controllers\Auth\LoginBaseController;
+
+class LoginController extends LoginBaseController
+{
+    /**
+     * 重写 Where to redirect users after login.
+     *
+     * @var string
+     */
+    protected $redirectTo = '/user';
+
+    /**
+     * 重写 Create a new controller instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        $this->middleware('guest')->except('logout');
+    }
+
+    /**
+     * 重写 Show the application's login form.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function showLoginForm()
+    {
+        $menu = New Menu();
+        $company = New Company();
+        return view('auth.login', [
+            'model_menu'  =>  $menu,
+            'model_company' =>  $company,
+        ]);
+    }    
+
+    /**
+     * 定义 操作认证数据库表名称
+     *
+     * @return string
+     */
+    public function usertable()
+    {
+        return TABLE_USERS;
+    }
+
+    /**
+     * 定义 注销后重定向路径
+     *
+     * @return string
+     */
+    public function redirectToLogout()
+    {
+        return '/';
+    }
+}

+ 109 - 0
app/Http/Controllers/Auth/RegisterController.php

@@ -0,0 +1,109 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use Request;
+use Carbon\Carbon;
+use App\Models\User;
+use App\Models\Menu;
+use App\Models\Company;
+use App\Http\Controllers\Controller;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Foundation\Auth\RegistersUsers;
+
+class RegisterController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Register Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller handles the registration of new users as well as their
+    | validation and creation. By default this controller uses a trait to
+    | provide this functionality without requiring any additional code.
+    |
+    */
+
+    use RegistersUsers;
+
+    /**
+     * Where to redirect users after registration.
+     *
+     * @var string
+     */
+    protected $redirectTo = '/user';
+
+    /**
+     * Create a new controller instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        $this->middleware('guest');
+    }
+
+    /**
+     * 重写 Show the application registration form.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function showRegistrationForm()
+    {
+        $menu = New Menu();
+        $company = New Company();
+        return view('auth.register', [
+            'model_menu'  =>  $menu,
+            'model_company' =>  $company,
+        ]);
+    }
+
+    /**
+     * Get a validator for an incoming registration request.
+     *
+     * @param  array  $data
+     * @return \Illuminate\Contracts\Validation\Validator
+     */
+    protected function validator(array $data)
+    {
+        $mobile = Request::input('mobile');
+        return Validator::make($data, [
+            'name' => 'required|string|max:25|unique:'.TABLE_USERS,
+            'password' => 'required|string|min:6|max:16|confirmed',
+            'mobile' => 'required|numeric|regex:/^1[3-9][0-9]{9}$/',
+            'captcha' => 'required|in:'.session('sms.'.$mobile.'.register'),
+        ], [], [
+            'captcha'   =>  '验证码'
+        ]);
+    }
+
+    /**
+     * Create a new user instance after a valid registration.
+     *
+     * @param  array  $data
+     * @return \App\User
+     */
+    protected function create(array $data)
+    {
+        /*
+         * 生成不重复的id值,对外唯一标识用户
+         * add by pjh 20180409
+         */
+        do {
+            $uid = str_random(128);
+            $exist_uid = User::where('uuid', $uid)->count();
+        } while($exist_uid);
+
+        $time = Carbon::now();
+        $mobile = Request::input('mobile');
+        session(['sms.'.$mobile.'.register' => '']);
+
+        return User::create([
+            'uuid' => $uid,
+            'name' => $data['name'],
+            'mobile' => $data['mobile'],
+            'password' => bcrypt($data['password']),
+            'last_time' => $time,
+        ]);
+    }
+}

+ 39 - 0
app/Http/Controllers/Auth/ResetPasswordController.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Foundation\Auth\ResetsPasswords;
+
+class ResetPasswordController extends Controller
+{
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Controller
+    |--------------------------------------------------------------------------
+    |
+    | This controller is responsible for handling password reset requests
+    | and uses a simple trait to include this behavior. You're free to
+    | explore this trait and override any methods you wish to tweak.
+    |
+    */
+
+    use ResetsPasswords;
+
+    /**
+     * Where to redirect users after resetting their password.
+     *
+     * @var string
+     */
+    protected $redirectTo = '/home';
+
+    /**
+     * Create a new controller instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        $this->middleware('guest');
+    }
+}

+ 15 - 0
app/Http/Controllers/Controller.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Request;
+use Validator;
+use Illuminate\Foundation\Bus\DispatchesJobs;
+use Illuminate\Routing\Controller as BaseController;
+use Illuminate\Foundation\Validation\ValidatesRequests;
+use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
+
+class Controller extends BaseController
+{
+    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
+}

+ 31 - 0
app/Http/Controllers/Home/AboutUsController.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use App\Models\Company;
+use App\Http\Controllers\Home\BaseController;
+
+class AboutUsController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.aboutUs';
+    
+
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+
+    // 关于我们页面
+    public function showAboutUs()
+    {
+    	$menu = $this->menu->where('ename', 'about')
+                            ->first();
+
+        $view_para = array_add($this->view_para, 'menu', $menu);
+        
+        return view($this->view, $view_para);
+    }
+    
+}

+ 80 - 0
app/Http/Controllers/Home/ActiveController.php

@@ -0,0 +1,80 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use Auth;
+use App\Models\User;
+use App\Models\Active;
+use App\Models\ActivesUser;
+use App\Http\Controllers\Home\BaseController;
+
+class ActiveController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.active';
+    protected $view_det = 'home.active_detail';
+
+
+    public function __construct(Active $active, ActivesUser $activesUser)
+    {
+        $this->active = $active;
+        $this->activesUser = $activesUser;
+        parent::__construct();
+    }
+
+
+    // 活动报名列表页面
+    public function showActive()
+    {
+        return $this->showSecondMenuView('act', $this->view, $this->active, $this->activesUser);
+    }
+
+
+    public function showActiveThirdMenu($view, $href1, $href2, $id)
+    {
+        $active = Active::findOrFail($id);
+        return $this->showThirdMenuView($view, $href1, $href2, $active, $this->activesUser);
+    }
+
+    // 活动详情页面
+    public function showActiveDetail($href1, $href2, $id)
+    {
+        return $this->showActiveThirdMenu($this->view_det, $href1, $href2, $id);
+    }
+
+
+    // 活动报名页面
+    public function activeRegister($id)
+    {
+        if ( !Auth::check() ) {
+            return redirect()->route('login');
+        }
+
+        $uid = Auth::user()->id;
+        $if_reg = ActivesUser::where('aid', $id)
+                                ->where('uid', $uid)
+                                ->count();
+        if ($if_reg) {
+            return redirect()->back()->with('error', '请勿重复报名!');
+        }
+
+        $active = Active::find($id);
+        if (!$active) {
+            return redirect()->back()->with('error', '找不到该活动');
+        }
+        
+        $active_user_num = ActivesUser::where('aid', $id)
+                                        ->count();
+
+        if ( $active->user_num && ($active_user_num == $active->user_num) ) {
+            return redirect()->back()->with('error', '非常抱歉!报名人数已满!');
+        }
+
+        ActivesUser::create([
+                'aid'   =>  $id,
+                'uid'   =>  $uid
+            ]);
+        return redirect()->back()->with('success', '恭喜您报名成功!');
+    }
+
+}

+ 87 - 0
app/Http/Controllers/Home/BaseController.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use Request;
+use App\Models\Menu;
+use App\Models\Company;
+use App\Http\Controllers\Controller;
+
+class BaseController extends Controller
+{
+    public function __construct()
+    {
+        $this->menu = new Menu();
+        $this->company = new Company();
+
+        $this->view_para = [
+            'model_menu'  =>  $this->menu,
+            'model_company'  =>  $this->company,
+        ];
+    }
+
+    public function showSecondMenuView($menu_ename, $view, $model=null, $model2=null)
+    {
+        $path = '/'.Request::path();
+
+        $menu_up = Menu::where('ename', $menu_ename)
+                            ->first();
+
+        if ( $menu_up->href == $path ) {
+            $menu = Menu::where('sort1', $menu_up->sort1)
+                        ->where('sort2', 1)
+                        ->first();
+        }
+        else {
+            $menu = Menu::where('href', $path)
+                        ->first();
+        }
+        
+        $view_para = array_add($this->view_para, 'menu', $menu);
+        $view_para = array_add($view_para, 'model', $model);
+        $view_para = array_add($view_para, 'model2', $model2);
+        $view_para = array_add($view_para, 'menu_up', $menu_up);
+
+        return view($view, $view_para);
+    }
+
+    public function showThirdMenuView($view, $href1, $href2, $model_data, $model=null)
+    {
+        $menu_href = '/'.$href1.'/'.$href2;
+        
+        if ( '/user/active' == $menu_href ) {
+            $menu_up = Menu::where('ename', 'act')
+                            ->first();
+            
+            $menu = (object)['img' => $menu_up->img, 'name' => '我的活动', 'href' => route('user_active')];
+        }
+        else if ( '/user/course' == $menu_href ) {
+            $menu_up = Menu::where('ename', 'cor')
+                            ->first();
+            
+            $menu = (object)['img' => $menu_up->img, 'name' => '我的课程', 'href' => route('user_course')];
+        }
+        else if ('/index/course' == $menu_href) {
+            $menu = Menu::where('ename', 'cor')
+                            ->first();
+
+            $menu_up = (object)['name' => '首页', 'href' => '/index'];
+        }
+        else {
+            $menu = Menu::where('href', $menu_href)
+                        ->first();
+
+            $menu_up = Menu::where('sort1', $menu->sort1)
+                            ->where('sort2', 0)
+                            ->first();
+        }
+
+        $view_para = array_add($this->view_para, 'menu', $menu);
+        $view_para = array_add($view_para, 'menu_up', $menu_up);
+        $view_para = array_add($view_para, 'model_data', $model_data);
+        $view_para = array_add($view_para, 'model', $model);
+
+        return view($view, $view_para);
+    }
+
+}

+ 74 - 0
app/Http/Controllers/Home/CourseController.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use Auth;
+use App\Models\Course;
+use App\Models\Article;
+use App\Models\CoursesUser;
+use App\Http\Controllers\Home\BaseController;
+
+class CourseController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.course';
+    protected $view_det = 'home.course_detail';
+    
+
+    public function __construct(Course $course, Article $article)
+    {
+        $this->course = $course;
+        $this->article = $article;
+        parent::__construct();
+    }
+
+
+    // 创享课程页面
+    public function showCourse()
+    {
+        return $this->showSecondMenuView('cor', $this->view, $this->course, $this->article);
+    }
+
+    // 课程详情页面
+    public function showCourseDetail($href1, $href2, $id)
+    {
+        $course = Course::find($id);
+        if (!$course) {
+            return redirect()->back()->with('error', '找不到该课程');
+        }
+
+        return $this->showThirdMenuView($this->view_det, $href1, $href2, $course);
+    }
+
+
+    // 课程报名页面
+    public function courseRegister($id)
+    {
+        if ( !Auth::check() ) {
+            return redirect()->route('login');
+        }
+
+        $uid = Auth::user()->id;
+        $if_reg = CoursesUser::where('cid', $id)
+                                ->where('uid', $uid)
+                                ->count();
+        if ($if_reg) {
+            return redirect()->back()->with('error', '请勿重复报名!');
+        }
+
+        $course = Course::findOrFail($id);
+        $course_user_num = CoursesUser::where('cid', $id)
+                                        ->count();
+
+        if ( $course->user_num && ($course_user_num == $course->user_num) ) {
+            return redirect()->back()->with('error', '非常抱歉!报名人数已满!');
+        }
+
+        CoursesUser::create([
+                'cid'   =>  $id,
+                'uid'   =>  $uid
+            ]);
+        return redirect()->back()->with('success', '恭喜您报名成功!');
+    }
+
+}

+ 44 - 0
app/Http/Controllers/Home/IndexController.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use App\Models\Course;
+use App\Models\Article;
+use App\Models\AdvertisesType;
+use App\Http\Controllers\Home\BaseController;
+
+class IndexController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.index';
+    
+
+    public function __construct(Article $article)
+    {
+        $this->article = $article;
+        parent::__construct();
+    }
+    
+
+    // 首页
+    public function showIndex()
+    {
+        $banners = AdvertisesType::find(
+                        AdvertisesType::where('ename', 'banner')
+                                        ->first()
+                                        ->id
+                    )->advertises;
+
+        $courses = Course::where([])
+                        ->orderBy('created_at', 'desc')
+                        ->take(10)
+                        ->get();
+        
+        $view_para = array_add($this->view_para, 'banners', $banners);
+        $view_para = array_add($view_para, 'courses', $courses);
+        $view_para = array_add($view_para, 'model_article', $this->article);
+
+        return view($this->view, $view_para);
+    }
+
+}

+ 39 - 0
app/Http/Controllers/Home/InformationController.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use App\Models\Article;
+use App\Http\Controllers\Home\BaseController;
+
+class InformationController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.information';
+    protected $view_art = 'home.article';
+    
+
+    public function __construct(Article $article)
+    {
+        $this->article = $article;
+        parent::__construct();
+    }
+
+
+    // 新闻资讯页面
+    public function showInformation()
+    {
+        return $this->showSecondMenuView('info', $this->view, $this->article);
+    }
+
+    // 文章详情页面
+    public function showArticle($href1, $href2, $id)
+    {
+        $article = Article::find($id);
+        if (!$article) {
+            return redirect()->back()->with('error', '找不到该文章');
+        }
+
+        return $this->showThirdMenuView($this->view_art, $href1, $href2, $article);
+    }
+
+}

+ 27 - 0
app/Http/Controllers/Home/ProductController.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use App\Models\Product;
+use App\Http\Controllers\Home\BaseController;
+
+class ProductController extends BaseController
+{
+    /* 视图文件相对路径 */
+    protected $view = 'home.product';
+    
+
+    public function __construct(Product $product)
+    {
+        $this->product = $product;
+        parent::__construct();
+    }
+
+
+    // 产品服务页面
+    public function showProduct()
+    {
+        return $this->showSecondMenuView('pro', $this->view, $this->product);
+    }
+
+}

+ 293 - 0
app/Http/Controllers/Home/UserController.php

@@ -0,0 +1,293 @@
+<?php
+
+namespace App\Http\Controllers\Home;
+
+use Hash;
+use Auth;
+use Config;
+use Request;
+use Validator;
+use App\Models\User;
+use App\Models\Active;
+use App\Models\Course;
+use App\Libs\Aliyun\Sms;
+use App\Models\ActivesUser;
+use App\Models\UsersProfile;
+use App\Http\Requests\MobileRequest;
+use App\Http\Requests\PasswordRequest;
+use App\Http\Requests\UserProfileRequest;
+use App\Http\Controllers\Home\BaseController;
+
+class UserController extends BaseController
+{
+	/* 视图文件相对路径 */
+    protected $view = 'home.user.index';
+    protected $view_act = 'home.user.active';
+    protected $view_actSco = 'home.user.active_score';
+    protected $view_cor = 'home.user.course';
+    protected $view_pro = 'home.user.profile';
+    protected $view_pwd = 'home.user.password';
+    protected $view_secur = 'home.user.security';
+    protected $view_mobile = 'home.user.mobile';
+    protected $view_email = 'home.user.email';
+    protected $view_forget = 'auth.forget';
+
+    protected $education = [
+        '初中以下', '初中', '中专', '高中', '大专',
+        '本科', '研究生', '硕士', '博士', '博士后'
+    ];
+
+    public function __construct(ActivesUser $activesUser)
+    {
+        $this->activesUser = $activesUser;
+        parent::__construct();
+    }
+
+
+    public function getUser()
+    {
+        $user = User::find(Auth::user()->id);
+        $user->mobile = $this->encryptMobile($user->mobile);
+
+        return $user;
+    }
+
+
+    // 会员中心首页
+    public function index()
+    {
+        $view_para = array_add($this->view_para, 'user', $this->getUser());
+
+        return view($this->view, $view_para);
+    }
+
+
+    // 参与活动
+    public function act()
+    {
+        $actives = User::find(Auth::user()->id)->actives;
+  
+        $view_para = array_add($this->view_para, 'actives', $actives);
+        $view_para = array_add($view_para, 'model_activesUser', $this->activesUser);
+
+        return view($this->view_act, $view_para);
+    }
+
+
+    // 参加课程
+    public function cor()
+    {
+        $courses = User::find(Auth::user()->id)->courses;
+  
+        $view_para = array_add($this->view_para, 'courses', $courses);
+
+        return view($this->view_cor, $view_para);
+    }
+
+
+    /* 更改资料 */
+    // 页面展示
+    public function proView()
+    {
+        $profile = UsersProfile::where('id', Auth::user()->id)->first();
+
+        $view_para = array_add($this->view_para, 'pro', $profile);
+        $view_para = array_add($view_para, 'education', $this->education);
+
+        return view($this->view_pro, $view_para);
+    }
+    // 表单处理
+    public function proPost(UserProfileRequest $request)
+    {
+        UsersProfile::updateOrCreate(
+            ['id' => Auth::user()->id], Request::except('_token')
+        );
+
+        return redirect()->route('user_profile')->with('success', '更改资料成功');
+    }
+
+
+    /* 安全中心首页 */
+    public function securityView()
+    {
+        $view_para = array_add($this->view_para, 'user', $this->getUser());
+
+        return view($this->view_secur, $view_para);
+    }
+
+
+    /* 修改密码 */
+    // 页面展示
+    public function pwdView()
+    {
+        return view($this->view_pwd, $this->view_para);
+    }
+    // 表单处理
+    public function pwdPost(PasswordRequest $request)
+    {
+        $user = User::find(Auth::user()->id);
+
+        if ( !Hash::check(Request::input('old_password'), $user->password) ) {
+            return redirect()->back()
+                    ->withErrors(['old_password' => '原密码错误'])
+                    ->withInput();
+        }
+
+        $user->password = bcrypt(Request::input('password'));
+        $user->save();
+
+        return redirect()->route('user_secur')->with('success', '修改密码成功');
+    }
+
+
+    /* 修改手机 */
+    // 页面展示
+    public function mobileView()
+    {
+        $view_para = array_add($this->view_para, 'user', $this->getUser());
+
+        return view($this->view_mobile, $view_para);
+    }
+    // 表单处理
+    public function mobilePost(MobileRequest $request)
+    {
+        $validator = Validator::make(
+            Request::all(), [
+                'captcha' => 'required|in:'.session('sms.'.Request::input('mobile').'.mobile')
+            ], [], [
+                'captcha'   =>  '验证码'
+            ]
+        );
+        if ($validator->fails()) {
+            return redirect()->back()
+                    ->withErrors($validator)
+                    ->withInput();
+        }
+
+        User::where('id', Auth::user()->id)
+            ->update(['mobile', Request::input('mobile')]);
+
+        return redirect()->route('user_secur')->with('success', '修改手机成功');
+    }
+
+
+    /* 修改邮箱 */
+    // 页面展示
+    public function emailView()
+    {
+        $view_para = array_add($this->view_para, 'user', $this->getUser());
+
+        return view($this->view_email, $view_para);
+    }
+    // 表单处理
+    public function emailPost()
+    {
+        $validator = Validator::make(
+            Request::all(), [
+                'email'     =>  'email'
+            ]
+        );
+        if ($validator->fails()) {
+            return redirect()->back()
+                    ->withErrors($validator)
+                    ->withInput();
+        }
+
+        User::where('id', Auth::user()->id)
+            ->update(['email' => Request::input('email')]);
+
+        return redirect()->route('user_secur')->with('success', '修改邮箱成功');
+    }
+
+
+    /* 忘记密码 */
+    // 页面展示
+    public function forgetView()
+    {
+        return view($this->view_forget, $this->view_para);
+    }
+    // 表单处理
+    public function forgetPost(PasswordRequest $request)
+    {
+        $name = Request::input('name');
+        $user = User::where('name', $name)->first();
+        
+        $validator = Validator::make(
+            Request::all(), [
+                'captcha' => 'required|in:'.session('sms.'.$user->mobile.'.password')
+            ], [], [
+                'captcha'   =>  '验证码'
+            ]
+        );
+        if ($validator->fails()) {
+            return redirect()->back()
+                    ->withErrors($validator)
+                    ->withInput();
+        }
+
+        $user->password = bcrypt(Request::input('password'));
+        $user->save();
+        return redirect()->route('login');
+    }
+
+
+
+    // 给手机号码加密
+    public function encryptMobile($mobile)
+    {
+        $encryptMb = substr_replace($mobile, '****', 3, 4);
+        return $encryptMb;
+    }
+
+
+    // 根据手机号码或会员账号发送短信
+    public function sendSmsByMobileOrName()
+    {
+        $mobile = Request::input('mobile');
+        $name = Request::input('name');
+        $templete = Request::input('templete');
+        
+        if (!$mobile && !$name) {
+            return response()
+                    ->json(['error' => '请输入手机号码或会员账号']);
+        }
+        if ($mobile) {
+            if (!preg_match('/^1[3-9][0-9]{9}$/', $mobile)) {
+                return response()
+                        ->json(['error' => '请输入正确的新手机号码']);
+            }
+        }
+        if ($name) {
+            $user = User::where('name', $name)->first();
+            if (!$user) {
+                return response()
+                        ->json(['error' => '会员账号不存在']);
+            }
+            $mobile = $user->mobile;
+        }
+        
+        $sms = new Sms();
+        $smsCode = rand(100000, 999999);
+        $templeteCode = Config::get('sms.templeteCode.'.$templete);
+        $response = $sms->sendSms($mobile, $templeteCode, $smsCode);
+        if ('OK' == $response->Code) {
+            session(['sms.'.$mobile.'.'.$templete => $smsCode]);
+            return response()
+                        ->json(['result' => 'success']);
+        }
+        else {
+            return response()
+                        ->json(['result' => '短信'.$response->Message]);
+        }
+    }
+
+    // 根据会员账号返回手机号码
+    public function getMobileFromName()
+    {
+        $name = Request::input('name');
+        $user = User::where('name', $name)->firstOrFail();
+        $user->mobile = $this->encryptMobile($user->mobile);
+        return $user->mobile;
+    }
+
+}

+ 61 - 0
app/Http/Kernel.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http;
+
+use Illuminate\Foundation\Http\Kernel as HttpKernel;
+
+class Kernel extends HttpKernel
+{
+    /**
+     * The application's global HTTP middleware stack.
+     *
+     * These middleware are run during every request to your application.
+     *
+     * @var array
+     */
+    protected $middleware = [
+        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
+        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
+        \App\Http\Middleware\TrimStrings::class,
+        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
+    ];
+
+    /**
+     * The application's route middleware groups.
+     *
+     * @var array
+     */
+    protected $middlewareGroups = [
+        'web' => [
+            \App\Http\Middleware\EncryptCookies::class,
+            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+            \Illuminate\Session\Middleware\StartSession::class,
+            // \Illuminate\Session\Middleware\AuthenticateSession::class,
+            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+            \App\Http\Middleware\VerifyCsrfToken::class,
+            \Illuminate\Routing\Middleware\SubstituteBindings::class,
+        ],
+
+        'api' => [
+            'throttle:60,1',
+            'bindings',
+        ],
+    ];
+
+    /**
+     * The application's route middleware.
+     *
+     * These middleware may be assigned to groups or used individually.
+     *
+     * @var array
+     */
+    protected $routeMiddleware = [
+        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
+        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
+        'can' => \Illuminate\Auth\Middleware\Authorize::class,
+        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
+        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+        'role' => \App\Http\Middleware\CheckAdminsRole::class,
+    ];
+}

+ 84 - 0
app/Http/Middleware/CheckAdminsRole.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Auth;
+use Closure;
+use App\Models\MenusAd;
+use App\Models\AdminsRole;
+
+class CheckAdminsRole
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $rid = Auth::guard('admin')->user()->rid;
+        $menus_id = AdminsRole::find($rid)->menus_id;
+
+        $req_href = '/'.$request->path();
+        $req_menu = MenusAd::where('href', $req_href)
+                            ->first();
+
+        // 超级管理员
+        if (!$menus_id[0]) {
+            if ($req_menu && !$req_menu->ename) {
+                // 访问一级菜单
+                $resp_menu = MenusAd::where('sort1', $req_menu->sort1)
+                                    ->whereNotNull('ename')
+                                    ->whereNotNull('href')
+                                    ->orderBy('sort2')
+                                    ->orderBy('sort3')
+                                    ->first();
+                return redirect($resp_menu->href);
+            }
+            else {
+                // 访问非一级菜单页面
+                return $next($request);
+            }
+        }
+        else {
+            if ($req_menu && !$req_menu->ename) {
+                // 访问一级菜单
+                $resp_menu = MenusAd::where('href', 'like', $req_menu->href.'%')
+                                ->whereIn('id', $menus_id)
+                                ->orderBy('sort2')
+                                ->orderBy('sort3')
+                                ->first();
+                if ($resp_menu) {
+                    return redirect($resp_menu->href);
+                }
+                else {
+                    return redirect()->back()->with('error', '无权访问');
+                }
+            }
+            else {
+                if ($req_menu) {
+                    // 访问三级菜单
+                    $if_in = in_array($req_menu->id, $menus_id);
+                }
+                else {
+                    // 访问非菜单页面
+                    $href_arr = explode('/', $request->path());
+                    $find_href = '/'.$href_arr[0].'/'.$href_arr[1].'/'.$href_arr[2];
+                    
+                    $if_in = MenusAd::where('href', 'like', $find_href.'%')
+                                        ->whereIn('id', $menus_id)
+                                        ->count();
+                }
+
+                if ($if_in) {
+                    return $next($request);
+                }
+                else {
+                    return redirect()->back()->with('error', '无权访问');
+                }
+            }
+        }
+    }
+}

+ 17 - 0
app/Http/Middleware/EncryptCookies.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
+
+class EncryptCookies extends BaseEncrypter
+{
+    /**
+     * The names of the cookies that should not be encrypted.
+     *
+     * @var array
+     */
+    protected $except = [
+        //
+    ];
+}

+ 27 - 0
app/Http/Middleware/RedirectIfAuthenticated.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Support\Facades\Auth;
+
+class RedirectIfAuthenticated
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @param  string|null  $guard
+     * @return mixed
+     */
+    public function handle($request, Closure $next, $guard = null)
+    {
+        /*if (Auth::guard($guard)->check()) {
+            $path = $guard ? 'admin' : 'user';
+            return redirect($path);
+        }*/
+
+        return $next($request);
+    }
+}

+ 18 - 0
app/Http/Middleware/TrimStrings.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
+
+class TrimStrings extends BaseTrimmer
+{
+    /**
+     * The names of the attributes that should not be trimmed.
+     *
+     * @var array
+     */
+    protected $except = [
+        'password',
+        'password_confirmation',
+    ];
+}

+ 17 - 0
app/Http/Middleware/VerifyCsrfToken.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
+
+class VerifyCsrfToken extends BaseVerifier
+{
+    /**
+     * The URIs that should be excluded from CSRF verification.
+     *
+     * @var array
+     */
+    protected $except = [
+        //
+    ];
+}

+ 68 - 0
app/Http/Requests/ActiveRequest.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Carbon\Carbon;
+use Illuminate\Foundation\Http\FormRequest;
+
+class ActiveRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 持续性活动,开始结束时间为空; 比赛,开始结束时间必填
+        if (!Request::input('start_time') && !Request::input('end_time')) {
+            $if_sTime = 'nullable';
+            $if_eTime = 'nullable';
+        }
+        else {
+            if (Request::input('start_time')) {
+                // 开始时间必须大于当前时间
+                $if_sTime = 'required|after:'.Carbon::now();
+
+                // 结束时间必须大于开始时间
+                $start_time = date_create(Request::input('start_time'));
+                $start_time = date_format($start_time, 'Y/m/d H:i:s');
+                $if_eTime = 'required|after:'.$start_time;
+            }
+            else {
+                $if_sTime = 'required';
+                $if_eTime = 'required';
+            }
+        }
+
+        return [
+            'name'  => 'required|string|max:50',
+            'start_time'  =>  $if_sTime,
+            'end_time'    =>  $if_eTime,
+            'user_num'  =>  'nullable|integer|min:1',
+            'address'   =>  'required|max:255',
+            'text'   =>  'required'
+        ];
+    }
+
+    public function messages()
+    {
+        return [
+            'start_time.after'   =>      '必须大于当前时间',
+            'end_time.after'     =>      '必须大于开始时间',
+            'start_time.required'   =>   '开始时间和结束时间必须同时填写或不填',
+            'end_time.required'  =>      '开始时间和结束时间必须同时填写或不填',
+        ];
+    }
+}

+ 32 - 0
app/Http/Requests/ActiveThemeRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ActiveThemeRequest extends FormRequest
+{
+    protected $table = 'actives_themes';
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'name' => 'required|string|max:25|unique:'.$this->table
+        ];
+    }
+}

+ 32 - 0
app/Http/Requests/AdminNameRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class AdminNameRequest extends FormRequest
+{
+    protected $table = TABLE_ADMINS;
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'name'  =>  'required|string|max:25|unique:'.$this->table
+        ];
+    }
+}

+ 54 - 0
app/Http/Requests/AdvertiseRequest.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use App\Models\AdvertisesType;
+use Illuminate\Foundation\Http\FormRequest;
+
+class AdvertiseRequest extends FormRequest
+{
+    protected $table = 'advertises';
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $id = Request::route('id');
+        $tpid = Request::route('tpid');
+        $advType = AdvertisesType::find($tpid);
+
+        if ($id) {
+            $sort_val = 'required|unique:'.$this->table.',sort,'.$id.',id,tpid,'.$tpid;
+        }
+        else {
+            $sort_val = 'required|unique:'.$this->table.',sort,null,null,tpid,'.$tpid;
+        }
+
+        if ($advType->width && $advType->height) {
+            $image_val = 'dimensions:width='.$advType->width.',height='.$advType->height;
+        }
+        else {
+            $image_val = '';
+        }
+
+        return [
+            'name'  =>  'required|max:50',
+            'sort'  =>  $sort_val,
+            'image' =>  $image_val,
+            'href'  =>  'nullable|max:255',
+        ];
+    }
+}

+ 34 - 0
app/Http/Requests/ArticleRequest.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ArticleRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'title' =>  'required|max:50',
+            'txt'   =>  'required|max:255',
+            'belong'     =>  'required|max:50',
+            'text'       =>  'required',
+            'keywords'   =>  'required|max:255'
+        ];
+    }
+}

+ 43 - 0
app/Http/Requests/CompanyRequest.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use App\Models\Company;
+use Illuminate\Foundation\Http\FormRequest;
+
+class CompanyRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $id = Request::route('id');
+        $company = Company::find($id);
+
+        if ($company->width && $company->height) {
+            $image_val = 'dimensions:width='.$company->width.',height='.$company->height;
+        }
+        else {
+            $image_val = '';
+        }
+
+        return [
+            'value' =>  'required|max:50',
+            'image' =>  $image_val
+        ];
+    }
+}

+ 69 - 0
app/Http/Requests/CourseRequest.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Carbon\Carbon;
+use Illuminate\Foundation\Http\FormRequest;
+
+class CourseRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 持续性课程,开始结束日期为空
+        if (!Request::input('start_date') && !Request::input('end_date')) {
+            $if_sDate = 'nullable';
+            $if_eDate = 'nullable';
+        }
+        else {
+            if (Request::input('start_date')) {
+                // 开始日期必须大于当前日期
+                $if_sDate = 'required|after:'.Carbon::now();
+
+                // 结束日期必须大于开始日期
+                $start_date = date_create(Request::input('start_date'));
+                $start_date = date_format($start_date, 'Y/m/d');
+                $if_eDate = 'required|after:'.$start_date;
+            }
+            else {
+                $if_sDate = 'required';
+                $if_eDate = 'required';
+            }
+        }
+
+        return [
+            'name'  => 'required|string|max:50',
+            'start_date'    =>  $if_sDate,
+            'end_date'      =>  $if_eDate,
+            'keywords'      =>  'required|string|max:255', 
+            'description'   =>  'required|string|max:255',
+            'belong'    =>  'required|max:50',
+            'text'      =>  'required'
+        ];
+    }
+
+    public function messages()
+    {
+        return [
+            'start_date.after'   =>      '必须大于当前日期',
+            'end_date.after'     =>      '必须大于开始日期',
+            'start_date.required'   =>   '开始日期和结束日期必须同时填写或不填',
+            'end_date.required'  =>      '开始日期和结束日期必须同时填写或不填'
+        ];
+    }
+}

+ 31 - 0
app/Http/Requests/EmailAndRemarkRequest.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class EmailAndRemarkRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'email'     =>  'nullable|email',
+            'remark'    =>  'max:50'
+        ];
+    }
+}

+ 31 - 0
app/Http/Requests/MobileRequest.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Illuminate\Foundation\Http\FormRequest;
+
+class MobileRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'mobile'    =>  'required|numeric|regex:/^1[3-9][0-9]{9}$/'
+        ];
+    }
+}

+ 34 - 0
app/Http/Requests/PasswordRequest.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Auth;
+use Request;
+use Illuminate\Foundation\Http\FormRequest;
+
+class PasswordRequest extends FormRequest
+{
+    protected $table = TABLE_ADMINS;
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'password' => 'required|string|min:6|max:16|confirmed',
+        ];
+    }
+}

+ 35 - 0
app/Http/Requests/ProductRequest.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Illuminate\Foundation\Http\FormRequest;
+
+class ProductRequest extends FormRequest
+{
+    protected $table = 'products';
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'name'      => 'required|string|max:50',
+            'belong'    =>  'required|max:50',
+            'href'      =>  'nullable|max:100',
+            'txt'       =>  'required'
+        ];
+    }
+}

+ 37 - 0
app/Http/Requests/RoleRequest.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Illuminate\Foundation\Http\FormRequest;
+
+class RoleRequest extends FormRequest
+{
+    protected $table = 'admins_roles';
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $id = Request::route('id');
+
+        return [
+            'name' =>  'required|max:25|unique:'.$this->table.',name,'.$id.',id',
+            'description'   =>  'required|max:255',
+            'menus_id'     =>  'required|max:50'
+        ];
+    }
+}

+ 32 - 0
app/Http/Requests/UserNameRequest.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class UserNameRequest extends FormRequest
+{
+    protected $table = TABLE_USERS;
+
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'name'  =>  'required|string|max:25|unique:'.$this->table
+        ];
+    }
+}

+ 36 - 0
app/Http/Requests/UserProfileRequest.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Request;
+use Illuminate\Foundation\Http\FormRequest;
+
+class UserProfileRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'sex' => 'max:2',
+            'birthday'    =>  'date|nullable',
+            'residence'     =>  'max:50',
+            'education'     =>  'max:10',
+            'school'    =>  'max:50',
+            'class'     =>  'max:20'
+        ];
+    }
+}

+ 76 - 0
app/Libs/Aliyun/Api/Sms/Request/V20170525/QueryInterSmsIsoInfoRequest.php

@@ -0,0 +1,76 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+namespace Aliyun\Api\Sms\Request\V20170525;
+
+use Aliyun\Core\RpcAcsRequest;
+
+class QueryInterSmsIsoInfoRequest extends RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dysmsapi", "2017-05-25", "QueryInterSmsIsoInfo");
+		$this->setMethod("POST");
+	}
+
+	private  $resourceOwnerAccount;
+
+	private  $countryName;
+
+	private  $resourceOwnerId;
+
+	private  $ownerId;
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getCountryName() {
+		return $this->countryName;
+	}
+
+	public function setCountryName($countryName) {
+		$this->countryName = $countryName;
+		$this->queryParameters["CountryName"]=$countryName;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+	
+}

+ 103 - 0
app/Libs/Aliyun/Api/Sms/Request/V20170525/QuerySendDetailsRequest.php

@@ -0,0 +1,103 @@
+<?php
+
+namespace Aliyun\Api\Sms\Request\V20170525;
+
+use Aliyun\Core\RpcAcsRequest;
+
+class QuerySendDetailsRequest extends RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dysmsapi", "2017-05-25", "QuerySendDetails");
+		$this->setMethod("POST");
+	}
+
+	private  $sendDate;
+
+	private  $pageSize;
+
+	private  $phoneNumber;
+
+	private  $resourceOwnerAccount;
+
+	private  $currentPage;
+
+	private  $bizId;
+
+	private  $resourceOwnerId;
+
+	private  $ownerId;
+
+	public function getSendDate() {
+		return $this->sendDate;
+	}
+
+	public function setSendDate($sendDate) {
+		$this->sendDate = $sendDate;
+		$this->queryParameters["SendDate"]=$sendDate;
+	}
+
+	public function getPageSize() {
+		return $this->pageSize;
+	}
+
+	public function setPageSize($pageSize) {
+		$this->pageSize = $pageSize;
+		$this->queryParameters["PageSize"]=$pageSize;
+	}
+
+	public function getPhoneNumber() {
+		return $this->phoneNumber;
+	}
+
+	public function setPhoneNumber($phoneNumber) {
+		$this->phoneNumber = $phoneNumber;
+		$this->queryParameters["PhoneNumber"]=$phoneNumber;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getCurrentPage() {
+		return $this->currentPage;
+	}
+
+	public function setCurrentPage($currentPage) {
+		$this->currentPage = $currentPage;
+		$this->queryParameters["CurrentPage"]=$currentPage;
+	}
+
+	public function getBizId() {
+		return $this->bizId;
+	}
+
+	public function setBizId($bizId) {
+		$this->bizId = $bizId;
+		$this->queryParameters["BizId"]=$bizId;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+	
+}

+ 121 - 0
app/Libs/Aliyun/Api/Sms/Request/V20170525/SendBatchSmsRequest.php

@@ -0,0 +1,121 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+namespace Aliyun\Api\Sms\Request\V20170525;
+
+use Aliyun\Core\RpcAcsRequest;
+
+class SendBatchSmsRequest extends RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dysmsapi", "2017-05-25", "SendBatchSms");
+		$this->setMethod("POST");
+	}
+
+	private  $templateCode;
+
+	private  $templateParamJson;
+
+	private  $resourceOwnerAccount;
+
+	private  $smsUpExtendCodeJson;
+
+	private  $resourceOwnerId;
+
+	private  $signNameJson;
+
+	private  $ownerId;
+
+	private  $phoneNumberJson;
+
+	public function getTemplateCode() {
+		return $this->templateCode;
+	}
+
+	public function setTemplateCode($templateCode) {
+		$this->templateCode = $templateCode;
+		$this->queryParameters["TemplateCode"]=$templateCode;
+	}
+
+	public function getTemplateParamJson() {
+		return $this->templateParamJson;
+	}
+
+	public function setTemplateParamJson($templateParamJson) {
+		$this->templateParamJson = $templateParamJson;
+		$this->queryParameters["TemplateParamJson"]=$templateParamJson;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getSmsUpExtendCodeJson() {
+		return $this->smsUpExtendCodeJson;
+	}
+
+	public function setSmsUpExtendCodeJson($smsUpExtendCodeJson) {
+		$this->smsUpExtendCodeJson = $smsUpExtendCodeJson;
+		$this->queryParameters["SmsUpExtendCodeJson"]=$smsUpExtendCodeJson;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getSignNameJson() {
+		return $this->signNameJson;
+	}
+
+	public function setSignNameJson($signNameJson) {
+		$this->signNameJson = $signNameJson;
+		$this->queryParameters["SignNameJson"]=$signNameJson;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getPhoneNumberJson() {
+		return $this->phoneNumberJson;
+	}
+
+	public function setPhoneNumberJson($phoneNumberJson) {
+		$this->phoneNumberJson = $phoneNumberJson;
+		$this->queryParameters["PhoneNumberJson"]=$phoneNumberJson;
+	}
+	
+}

+ 131 - 0
app/Libs/Aliyun/Api/Sms/Request/V20170525/SendInterSmsRequest.php

@@ -0,0 +1,131 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+namespace Aliyun\Api\Sms\Request\V20170525;
+
+use Aliyun\Core\RpcAcsRequest;
+
+class SendInterSmsRequest extends RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dysmsapi", "2017-05-25", "SendInterSms");
+		$this->setMethod("POST");
+	}
+
+	private  $templateCode;
+
+	private  $phoneNumbers;
+
+	private  $countryCode;
+
+	private  $signName;
+
+	private  $resourceOwnerAccount;
+
+	private  $templateParam;
+
+	private  $resourceOwnerId;
+
+	private  $ownerId;
+
+	private  $outId;
+
+	public function getTemplateCode() {
+		return $this->templateCode;
+	}
+
+	public function setTemplateCode($templateCode) {
+		$this->templateCode = $templateCode;
+		$this->queryParameters["TemplateCode"]=$templateCode;
+	}
+
+	public function getPhoneNumbers() {
+		return $this->phoneNumbers;
+	}
+
+	public function setPhoneNumbers($phoneNumbers) {
+		$this->phoneNumbers = $phoneNumbers;
+		$this->queryParameters["PhoneNumbers"]=$phoneNumbers;
+	}
+
+	public function getCountryCode() {
+		return $this->countryCode;
+	}
+
+	public function setCountryCode($countryCode) {
+		$this->countryCode = $countryCode;
+		$this->queryParameters["CountryCode"]=$countryCode;
+	}
+
+	public function getSignName() {
+		return $this->signName;
+	}
+
+	public function setSignName($signName) {
+		$this->signName = $signName;
+		$this->queryParameters["SignName"]=$signName;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getTemplateParam() {
+		return $this->templateParam;
+	}
+
+	public function setTemplateParam($templateParam) {
+		$this->templateParam = $templateParam;
+		$this->queryParameters["TemplateParam"]=$templateParam;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getOutId() {
+		return $this->outId;
+	}
+
+	public function setOutId($outId) {
+		$this->outId = $outId;
+		$this->queryParameters["OutId"]=$outId;
+	}
+	
+}

+ 113 - 0
app/Libs/Aliyun/Api/Sms/Request/V20170525/SendSmsRequest.php

@@ -0,0 +1,113 @@
+<?php
+
+namespace Aliyun\Api\Sms\Request\V20170525;
+
+use Aliyun\Core\RpcAcsRequest;
+
+class SendSmsRequest extends RpcAcsRequest
+{
+	public function  __construct()
+	{
+		parent::__construct("Dysmsapi", "2017-05-25", "SendSms");
+		$this->setMethod("POST");
+	}
+
+	private  $templateCode;
+
+	private  $phoneNumbers;
+
+	private  $signName;
+
+	private  $resourceOwnerAccount;
+
+	private  $templateParam;
+
+	private  $resourceOwnerId;
+
+	private  $ownerId;
+
+	private  $outId;
+
+    private  $smsUpExtendCode;
+
+	public function getTemplateCode() {
+		return $this->templateCode;
+	}
+
+	public function setTemplateCode($templateCode) {
+		$this->templateCode = $templateCode;
+		$this->queryParameters["TemplateCode"]=$templateCode;
+	}
+
+	public function getPhoneNumbers() {
+		return $this->phoneNumbers;
+	}
+
+	public function setPhoneNumbers($phoneNumbers) {
+		$this->phoneNumbers = $phoneNumbers;
+		$this->queryParameters["PhoneNumbers"]=$phoneNumbers;
+	}
+
+	public function getSignName() {
+		return $this->signName;
+	}
+
+	public function setSignName($signName) {
+		$this->signName = $signName;
+		$this->queryParameters["SignName"]=$signName;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getTemplateParam() {
+		return $this->templateParam;
+	}
+
+	public function setTemplateParam($templateParam) {
+		$this->templateParam = $templateParam;
+		$this->queryParameters["TemplateParam"]=$templateParam;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getOutId() {
+		return $this->outId;
+	}
+
+	public function setOutId($outId) {
+		$this->outId = $outId;
+		$this->queryParameters["OutId"]=$outId;
+	}
+
+    public function getSmsUpExtendCode() {
+        return $this->smsUpExtendCode;
+    }
+
+    public function setSmsUpExtendCode($smsUpExtendCode) {
+        $this->smsUpExtendCode = $smsUpExtendCode;
+        $this->queryParameters["SmsUpExtendCode"]=$smsUpExtendCode;
+    }
+}

+ 125 - 0
app/Libs/Aliyun/Core/AcsRequest.php

@@ -0,0 +1,125 @@
+<?php
+
+namespace Aliyun\Core;
+
+abstract class AcsRequest
+{
+	protected  $version;
+	protected  $product;
+	protected  $actionName;
+	protected  $regionId;
+	protected  $acceptFormat;
+	protected  $method;
+	protected  $protocolType = "http";
+	protected  $content;
+	
+	protected $queryParameters = array();
+	protected $headers = array();
+	
+	function  __construct($product, $version, $actionName)
+	{
+	    $this->headers["x-sdk-client"] = "php/2.0.0";
+	    $this->product = $product;
+	    $this->version = $version;
+	    $this->actionName = $actionName;
+	}
+	
+	public abstract function composeUrl($iSigner, $credential, $domain);
+	
+	public function getVersion()
+	{
+		return $this->version;
+	}
+	
+	public function setVersion($version)
+	{
+		$this->version = $version;
+	}
+	
+	public function getProduct()
+	{
+		return $this->product;
+	}
+	
+	public function setProduct($product)
+	{
+		$this->product = $product;
+	}
+	
+	public function getActionName()
+	{
+		return $this->actionName;
+	}
+	
+	public function setActionName($actionName)
+	{
+		$this->actionName = $actionName;
+	}
+	
+	public function getAcceptFormat()
+	{
+		return	$this->acceptFormat;
+	}
+	
+	public function setAcceptFormat($acceptFormat)
+	{
+		$this->acceptFormat = $acceptFormat;
+	}
+	
+	public function getQueryParameters()
+	{
+		return $this->queryParameters;
+	}
+	
+	public function getHeaders()
+	{
+		return $this->headers;
+	}
+	
+	public function getMethod()
+	{
+		return $this->method;
+	}
+	
+	public function setMethod($method)
+	{
+		$this->method = $method;
+	}
+	
+	public function getProtocol()
+	{
+		return $this->protocolType;
+	}
+	
+	public function setProtocol($protocol)
+	{
+		$this->protocolType = $protocol;
+	}
+	
+	public function getRegionId()
+	{
+		return $this->regionId;
+	}
+	public function setRegionId($region)
+	{
+		$this->regionId = $region;
+	}
+	
+	public function getContent()
+    {
+        return $this->content;
+    }
+
+    public function setContent($content)
+    {
+        $this->content = $content;
+    } 
+        
+        
+    public function addHeader($headerKey, $headerValue)
+    {
+        $this->headers[$headerKey] = $headerValue;
+    } 
+	
+		
+}

+ 29 - 0
app/Libs/Aliyun/Core/AcsResponse.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace Aliyun\Core;
+
+class AcsResponse
+{
+	private $code;	
+	private $message;
+	
+	public function getCode()
+	{
+		return $this->code;
+	}
+	
+	public function setCode($code)
+	{
+		$this->code = $code;
+	}
+	
+	public function getMessage()
+	{
+		return $this->message;
+	}
+	
+	public function setMessage($message)
+	{
+		$this->message = $message;
+	}
+}

+ 72 - 0
app/Libs/Aliyun/Core/Auth/Credential.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace Aliyun\Core\Auth;
+
+class Credential
+{
+	private  $dateTimeFormat = 'Y-m-d\TH:i:s\Z'; 
+	private	 $refreshDate;
+	private  $expiredDate;
+	private  $accessKeyId;
+	private  $accessSecret;
+	private  $securityToken;
+	
+	function  __construct($accessKeyId, $accessSecret)
+	{
+	    $this->accessKeyId = $accessKeyId;
+	    $this->accessSecret = $accessSecret;
+	    $this->refreshDate = date($this->dateTimeFormat);
+	}
+	
+	public function isExpired()
+	{
+		if($this->expiredDate == null)
+		{
+			return false;
+		}
+		if(strtotime($this->expiredDate)>date($this->dateTimeFormat))
+		{
+			return false;
+		}
+		return true;
+	}
+	
+	public function getRefreshDate()
+	{
+		return $this->refreshDate;
+	}
+	
+	public function getExpiredDate()
+	{
+		return $this->expiredDate;
+	}
+	
+	public function setExpiredDate($expiredHours)
+	{
+		if($expiredHours>0)
+		{
+			return $this->expiredDate = date($this->dateTimeFormat, strtotime("+".$expiredHours." hour"));
+		}
+	}
+	
+	public function getAccessKeyId()
+	{
+		return $this->accessKeyId;
+	}
+	
+	public function setAccessKeyId($accessKeyId)
+	{
+		$this->accessKeyId = $accessKeyId;
+	}
+	
+	public function getAccessSecret()
+	{
+		return $this->accessSecret;
+	}
+	
+	public function setAccessSecret($accessSecret)
+	{
+		$this->accessSecret = $accessSecret;
+	}
+
+}

+ 12 - 0
app/Libs/Aliyun/Core/Auth/ISigner.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace Aliyun\Core\Auth;
+
+interface ISigner
+{
+	public function  getSignatureMethod();
+	
+	public function  getSignatureVersion();
+	
+	public function signString($source, $accessSecret); 
+}

+ 20 - 0
app/Libs/Aliyun/Core/Auth/ShaHmac1Signer.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Aliyun\Core\Auth;
+
+class ShaHmac1Signer implements ISigner
+{
+	public function signString($source, $accessSecret)
+	{
+		return	base64_encode(hash_hmac('sha1', $source, $accessSecret, true));
+	}
+	
+	public function  getSignatureMethod() {
+		return "HMAC-SHA1";
+	}
+
+	public function getSignatureVersion() {
+		return "1.0";
+	}
+
+}

+ 20 - 0
app/Libs/Aliyun/Core/Auth/ShaHmac256Signer.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Aliyun\Core\Auth;
+
+class ShaHmac256Signer implements ISigner
+{
+	public function signString($source, $accessSecret)
+	{
+		return	base64_encode(hash_hmac('sha256', $source, $accessSecret, true));
+	}
+	
+	public function  getSignatureMethod() {
+		return "HMAC-SHA256";
+	}
+
+	public function getSignatureVersion() {
+		return "1.0";
+	}
+
+}

+ 124 - 0
app/Libs/Aliyun/Core/DefaultAcsClient.php

@@ -0,0 +1,124 @@
+<?php
+
+namespace Aliyun\Core;
+use Aliyun\Core\Exception\ClientException;
+use Aliyun\Core\Exception\ServerException;
+use Aliyun\Core\Regions\EndpointProvider;
+use Aliyun\Core\Http\HttpHelper;
+
+class DefaultAcsClient implements IAcsClient 
+{    
+    public $iClientProfile;
+    public $__urlTestFlag__;
+    
+    function  __construct($iClientProfile)
+    {
+        $this->iClientProfile = $iClientProfile;
+        $this->__urlTestFlag__ = false;
+    }
+    
+    public function getAcsResponse($request, $iSigner = null, $credential = null, $autoRetry = true, $maxRetryNumber = 3)
+    {
+        $httpResponse = $this->doActionImpl($request, $iSigner, $credential, $autoRetry, $maxRetryNumber);
+        $respObject = $this->parseAcsResponse($httpResponse->getBody(), $request->getAcceptFormat());
+        if(false == $httpResponse->isSuccess())
+        {
+            $this->buildApiException($respObject, $httpResponse->getStatus());
+        }
+        return $respObject;
+    }
+
+    private function doActionImpl($request, $iSigner = null, $credential = null, $autoRetry = true, $maxRetryNumber = 3)
+    {    
+        if(null == $this->iClientProfile && (null == $iSigner || null == $credential 
+            || null == $request->getRegionId() || null == $request->getAcceptFormat()))
+        {
+            throw new ClientException("No active profile found.", "SDK.InvalidProfile");
+        }
+        if(null == $iSigner)
+        {
+            $iSigner = $this->iClientProfile->getSigner();
+        }
+        if(null == $credential)
+        {
+            $credential = $this->iClientProfile->getCredential();
+        }
+        $request = $this->prepareRequest($request);
+        $domain = EndpointProvider::findProductDomain($request->getRegionId(), $request->getProduct());
+
+        if(null == $domain)
+        {
+            throw new ClientException("Can not find endpoint to access.", "SDK.InvalidRegionId");
+        }
+        $requestUrl = $request->composeUrl($iSigner, $credential, $domain);
+
+        if ($this->__urlTestFlag__) {
+            throw new ClientException($requestUrl, "URLTestFlagIsSet");
+        }
+
+        if(count($request->getDomainParameter())>0){
+            $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), $request->getDomainParameter(), $request->getHeaders());
+        } else {
+            $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), $request->getContent(), $request->getHeaders());
+        }
+        
+        $retryTimes = 1;
+        while (500 <= $httpResponse->getStatus() && $autoRetry && $retryTimes < $maxRetryNumber) {
+            $requestUrl = $request->composeUrl($iSigner, $credential,$domain);
+            
+            if(count($request->getDomainParameter())>0){
+                $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), $request->getDomainParameter(), $request->getHeaders());
+            } else {
+                $httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), $request->getContent(), $request->getHeaders());
+            }
+            $retryTimes ++;
+        }
+        return $httpResponse;
+    }
+    
+    public function doAction($request, $iSigner = null, $credential = null, $autoRetry = true, $maxRetryNumber = 3)
+    {    
+        trigger_error("doAction() is deprecated. Please use getAcsResponse() instead.", E_USER_NOTICE);
+        return $this->doActionImpl($request, $iSigner, $credential, $autoRetry, $maxRetryNumber);
+    }
+    
+    private function prepareRequest($request)
+    {
+        if(null == $request->getRegionId())
+        {
+            $request->setRegionId($this->iClientProfile->getRegionId());
+        }
+        if(null == $request->getAcceptFormat())
+        {
+            $request->setAcceptFormat($this->iClientProfile->getFormat());
+        }
+        if(null == $request->getMethod())
+        {
+            $request->setMethod("GET");
+        }
+        return $request;
+    }
+    
+    
+    private function buildApiException($respObject, $httpStatus)
+    {
+        throw new ServerException($respObject->Message, $respObject->Code, $httpStatus, $respObject->RequestId);
+    }
+    
+    private function parseAcsResponse($body, $format)
+    {
+        if ("JSON" == $format)
+        {    
+            $respObject = json_decode($body);
+        }
+        else if("XML" == $format)
+        {
+            $respObject = @simplexml_load_string($body);
+        }
+        else if("RAW" == $format)
+        {
+            $respObject = $body;
+        }
+        return $respObject;
+    }
+}

+ 50 - 0
app/Libs/Aliyun/Core/Exception/ClientException.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace Aliyun\Core\Exception;
+
+class ClientException extends \Exception
+{
+    function  __construct($errorMessage, $errorCode)
+    {
+        parent::__construct($errorMessage);
+        $this->errorMessage = $errorMessage;
+        $this->errorCode = $errorCode;
+        $this->setErrorType("Client");
+    }
+    
+    private $errorCode;
+    private $errorMessage;
+    private $errorType;
+    
+    public function getErrorCode()
+    {
+        return $this->errorCode;
+    }
+    
+    public function setErrorCode($errorCode)
+    {
+        $this->errorCode = $errorCode;
+    }
+    
+    public function getErrorMessage()
+    {
+        return $this->errorMessage;
+    }
+    
+    public function setErrorMessage($errorMessage)
+    {
+        $this->errorMessage = $errorMessage;
+    }
+    
+    public function getErrorType()
+    {
+        return $this->errorType;
+    }
+    
+    public function setErrorType($errorType)
+    {
+        $this->errorType = $errorType;
+    }
+    
+
+}

+ 31 - 0
app/Libs/Aliyun/Core/Exception/ServerException.php

@@ -0,0 +1,31 @@
+<?php
+
+
+namespace Aliyun\Core\Exception;
+
+class ServerException extends ClientException
+{
+    private $httpStatus;
+    private $requestId;
+
+    function  __construct($errorMessage, $errorCode, $httpStatus, $requestId)
+    {
+        $messageStr = $errorCode . " " . $errorMessage . " HTTP Status: " . $httpStatus . " RequestID: " . $requestId;
+        parent::__construct($messageStr, $errorCode);
+        $this->setErrorMessage($errorMessage);
+        $this->setErrorType("Server");
+        $this->httpStatus = $httpStatus;
+        $this->requestId = $requestId;
+    }
+
+    public function getHttpStatus()
+    {
+        return $this->httpStatus;
+    }
+
+    public function getRequestId()
+    {
+        return $this->requestId;
+    }
+
+}

+ 69 - 0
app/Libs/Aliyun/Core/Http/HttpHelper.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace Aliyun\Core\Http;
+use Aliyun\Core\Exception\ClientException;
+
+class HttpHelper
+{
+	public static $connectTimeout = 30;//30 second
+	public static $readTimeout = 80;//80 second
+	
+	public static function curl($url, $httpMethod = "GET", $postFields = null,$headers = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $httpMethod); 
+		if(ENABLE_HTTP_PROXY) {
+			curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); 
+			curl_setopt($ch, CURLOPT_PROXY, HTTP_PROXY_IP); 
+			curl_setopt($ch, CURLOPT_PROXYPORT, HTTP_PROXY_PORT);
+			curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); 
+		}
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($postFields) ? self::getPostHttpBody($postFields) : $postFields);
+		
+		if (self::$readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, self::$readTimeout);
+		}
+		if (self::$connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$connectTimeout);
+		}
+		//https request
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+		if (is_array($headers) && 0 < count($headers))
+		{
+			$httpHeaders =self::getHttpHearders($headers);
+			curl_setopt($ch,CURLOPT_HTTPHEADER,$httpHeaders);
+		}
+		$httpResponse = new HttpResponse();
+		$httpResponse->setBody(curl_exec($ch));
+		$httpResponse->setStatus(curl_getinfo($ch, CURLINFO_HTTP_CODE));
+		if (curl_errno($ch))
+		{
+			throw new ClientException("Server unreachable: Errno: " . curl_errno($ch) . " " . curl_error($ch), "SDK.ServerUnreachable");
+		}
+		curl_close($ch);
+		return $httpResponse;
+	}
+	static function getPostHttpBody($postFildes){		
+		$content = "";
+		foreach ($postFildes as $apiParamKey => $apiParamValue)
+		{			
+			$content .= "$apiParamKey=" . urlencode($apiParamValue) . "&";
+		}
+		return substr($content, 0, -1);
+	}
+	static function getHttpHearders($headers)
+	{
+		$httpHeader = array();
+		foreach ($headers as $key => $value)
+		{
+			array_push($httpHeader, $key.":".$value);	
+		}
+		return $httpHeader;
+	}
+}

+ 38 - 0
app/Libs/Aliyun/Core/Http/HttpResponse.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Aliyun\Core\Http;
+
+class HttpResponse
+{
+	private $body;
+	private $status;
+	
+	public function getBody()
+	{
+		return $this->body;
+	}
+	
+	public function setBody($body)
+	{
+		$this->body = $body;
+	}
+	
+	public function getStatus()
+	{
+		return $this->status;
+	}
+	
+	public function setStatus($status)
+	{
+		$this->status  = $status;
+	}
+	
+	public function isSuccess()
+	{
+		if(200 <= $this->status && 300 > $this->status)
+		{
+			return true;
+		}
+		return false;
+	}
+}

+ 7 - 0
app/Libs/Aliyun/Core/IAcsClient.php

@@ -0,0 +1,7 @@
+<?php
+
+namespace Aliyun\Core;
+interface IAcsClient
+{
+	public function doAction($requst);
+}

+ 137 - 0
app/Libs/Aliyun/Core/Profile/DefaultProfile.php

@@ -0,0 +1,137 @@
+<?php
+
+namespace Aliyun\Core\Profile;
+
+use Aliyun\Core\Auth\Credential;
+use Aliyun\Core\Auth\ShaHmac1Signer;
+use Aliyun\Core\Regions\ProductDomain;
+use Aliyun\Core\Regions\Endpoint;
+use Aliyun\Core\Regions\EndpointProvider;
+
+class DefaultProfile implements IClientProfile
+{
+	private static $profile;
+	private static $endpoints;
+	private static $credential;
+	private static $regionId;
+	private static $acceptFormat;
+	
+	private static $isigner;
+	private static $iCredential;
+	
+	private function  __construct($regionId,$credential)
+	{
+	    self::$regionId = $regionId;
+	    self::$credential = $credential;
+	}
+	
+	public static function getProfile($regionId, $accessKeyId, $accessSecret)
+	{
+		$credential =new Credential($accessKeyId, $accessSecret);
+		self::$profile = new DefaultProfile($regionId, $credential);
+		return self::$profile;
+	}
+	
+	public function getSigner()
+	{
+		if(null == self::$isigner)
+		{
+			self::$isigner = new ShaHmac1Signer(); 
+		}
+		return self::$isigner;
+	}
+	
+	public function getRegionId()
+	{
+		return self::$regionId;
+	}
+	
+	public function getFormat()
+	{
+		return self::$acceptFormat;
+	}
+	
+	public function getCredential()
+	{
+		if(null == self::$credential && null != self::$iCredential)
+		{
+			self::$credential = self::$iCredential;
+		}
+		return self::$credential;
+	}
+	
+	public static function getEndpoints()
+	{
+		if(null == self::$endpoints)
+		{
+			self::$endpoints = EndpointProvider::getEndpoints();
+		}
+		return self::$endpoints;
+	}
+	
+	public static function addEndpoint($endpointName, $regionId, $product, $domain)
+	{
+		if(null == self::$endpoints)
+		{
+			self::$endpoints = self::getEndpoints();
+		}
+		$endpoint = self::findEndpointByName($endpointName);
+		if(null == $endpoint)
+		{
+			self::addEndpoint_($endpointName, $regionId, $product, $domain);
+		}
+		else 
+		{
+			self::updateEndpoint($regionId, $product, $domain, $endpoint);
+		}
+	}
+	
+	public static function findEndpointByName($endpointName)
+	{
+		foreach (self::$endpoints as $key => $endpoint)
+		{
+			if($endpoint->getName() == $endpointName)
+			{
+				return $endpoint;
+			}
+		}
+	}
+	
+	private static function addEndpoint_($endpointName,$regionId, $product, $domain)
+	{
+		$regionIds = array($regionId);
+		$productDomains = array(new ProductDomain($product, $domain));
+		$endpoint = new Endpoint($endpointName, $regionIds, $productDomains);
+		array_push(self::$endpoints, $endpoint);
+	}
+	
+	private static function updateEndpoint($regionId, $product, $domain, $endpoint)
+	{
+		$regionIds = $endpoint->getRegionIds();
+		if(!in_array($regionId,$regionIds))
+		{
+			array_push($regionIds, $regionId);
+			$endpoint->setRegionIds($regionIds);
+		}
+
+		$productDomains = $endpoint->getProductDomains();
+		if(null == self::findProductDomain($productDomains, $product, $domain))
+		{
+		 	array_push($productDomains, new ProductDomain($product, $domain));	
+		}
+		$endpoint->setProductDomains($productDomains);
+	}
+	
+	private static function findProductDomain($productDomains, $product, $domain)
+	{
+		foreach ($productDomains as $key => $productDomain)
+		{
+			if($productDomain->getProductName() == $product && $productDomain->getDomainName() == $domain)
+			{
+				return $productDomain;
+			}
+		}
+		return null;
+	}
+
+}

+ 14 - 0
app/Libs/Aliyun/Core/Profile/IClientProfile.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace Aliyun\Core\Profile;
+
+interface IClientProfile
+{
+	public function getSigner();
+	
+	public function getRegionId();
+	
+	public function getFormat();
+	
+	public function getCredential();
+}

+ 47 - 0
app/Libs/Aliyun/Core/Regions/Endpoint.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace Aliyun\Core\Regions;
+
+class Endpoint
+{
+	private $name;
+	private $regionIds; 
+	private $productDomains;
+	
+	function  __construct($name, $regionIds, $productDomains)
+	{
+		$this->name = $name;
+		$this->regionIds = $regionIds;
+		$this->productDomains = $productDomains;
+	}
+	
+	public function getName()
+	{
+		return $this->name;
+	}
+	
+	public function setName($name)
+	{
+		$this->name = $name;
+	}
+	
+	public function getRegionIds()
+	{
+		return $this->regionIds;
+	}
+	
+	public function setRegionIds($regionIds)
+	{
+		$this->regionIds = $regionIds;
+	}
+	
+	public function getProductDomains()
+	{
+		return $this->productDomains;
+	}
+	
+	public function setProductDomains($productDomains)
+	{
+		$this->productDomains = $productDomains;
+	}
+}

+ 63 - 0
app/Libs/Aliyun/Core/Regions/EndpointConfig.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace Aliyun\Core\Regions;
+
+class EndpointConfig {
+
+    private static $loaded = false;
+
+    public static function load() {
+        if(self::$loaded) {
+           return;
+        }
+        $endpoint_filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . "endpoints.xml";
+        $xml = simplexml_load_string(file_get_contents($endpoint_filename));
+        $json = json_encode($xml);
+        $json_array = json_decode($json, TRUE);
+
+        $endpoints = array();
+
+
+        foreach ($json_array["Endpoint"] as $json_endpoint) {
+            # pre-process RegionId & Product
+            if (!array_key_exists("RegionId", $json_endpoint["RegionIds"])) {
+                $region_ids = array();
+            } else {
+                $json_region_ids = $json_endpoint['RegionIds']['RegionId'];
+                if (!is_array($json_region_ids)) {
+                    $region_ids = array($json_region_ids);
+                } else {
+                    $region_ids = $json_region_ids;
+                }
+            }
+
+            if (!array_key_exists("Product", $json_endpoint["Products"])) {
+                $products = array();
+
+            } else {
+                $json_products = $json_endpoint["Products"]["Product"];
+
+                if (array() === $json_products or !is_array($json_products)) {
+                    $products = array();
+                } else if (array_keys($json_products) !== range(0, count($json_products) - 1)) {
+                    # array is not sequential
+                    $products = array($json_products);
+                } else {
+                    $products = $json_products;
+                }
+            }
+
+            $product_domains = array();
+            foreach ($products as $product) {
+                $product_domain = new ProductDomain($product['ProductName'], $product['DomainName']);
+                array_push($product_domains, $product_domain);
+            }
+
+            $endpoint = new Endpoint($region_ids[0], $region_ids, $product_domains);
+            array_push($endpoints, $endpoint);
+        }
+
+        EndpointProvider::setEndpoints($endpoints);
+        self::$loaded = true;
+    }
+}

+ 53 - 0
app/Libs/Aliyun/Core/Regions/EndpointProvider.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace Aliyun\Core\Regions;
+
+class EndpointProvider
+{
+	private static $endpoints;
+	
+	public static function findProductDomain($regionId, $product)
+	{
+		if(null == $regionId || null == $product || null == self::$endpoints)
+		{
+			return null;
+		}
+		
+		foreach (self::$endpoints as $key => $endpoint)
+		{
+			if(in_array($regionId, $endpoint->getRegionIds()))
+			{
+			 	return self::findProductDomainByProduct($endpoint->getProductDomains(), $product);
+			}	
+		}
+		return null;
+	}
+	
+	private static function findProductDomainByProduct($productDomains, $product)
+	{
+		if(null == $productDomains)
+		{
+			return null;
+		}
+		foreach ($productDomains as $key => $productDomain)
+		{
+			if($product == $productDomain->getProductName())
+			{
+				return $productDomain->getDomainName();
+			}
+		}
+		return null;
+	}
+	
+	
+	public static function getEndpoints()
+	{
+		return self::$endpoints;
+	}
+	
+	public static function setEndpoints($endpoints)
+	{
+		self::$endpoints = $endpoints;
+	}
+	
+}

+ 28 - 0
app/Libs/Aliyun/Core/Regions/ProductDomain.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace Aliyun\Core\Regions;
+
+class ProductDomain
+{
+	private $productName;
+	private $domainName;
+	
+	function  __construct($product, $domain) {
+		$this->productName = $product;
+		$this->domainName = $domain;
+	}
+	
+	public function getProductName() {
+		return $this->productName;
+	}
+	public function setProductName($productName) {
+		$this->productName = $productName;
+	}
+	public function getDomainName() {
+		return $this->domainName;
+	}
+	public function setDomainName($domainName) {
+		$this->domainName = $domainName;
+	}
+
+}

+ 1349 - 0
app/Libs/Aliyun/Core/Regions/endpoints.xml

@@ -0,0 +1,1349 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Endpoints>
+    <Endpoint name="jp-fudao-1">
+        <RegionIds><RegionId>jp-fudao-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="me-east-1">
+        <RegionIds><RegionId>me-east-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.me-east-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs.me-east-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.me-east-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.me-east-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.me-east-1.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="us-east-1">
+        <RegionIds><RegionId>us-east-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-northeast-1">
+        <RegionIds><RegionId>ap-northeast-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kvstore</ProductName><DomainName>r-kvstore.ap-northeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.ap-northeast-1.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-bj-b01">
+        <RegionIds><RegionId>cn-hangzhou-bj-b01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hongkong">
+        <RegionIds><RegionId>cn-hongkong</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-hongkong.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-hongkong.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-hongkong.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hongkong.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-nu16-b01">
+        <RegionIds><RegionId>cn-beijing-nu16-b01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-am13-c01">
+        <RegionIds><RegionId>cn-beijing-am13-c01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-west-antgroup-1">
+        <RegionIds><RegionId>in-west-antgroup-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-guizhou-gov">
+        <RegionIds><RegionId>cn-guizhou-gov</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-west-antgroup-2">
+        <RegionIds><RegionId>in-west-antgroup-2</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao-cm9">
+        <RegionIds><RegionId>cn-qingdao-cm9</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="tw-snowcloud-kaohsiung">
+        <RegionIds><RegionId>tw-snowcloud-kaohsiung</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-finance-1">
+        <RegionIds><RegionId>cn-shanghai-finance-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-shanghai-finance-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-guizhou">
+        <RegionIds><RegionId>cn-guizhou</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao-finance">
+        <RegionIds><RegionId>cn-qingdao-finance</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-qdjbp-a.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-gov-1">
+        <RegionIds><RegionId>cn-beijing-gov-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-haidian-a.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai">
+        <RegionIds><RegionId>cn-shanghai</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>ARMS</ProductName><DomainName>arms.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>vod</ProductName><DomainName>vod.cn-shanghai.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-inner">
+        <RegionIds><RegionId>cn-shenzhen-inner</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-fujian">
+        <RegionIds><RegionId>cn-fujian</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="in-mumbai-alipay">
+        <RegionIds><RegionId>in-mumbai-alipay</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="us-west-1">
+        <RegionIds><RegionId>us-west-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.us-west-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-us-west-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-inner">
+        <RegionIds><RegionId>cn-shanghai-inner</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-shanghai.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-anhui-gov-1">
+        <RegionIds><RegionId>cn-anhui-gov-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-finance">
+        <RegionIds><RegionId>cn-hangzhou-finance</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hzjbp-b-console.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou">
+        <RegionIds><RegionId>cn-hangzhou</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>ARMS</ProductName><DomainName>arms.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Hpc</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oas</ProductName><DomainName>cn-hangzhou.oas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing-inner">
+        <RegionIds><RegionId>cn-beijing-inner</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-haidian-cm12-c01">
+        <RegionIds><RegionId>cn-haidian-cm12-c01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-anhui-gov">
+        <RegionIds><RegionId>cn-anhui-gov</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen">
+        <RegionIds><RegionId>cn-shenzhen</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>ARMS</ProductName><DomainName>arms.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchcompute.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-shenzhen.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oas</ProductName><DomainName>cn-shenzhen.oas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-shenzhen.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-2">
+        <RegionIds><RegionId>ap-southeast-2</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.ap-southeast-2.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.ap-southeast-2.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.ap-southeast-2.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs.ap-southeast-2.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.ap-southeast-2.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-qingdao">
+        <RegionIds><RegionId>cn-qingdao</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchcompute.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-qingdao.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-qingdao.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b02">
+        <RegionIds><RegionId>cn-shenzhen-su18-b02</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b03">
+        <RegionIds><RegionId>cn-shenzhen-su18-b03</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-su18-b01">
+        <RegionIds><RegionId>cn-shenzhen-su18-b01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-antgroup-1">
+        <RegionIds><RegionId>ap-southeast-antgroup-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="oss-cn-bjzwy">
+        <RegionIds><RegionId>oss-cn-bjzwy</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-bjzwy.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-henan-am12001">
+        <RegionIds><RegionId>cn-henan-am12001</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-beijing">
+        <RegionIds><RegionId>cn-beijing</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>ARMS</ProductName><DomainName>arms.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oas</ProductName><DomainName>cn-beijing.oas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Hpc</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-beijing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>vod</ProductName><DomainName>vod.cn-beijing.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-hangzhou-d">
+        <RegionIds><RegionId>cn-hangzhou-d</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-gansu-am6">
+        <RegionIds><RegionId>cn-gansu-am6</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-ningxiazhongwei">
+        <RegionIds><RegionId>cn-ningxiazhongwei</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shanghai-et2-b01">
+        <RegionIds><RegionId>cn-shanghai-et2-b01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace-ops</ProductName><DomainName>ace-ops.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Acs</ProductName><DomainName>acs.aliyun-inc.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc-inner</ProductName><DomainName>vpc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-ningxia-am7-c01">
+        <RegionIds><RegionId>cn-ningxia-am7-c01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-finance-1">
+        <RegionIds><RegionId>cn-shenzhen-finance-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.cn-shenzhen-finance-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="ap-southeast-1">
+        <RegionIds><RegionId>ap-southeast-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>CS</ProductName><DomainName>cs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Risk</ProductName><DomainName>risk-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>COS</ProductName><DomainName>cos.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ess</ProductName><DomainName>ess.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Billing</ProductName><DomainName>billing.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dqs</ProductName><DomainName>dqs.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dds</ProductName><DomainName>mongodb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alidns</ProductName><DomainName>alidns.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sms</ProductName><DomainName>sms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drds</ProductName><DomainName>drds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dts</ProductName><DomainName>dts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.ap-southeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location</ProductName><DomainName>location.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msg</ProductName><DomainName>msg-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ChargingService</ProductName><DomainName>chargingservice.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>R-kvstore</ProductName><DomainName>r-kvstore-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Alert</ProductName><DomainName>alert.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Msc</ProductName><DomainName>msc-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HighDDos</ProductName><DomainName>yd-highddos-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundun</ProductName><DomainName>yundun-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms-inner</ProductName><DomainName>ubsms-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ocs</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Dm</ProductName><DomainName>dm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Green</ProductName><DomainName>green.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Commondriver</ProductName><DomainName>common.driver.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>oceanbase</ProductName><DomainName>oceanbase.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Workorder</ProductName><DomainName>workorder.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Yundunhsm</ProductName><DomainName>yundunhsm.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Iot</ProductName><DomainName>iot.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>HPC</ProductName><DomainName>hpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>jaq</ProductName><DomainName>jaq.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oms</ProductName><DomainName>oms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>live</ProductName><DomainName>live.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>M-kvstore</ProductName><DomainName>m-kvstore.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>BatchCompute</ProductName><DomainName>batchCompute.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>AMS</ProductName><DomainName>ams.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>ROS</ProductName><DomainName>ros.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>PTS</ProductName><DomainName>pts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Qualitycheck</ProductName><DomainName>qualitycheck.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Bss</ProductName><DomainName>bss.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ubsms</ProductName><DomainName>ubsms.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Apigateway</ProductName><DomainName>apigateway.ap-southeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CloudAPI</ProductName><DomainName>apigateway.ap-southeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sts</ProductName><DomainName>sts.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CmsSiteMonitor</ProductName><DomainName>sitemonitor.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ace</ProductName><DomainName>ace.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Mts</ProductName><DomainName>mts.ap-southeast-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>CF</ProductName><DomainName>cf.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Crm</ProductName><DomainName>crm-cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Location-inner</ProductName><DomainName>location-inner.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Aas</ProductName><DomainName>aas.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Emr</ProductName><DomainName>emr.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Httpdns</ProductName><DomainName>httpdns-api.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Drc</ProductName><DomainName>drc.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Push</ProductName><DomainName>cloudpush.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>YundunDdos</ProductName><DomainName>inner-yundun-ddos.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Domain</ProductName><DomainName>domain.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ots</ProductName><DomainName>ots-pop.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cdn</ProductName><DomainName>cdn.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ram</ProductName><DomainName>ram.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Sales</ProductName><DomainName>sales.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>OssAdmin</ProductName><DomainName>oss-admin.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ons</ProductName><DomainName>ons.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Oss</ProductName><DomainName>oss-ap-southeast-1.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-shenzhen-st4-d01">
+        <RegionIds><RegionId>cn-shenzhen-st4-d01</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs-cn-hangzhou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="eu-central-1">
+        <RegionIds><RegionId>eu-central-1</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.eu-central-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs.eu-central-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.eu-central-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Kms</ProductName><DomainName>kms.eu-central-1.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.eu-central-1.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+    <Endpoint name="cn-zhangjiakou">
+        <RegionIds><RegionId>cn-zhangjiakou</RegionId></RegionIds>
+        <Products>
+            <Product><ProductName>Rds</ProductName><DomainName>rds.cn-zhangjiakou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Ecs</ProductName><DomainName>ecs.cn-zhangjiakou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Vpc</ProductName><DomainName>vpc.cn-zhangjiakou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Cms</ProductName><DomainName>metrics.cn-hangzhou.aliyuncs.com</DomainName></Product>
+            <Product><ProductName>Slb</ProductName><DomainName>slb.cn-zhangjiakou.aliyuncs.com</DomainName></Product>
+        </Products>
+    </Endpoint>
+</Endpoints>

+ 207 - 0
app/Libs/Aliyun/Core/RoaAcsRequest.php

@@ -0,0 +1,207 @@
+<?php
+
+namespace Aliyun\Core;
+
+abstract class RoaAcsRequest extends AcsRequest
+{
+	protected $uriPattern;
+	private $pathParameters = array();
+	private $domainParameters = array();
+	private $dateTimeFormat ="D, d M Y H:i:s \G\M\T";
+	private static $headerSeparator = "\n";
+	private static $querySeprator = "&"; 
+	
+	function  __construct($product, $version, $actionName)
+	{
+		parent::__construct($product, $version, $actionName);
+		$this->setVersion($version);
+		$this->initialize();
+	}
+	
+	private function initialize()
+	{
+		$this->setMethod("RAW");
+	}
+	
+	public function composeUrl($iSigner, $credential, $domain)
+	{
+		$this->prepareHeader($iSigner);
+
+		$signString = $this->getMethod().self::$headerSeparator;
+		if(isset($this->headers["Accept"]))
+		{
+			$signString = $signString.$this->headers["Accept"];
+		}
+		$signString = $signString.self::$headerSeparator;
+		
+		if(isset($this->headers["Content-MD5"]))
+		{
+			$signString = $signString.$this->headers["Content-MD5"];
+		}
+		$signString = $signString.self::$headerSeparator;
+		
+		if(isset($this->headers["Content-Type"]))
+		{
+			$signString = $signString.$this->headers["Content-Type"];
+		}
+		$signString = $signString.self::$headerSeparator;
+		
+		if(isset($this->headers["Date"]))
+		{
+			$signString = $signString.$this->headers["Date"];
+		}
+		$signString = $signString.self::$headerSeparator;
+		
+		$uri = $this->replaceOccupiedParameters();
+		$signString = $signString.$this->buildCanonicalHeaders();
+		$queryString = $this->buildQueryString($uri);
+		$signString .= $queryString;
+		$this->headers["Authorization"] = "acs ".$credential->getAccessKeyId().":"
+				.$iSigner->signString($signString, $credential->getAccessSecret());
+		$requestUrl = $this->getProtocol()."://".$domain.$queryString;
+		return $requestUrl;
+	}
+	
+	private function prepareHeader($iSigner)
+	{
+		$this->headers["Date"] = gmdate($this->dateTimeFormat);
+		if(null == $this->acceptFormat)
+		{
+			$this->acceptFormat = "RAW";
+		}
+		$this->headers["Accept"] = $this->formatToAccept($this->getAcceptFormat());
+		$this->headers["x-acs-signature-method"] = $iSigner->getSignatureMethod();
+		$this->headers["x-acs-signature-version"] = $iSigner->getSignatureVersion();
+		$this->headers["x-acs-region-id"] = $this->regionId;
+		$content = $this->getDomainParameter();
+        if ($content != null) {
+          $this->headers["Content-MD5"] = base64_encode(md5(json_encode($content),true));
+        }
+		$this->headers["Content-Type"] = "application/octet-stream;charset=utf-8";
+	}
+	
+	private function replaceOccupiedParameters()
+	{
+		$result = $this->uriPattern;
+		foreach ($this->pathParameters as $pathParameterKey => $apiParameterValue)
+		{
+			$target = "[".$pathParameterKey."]";
+			$result = str_replace($target,$apiParameterValue,$result);
+		}
+		return $result;
+	}
+	
+	private function buildCanonicalHeaders()
+	{
+		$sortMap = array();
+		foreach ($this->headers as $headerKey => $headerValue)
+		{
+			$key = strtolower($headerKey);
+			if(strpos($key, "x-acs-") === 0)
+			{
+				$sortMap[$key] = $headerValue;
+			}
+		}
+		ksort($sortMap);
+		$headerString = "";
+		foreach ($sortMap as $sortMapKey => $sortMapValue)
+		{
+			$headerString = $headerString.$sortMapKey.":".$sortMapValue.self::$headerSeparator;
+		}
+		return $headerString;
+	}
+	
+	private function splitSubResource($uri)
+	{
+		$queIndex = strpos($uri, "?");
+		$uriParts = array();
+		if(null != $queIndex)
+		{
+			array_push($uriParts, substr($uri,0,$queIndex));
+			array_push($uriParts, substr($uri,$queIndex+1));
+		}
+		else 
+		{
+			array_push($uriParts,$uri);
+		}
+		return $uriParts;
+	} 
+	
+	private function buildQueryString($uri)
+	{
+		$uriParts = $this->splitSubResource($uri);
+		$sortMap  = $this->queryParameters;
+		if(isset($uriParts[1]))
+		{
+			$sortMap[$uriParts[1]] = null;
+		}
+		$queryString = $uriParts[0];
+		if(count($uriParts))
+		{
+			$queryString = $queryString."?";
+		}
+		ksort($sortMap);
+		foreach ($sortMap as $sortMapKey => $sortMapValue)
+		{
+			$queryString = $queryString.$sortMapKey;
+			if(isset($sortMapValue))
+			{
+				$queryString = $queryString."=".$sortMapValue;
+			}
+			$queryString = $queryString.$querySeprator;
+		}
+		if(null==count($sortMap))
+		{
+			$queryString = substr($queryString, 0, strlen($queryString)-1);
+		}
+		return $queryString;
+	}
+	
+	private function formatToAccept($acceptFormat)
+	{
+		if($acceptFormat == "JSON")
+		{
+			return "application/json";
+		}
+		elseif ($acceptFormat == "XML") {
+			return "application/xml";
+		}
+		return "application/octet-stream";
+	}
+	
+	public function getPathParameters()
+	{
+		return $this->pathParameters;
+	}
+	
+	public function putPathParameter($name, $value)
+	{
+		$this->pathParameters[$name] = $value;
+	}
+	
+	public function getDomainParameter()	
+	{
+		return $this->domainParameters;
+	}
+	
+	public function putDomainParameters($name, $value)
+	{
+		$this->domainParameters[$name] = $value;
+	}
+	
+	public function getUriPattern()
+	{
+		return $this->uriPattern;
+	}
+	
+	public function setUriPattern($uriPattern)
+	{
+		return $this->uriPattern = $uriPattern;
+	}
+	
+	public function setVersion($version)
+	{
+		$this->version = $version;
+		$this->headers["x-acs-version"] = $version;
+	}
+}

+ 105 - 0
app/Libs/Aliyun/Core/RpcAcsRequest.php

@@ -0,0 +1,105 @@
+<?php
+
+namespace Aliyun\Core;
+
+abstract class RpcAcsRequest extends AcsRequest
+{
+	private $dateTimeFormat = 'Y-m-d\TH:i:s\Z'; 
+	private $domainParameters = array();
+	
+	function  __construct($product, $version, $actionName)
+	{
+		parent::__construct($product, $version, $actionName);
+		$this->initialize();
+	}
+	
+	private function initialize()
+	{
+		$this->setMethod("GET");	
+		$this->setAcceptFormat("JSON");
+	}
+	
+
+    private function prepareValue($value)
+    {
+        if (is_bool($value)) {
+            if ($value) {
+                return "true";
+            } else {
+                return "false";
+            }
+        } else {
+            return $value;
+        }
+    }
+
+	public function composeUrl($iSigner, $credential, $domain)
+	{
+		$apiParams = parent::getQueryParameters();
+        foreach ($apiParams as $key => $value) {
+            $apiParams[$key] = $this->prepareValue($value);
+        }
+		$apiParams["RegionId"] = $this->getRegionId();
+		$apiParams["AccessKeyId"] = $credential->getAccessKeyId();
+		$apiParams["Format"] = $this->getAcceptFormat();
+		$apiParams["SignatureMethod"] = $iSigner->getSignatureMethod();
+		$apiParams["SignatureVersion"] = $iSigner->getSignatureVersion();
+		$apiParams["SignatureNonce"] = uniqid(mt_rand(0,0xffff), true);
+        $apiParams["Timestamp"] = gmdate($this->dateTimeFormat);
+		$apiParams["Action"] = $this->getActionName();
+		$apiParams["Version"] = $this->getVersion();
+		$apiParams["Signature"] = $this->computeSignature($apiParams, $credential->getAccessSecret(), $iSigner);
+		if(parent::getMethod() == "POST") {
+			
+			$requestUrl = $this->getProtocol()."://". $domain . "/";			
+			foreach ($apiParams as $apiParamKey => $apiParamValue)
+			{
+				$this->putDomainParameters($apiParamKey,$apiParamValue);
+			}
+			return $requestUrl;			
+		}
+		else {	
+			$requestUrl = $this->getProtocol()."://". $domain . "/?";
+
+			foreach ($apiParams as $apiParamKey => $apiParamValue)
+			{
+				$requestUrl .= "$apiParamKey=" . urlencode($apiParamValue) . "&";
+			}
+			return substr($requestUrl, 0, -1);
+		}
+	}
+	
+	private function computeSignature($parameters, $accessKeySecret, $iSigner)
+	{
+	    ksort($parameters);
+	    $canonicalizedQueryString = '';
+	    foreach($parameters as $key => $value)
+	    {
+			$canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value);
+	    }
+	    $stringToSign = parent::getMethod().'&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
+	    $signature = $iSigner->signString($stringToSign, $accessKeySecret."&");
+
+	    return $signature;
+	}
+	
+	protected function percentEncode($str)
+	{
+	    $res = urlencode($str);
+	    $res = preg_replace('/\+/', '%20', $res);
+	    $res = preg_replace('/\*/', '%2A', $res);
+	    $res = preg_replace('/%7E/', '~', $res);
+	    return $res;
+	}
+	
+	public function getDomainParameter()	
+	{
+		return $this->domainParameters;
+	}
+	
+	public function putDomainParameters($name, $value)
+	{
+		$this->domainParameters[$name] = $value;
+	}
+	
+}

+ 23 - 0
app/Libs/Aliyun/Core/SmsConfig.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace Aliyun\Core;
+
+use Aliyun\Core\Regions\EndpointConfig;
+
+//config http proxy
+define('ENABLE_HTTP_PROXY', FALSE);
+define('HTTP_PROXY_IP', '127.0.0.1');
+define('HTTP_PROXY_PORT', '8888');
+
+
+class SmsConfig
+{
+    private static $loaded = false;
+    public static function load(){
+        if(self::$loaded) {
+            return;
+        }
+        EndpointConfig::load();
+        self::$loaded = true;
+    }
+}

+ 121 - 0
app/Libs/Aliyun/Sms.php

@@ -0,0 +1,121 @@
+<?php
+
+namespace App\Libs\Aliyun;
+
+use Config;
+use Aliyun\Core\SmsConfig;
+use Aliyun\Core\Profile\DefaultProfile;
+use Aliyun\Core\DefaultAcsClient;
+use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
+use Aliyun\Api\Sms\Request\V20170525\SendBatchSmsRequest;
+use Aliyun\Api\Sms\Request\V20170525\QuerySendDetailsRequest;
+
+// 加载区域结点配置
+SmsConfig::load();
+
+class Sms
+{
+    /**
+     * 取得AcsClient
+     *
+     * @return DefaultAcsClient
+     */
+    public function __construct() {
+        //产品名称:云通信流量服务API产品,开发者无需替换
+        $product = "Dysmsapi";
+
+        //产品域名,开发者无需替换
+        $domain = "dysmsapi.aliyuncs.com";
+
+        $accessKeyId = Config::get('sms.accessKeyId');
+        $accessKeySecret = Config::get('sms.accessKeySecret');
+
+        // 暂时不支持多Region
+        $region = "cn-hangzhou";
+
+        // 服务结点
+        $endPointName = "cn-hangzhou";
+
+        //初始化acsClient,暂不支持region化
+        $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
+
+        // 增加服务结点
+        DefaultProfile::addEndpoint($endPointName, $region, $product, $domain);
+
+        // 初始化AcsClient用于发起请求
+        $this->acsClient = new DefaultAcsClient($profile);
+    }
+
+    /**
+     * 发送短信
+     * @return stdClass
+     */
+    public function sendSms($phoneNumber, $templeteCode, $smsCode) {
+
+        // 初始化SendSmsRequest实例用于设置发送短信的参数
+        $request = new SendSmsRequest();
+
+        //可选-启用https协议
+        //$request->setProtocol("https");
+
+        // 必填,设置短信接收号码
+        $request->setPhoneNumbers($phoneNumber);
+
+        // 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
+        $request->setSignName(Config::get('sms.sign'));
+
+        // 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
+        $request->setTemplateCode($templeteCode);
+
+        // 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
+        $request->setTemplateParam(json_encode(array(  // 短信模板中字段的值
+            "code"=>$smsCode
+        ), JSON_UNESCAPED_UNICODE));
+
+        // 可选,设置流水号
+        //$request->setOutId("yourOutId");
+
+        // 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
+        //$request->setSmsUpExtendCode("1234567");
+
+        // 发起访问请求
+        $acsResponse = $this->acsClient->getAcsResponse($request);
+
+        return $acsResponse;
+    }
+
+
+    /**
+     * 短信发送记录查询
+     * @return stdClass
+     */
+    public function querySendDetails($phoneNumber, $sendDate, $pageSize, $currentPage) {
+
+        // 初始化QuerySendDetailsRequest实例用于设置短信查询的参数
+        $request = new QuerySendDetailsRequest();
+
+        //可选-启用https协议
+        //$request->setProtocol("https");
+
+        // 必填,短信接收号码
+        $request->setPhoneNumber($phoneNumber);
+
+        // 必填,短信发送日期,格式Ymd,支持近30天记录查询
+        $request->setSendDate($sendDate);
+
+        // 必填,分页大小
+        $request->setPageSize($pageSize);
+
+        // 必填,当前页码
+        $request->setCurrentPage($currentPage);
+
+        // 选填,短信发送流水号
+        //$request->setBizId("yourBizId");
+
+        // 发起访问请求
+        $acsResponse = $this->acsClient->getAcsResponse($request);
+
+        return $acsResponse;
+    }
+
+}

+ 84 - 0
app/Models/Active.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Models;
+
+use DB;
+use Carbon\Carbon;
+
+class Active extends BaseModel
+{
+    protected $fillable = [
+        'tid', 'name', 'start_time', 'end_time',
+        'user_num', 'address', 'text'
+    ];
+    protected $tb_act_theme = 'actives_themes';
+    
+
+    public function getStartTimeAttribute($value)
+    {
+        if ($value) {
+            return $this->timeFormat($value);
+        }        
+    }
+
+    public function getEndTimeAttribute($value)
+    {
+        if ($value) {
+            return $this->timeFormat($value);
+        }
+    }
+
+
+    public function theme()
+    {
+        return $this->belongsTo(ActivesTheme::class, 'tid');
+    }
+
+    public function activesUser()
+    {
+        return $this->hasMany(ActivesUser::class, 'aid');
+    }
+    
+
+    public function getFontActives($activeType_ename)
+    {
+        $query = $this->join(
+                            $this->tb_act_theme,
+                            $this->getTable().'.tid', '=', $this->tb_act_theme.'.id'
+                        )
+                        ->select(
+                            $this->tb_act_theme.'.id as tid',
+                            $this->tb_act_theme.'.name as tname',
+                            $this->getTable().'.id',
+                            $this->getTable().'.name',
+                            'start_time',
+                            'end_time'
+                        );
+
+        switch ($activeType_ename) {
+            case 'act_ready':
+                $query = $query->where('start_time', '>', Carbon::now());
+                break;
+            case 'act_start':
+                $query = $query->where(function($query) {
+                                    $query->where('start_time', '<=', Carbon::now())
+                                            ->orWhere('start_time', null);
+                                })
+                                ->where(function($query) {
+                                    $query->where('end_time', '>', Carbon::now())
+                                            ->orWhere('end_time', null);
+                                });
+                break;
+            case 'act_end':
+                $query = $query->where('end_time', '<=', Carbon::now());
+                break;
+        }
+
+        $query = $query->orderBy($this->getTable().'.created_at', 'desc')
+                    ->get();
+
+        return $query;
+                    
+    }
+
+}

+ 19 - 0
app/Models/ActivesTheme.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class ActivesTheme extends Model
+{
+	protected $fillable = [
+        'name'     
+    ];
+
+
+    public function actives()
+    {
+    	return $this->hasMany(Active::class, 'tid');
+    }
+    
+}

+ 33 - 0
app/Models/ActivesUser.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class ActivesUser extends Model
+{
+	protected $fillable = [
+        'aid', 'uid'     
+    ];
+
+
+    public function user()
+    {
+        return $this->belongsTo(User::class, 'uid');
+    }
+
+    public function active()
+    {
+        return $this->belongsTo(Active::class, 'aid');
+    }
+
+
+    public function auid($aid, $uid)
+    {
+        return $this->where('aid', $aid)
+                    ->where('uid', $uid)
+                    ->first()
+                    ->id;
+    }
+
+}

+ 19 - 0
app/Models/Admin.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Notifications\Notifiable;
+use Illuminate\Foundation\Auth\User as Authenticatable;
+
+class Admin extends Authenticatable
+{
+    use Notifiable;
+    
+    protected $fillable = [
+        'name', 'rid', 'password', 'last_time',
+    ];
+    protected $hidden = [
+        'password', 'remember_token',
+    ];
+    
+}

+ 21 - 0
app/Models/AdminsRole.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Models;
+
+class AdminsRole extends BaseModel
+{    
+    protected $fillable = [
+        'name', 'description', 'menus_id'
+    ];
+
+    public function getMenusIdAttribute($value)
+    {
+        return $this->belongFormat($value);
+    }
+
+    public function admins()
+    {
+    	return $this->hasMany(Admin::class, 'rid');
+    }
+    
+}

+ 18 - 0
app/Models/Advertise.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Advertise extends Model
+{
+	protected $fillable = [
+        'name', 'tpid', 'sort', 'image', 'href'
+    ];
+
+    public function type()
+    {
+        return $this->belongsTo(AdvertisesType::class, 'tpid');
+    }
+    
+}

+ 16 - 0
app/Models/AdvertisesType.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class AdvertisesType extends Model
+{
+	public $timestamps = false;
+
+    public function advertises()
+    {
+    	return $this->hasMany(Advertise::class, 'tpid');
+    }
+    
+}

+ 29 - 0
app/Models/Article.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Models;
+
+class Article extends BaseModel
+{
+    protected $fillable = [
+        'title', 'belong', 'txt', 'text', 'cover', 'keywords'
+    ];
+
+    public function getBelongAttribute($value)
+    {
+        return $this->belongFormat($value);
+    }
+
+    public function getTwoArticlesFromMenuId($menu_id)
+    {
+        return $this->whereRaw('find_in_set('.$menu_id.', belong)')
+					->orderBy('created_at', 'desc')
+					->take(2)
+					->get();
+    }
+
+    public function getArticlesFromMenuId($menu_id)
+    {
+        return $this->getFromMenuId($menu_id);
+    }
+    
+}

+ 29 - 0
app/Models/BaseModel.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Models;
+
+use DB;
+use Illuminate\Database\Eloquent\Model;
+
+class BaseModel extends Model
+{
+    public function timeFormat($time)
+    {
+        $time = date_create($time);
+        return date_format($time,'Y-m-d').'T'.date_format($time,'H:i:s');
+    }
+
+	public function belongFormat($belong)
+    {
+        return explode(',', $belong);
+    }
+
+    public function getFromMenuId($menu_id)
+    {
+        return DB::table($this->getTable())
+                    ->whereRaw('find_in_set('.$menu_id.', belong)')
+                    ->orderBy('created_at', 'desc')
+                    ->get();
+    }
+    
+}

+ 21 - 0
app/Models/Company.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Company extends Model
+{
+	protected $table = 'company';
+	protected $fillable = [
+        'name', 'ename', 'value', 'image',
+        'width', 'height'
+    ];
+
+    public function getCompanyFromEname($ename)
+    {
+        return $this->where('ename', $ename)
+                    ->first();
+    }
+    
+}

+ 28 - 0
app/Models/Course.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Models;
+
+class Course extends BaseModel
+{
+    protected $fillable = [
+        'name', 'belong', 'user_name', 'address', 'text',
+        'start_date', 'end_date', 'keywords', 'description'   
+    ];
+
+
+    public function getBelongAttribute($value)
+    {
+        return $this->belongFormat($value);
+    }
+
+    public function getCoursesFromMenuId($menu_id)
+    {
+        return $this->getFromMenuId($menu_id);
+    }
+
+    public function coursesUser()
+    {
+        return $this->hasMany(CoursesUser::class, 'cid');
+    }
+
+}

+ 24 - 0
app/Models/CoursesUser.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class CoursesUser extends Model
+{
+	protected $fillable = [
+        'cid', 'uid'     
+    ];
+
+
+    public function user()
+    {
+        return $this->belongsTo(User::class, 'uid');
+    }
+
+    public function course()
+    {
+        return $this->belongsTo(Course::class, 'cid');
+    }
+
+}

+ 38 - 0
app/Models/Menu.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App\Models;
+
+class Menu extends MenuBaseModel
+{
+    public $timestamps = false;
+
+
+    public function getMenuFromIsort($isort)
+    {
+        return $this->where('isort', $isort)
+                    ->first();
+    }
+
+    public function getSecondMenusFromEname($ename)
+    {
+        return $this->where('sort1', $this->getMenuFromEname($ename)->sort1)
+                    ->where('sort2', '<>', 0)
+                    ->orderBy('sort2')
+                    ->get();
+    }
+
+    public function getFirstMenus()
+    {
+        return $this->where('sort2', 0)
+                    ->orderBy('sort1')
+                    ->get();
+    }
+
+    public function getSameSort1Menus($ename)
+    {
+        return $this->where('sort1', $this->getMenuFromEname($ename)->sort1)
+                    ->orderBy('sort2')
+                    ->get();
+    }
+
+}

+ 15 - 0
app/Models/MenuBaseModel.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class MenuBaseModel extends Model
+{
+    public function getMenuFromEname($ename)
+    {
+        return $this->where('ename', $ename)
+                    ->first();
+    }
+
+}

+ 41 - 0
app/Models/MenusAd.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Models;
+
+class MenusAd extends MenuBaseModel
+{
+	protected $table = 'menus_ad';
+
+    public $timestamps = false;
+
+
+    public function getSecondMenusFromSort1($sort1)
+    {
+    	return $this->where('sort1', $sort1)
+    				->where('sort3', 0)
+                    ->where('sort2', '<>', 0)
+                    ->orderBy('sort2')
+                    ->get();
+    }
+
+    public function getThirdMenusFromSort1($sort1, $sort2)
+    {
+    	return $this->where('sort1', $sort1)
+    				->where('sort2', $sort2)
+                    ->where('sort3', '<>', 0)
+                    ->whereNotNull('href')
+                    ->orderBy('sort3')
+                    ->get();
+    }
+
+    public function getFirstMenus()
+    {
+        return $this->where('sort2', 0)
+                    ->where('sort3', 0)
+                    ->where('sort1', '<>', 0)
+                    ->whereNotNull('href')
+                    ->orderBy('sort1')
+                    ->get();
+    }
+
+}

Some files were not shown because too many files changed in this diff