wupengfei пре 2 година
родитељ
комит
fdbebc2825
42 измењених фајлова са 4027 додато и 373 уклоњено
  1. 100 16
      application/api/controller/Expedite.php
  2. 0 57
      application/api/controller/General.php
  3. 2 300
      application/api/controller/Login.php
  4. 8 0
      application/common/model/UserTrack.php
  5. 154 0
      vendor/aliyunmail/aliyun-php-sdk-core/AcsRequest.php
  6. 44 0
      vendor/aliyunmail/aliyun-php-sdk-core/AcsResponse.php
  7. 83 0
      vendor/aliyunmail/aliyun-php-sdk-core/Auth/Credential.php
  8. 27 0
      vendor/aliyunmail/aliyun-php-sdk-core/Auth/ISigner.php
  9. 36 0
      vendor/aliyunmail/aliyun-php-sdk-core/Auth/ShaHmac1Signer.php
  10. 36 0
      vendor/aliyunmail/aliyun-php-sdk-core/Auth/ShaHmac256Signer.php
  11. 48 0
      vendor/aliyunmail/aliyun-php-sdk-core/Autoloader/Autoloader.php
  12. 47 0
      vendor/aliyunmail/aliyun-php-sdk-core/Config.php
  13. 134 0
      vendor/aliyunmail/aliyun-php-sdk-core/DefaultAcsClient.php
  14. 63 0
      vendor/aliyunmail/aliyun-php-sdk-core/Exception/ClientException.php
  15. 44 0
      vendor/aliyunmail/aliyun-php-sdk-core/Exception/ServerException.php
  16. 80 0
      vendor/aliyunmail/aliyun-php-sdk-core/Http/HttpHelper.php
  17. 52 0
      vendor/aliyunmail/aliyun-php-sdk-core/Http/HttpResponse.php
  18. 23 0
      vendor/aliyunmail/aliyun-php-sdk-core/IAcsClient.php
  19. 146 0
      vendor/aliyunmail/aliyun-php-sdk-core/Profile/DefaultProfile.php
  20. 29 0
      vendor/aliyunmail/aliyun-php-sdk-core/Profile/IClientProfile.php
  21. 62 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/Endpoint.php
  22. 65 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/EndpointConfig.php
  23. 60 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/EndpointProvider.php
  24. 120 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/LocationService.php
  25. 47 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/ProductDomain.php
  26. 1349 0
      vendor/aliyunmail/aliyun-php-sdk-core/Regions/endpoints.xml
  27. 203 0
      vendor/aliyunmail/aliyun-php-sdk-core/RoaAcsRequest.php
  28. 113 0
      vendor/aliyunmail/aliyun-php-sdk-core/RpcAcsRequest.php
  29. 35 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php
  30. 28 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php
  31. 30 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php
  32. 40 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/BaseTest.php
  33. 30 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php
  34. 42 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php
  35. 80 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php
  36. 29 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php
  37. 60 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php
  38. 46 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php
  39. 28 0
      vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php
  40. 126 0
      vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/BatchSendMailRequest.php
  41. 171 0
      vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/SingleSendMailRequest.php
  42. 107 0
      vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/SingleSendSmsRequest.php

+ 100 - 16
application/api/controller/Expedite.php

@@ -5,25 +5,9 @@ namespace app\api\controller;
 use AlibabaCloud\Client\AlibabaCloud;
 use AlibabaCloud\Client\Exception\ClientException;
 use AlibabaCloud\Client\Exception\ServerException;
-use app\common\model\CouponConfig;
-use app\common\model\ExchangeGoods;
-use app\common\model\GoodsCate;
-use app\common\model\GoodsSeason;
-use app\common\model\GoodsSellInfo;
-use app\common\model\GoodsServe;
-use app\common\model\GoodsTerritory;
-use app\common\model\MallMenu;
-use app\common\model\OrderComment;
-use app\common\model\ReductionActivity;
-use app\common\model\RemarkLabel;
 use app\common\model\StoreBanner;
-use app\common\model\StoreGoods;
-use app\common\model\StoreGoodsItem;
-use app\common\model\TopSearch;
-use app\common\model\UserCollect;
 use app\common\model\UserLevel;
 use app\common\model\UserTrack;
-use app\common\service\Activity;
 use think\Db;
 /**
  * @title 不需要验证token接口(商品列表等)
@@ -82,6 +66,106 @@ class Expedite extends Base
     }
 
 
+    /**
+     * @title 发送短信验证码
+     * @desc 发送短信验证码
+     * @author qc
+     * @url /api/General/sendSms
+     * @method POST
+     * @tag 短信验证码
+     * @param name:phone type:int require:1 default:-- desc:要获取验证码的手机号
+     * @return name:code type:string default:-- desc:验证码
+     */
+    public function sendSms(){
+        $phone = input('post.phone');
+        if(empty($phone)) $this ->error('参数错误');
+        $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
+        AlibabaCloud::accessKeyClient('LTAI5tEEfowhMkLu8auo6n6G', 'ch94CL3TEwNAxXNREweZl3gfk8jQ84')
+            ->regionId('cn-hangzhou')->asDefaultClient();
+        try {
+            $result = AlibabaCloud::rpc()
+                ->product('Dysmsapi')
+                ->version('2017-05-25')
+                ->action('SendSms')
+                ->method('POST')
+                ->host('dysmsapi.aliyuncs.com')
+                ->options([
+                    'query' => [
+                        'RegionId' => "cn-hangzhou",
+                        'PhoneNumbers' => $phone,
+                        'SignName' => "康养食品",
+                        'TemplateCode' => "SMS_241155218",
+                        'TemplateParam' => json_encode(array("code"=>$code)),
+                    ],
+                ])->request();
+            $result = $result->toArray();
+            if($result['Code'] == "OK") {
+                $sms_data = array(
+                    'phone'=>$phone,
+                    'code'=>$code,
+                    'result'=>$result['Message']
+                );
+                Db::name('store_member_sms')->insert($sms_data);
+                $this->success('发送成功',$code);
+            }else{
+                $this->error('发送失败');
+            }
+        } catch (ClientException $e) {
+            echo $e->getErrorMessage() . PHP_EOL;
+        } catch (ServerException $e) {
+            echo $e->getErrorMessage() . PHP_EOL;
+        }
+
+    }
+
+    /**
+     * @title 发送邮箱验证码
+     * @desc 发送邮箱验证码
+     * @author qc
+     * @url /api/General/emailSms
+     * @method POST
+     * @tag 邮箱验证码
+     * @param name:email type:int require:1 default:-- desc:邮箱
+     * @return name:code type:string default:-- desc:验证码
+     */
+    function emailSms(){
+        $email = input('post.email');
+        $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
+        require_once env('root_path').'/vendor/aliyunmail/aliyun-php-sdk-core/Config.php';
+        //需要设置对应的region名称,如华东1(杭州)设为cn-hangzhou,新加坡Region设为ap-southeast-1,澳洲Region设为ap-southeast-2。
+        $iClientProfile = \DefaultProfile::getProfile("ap-southeast-1", "LTAI5tA1MvqQFWkFRnsaqeoV", "rF6loLdOxFF8FQJtjD4TQKhBGR3WY0");
+        $iClientProfile::addEndpoint("ap-southeast-1","ap-southeast-1","Dm","dm.ap-southeast-1.aliyuncs.com");
+        $client = new DefaultAcsClient($iClientProfile);
+        $request = new Dm\SingleSendMailRequest();
+        $request->setAccountName("mmg@daydayu.com");
+        $request->setFromAlias("[Seek Yeah]");
+        $request->setAddressType(1);
+        $request->setTagName("DayDayU");
+        $request->setReplyToAddress("true");
+        $request->setToAddress($email);
+        $request->setSubject("[Seek Yeah]验证码");
+        $html_body = '验证码:'.$code;
+        $request->setHtmlBody($html_body);
+        try {
+            $client->getAcsResponse($request);
+            $sms_data = array(
+                'phone'=>$email,
+                'code'=>$code,
+                'result'=>'OK'
+            );
+            Db::name('store_member_sms')->insert($sms_data);
+            $this->success('发送成功');
+        } catch (ClientException  $e) {
+            $this->error($e->getErrorMessage());
+           // print_r($e->getErrorCode());
+           // print_r($e->getErrorMessage());
+        } catch (ServerException  $e) {
+            $this->error($e->getErrorMessage());
+           // print_r($e->getErrorCode());
+           // print_r($e->getErrorMessage());
+
+        }
+    }
 
 
 }

+ 0 - 57
application/api/controller/General.php

@@ -3,11 +3,7 @@ namespace app\api\controller;
 use AlibabaCloud\Client\AlibabaCloud;
 use AlibabaCloud\Client\Exception\ClientException;
 use AlibabaCloud\Client\Exception\ServerException;
-use AliPay\Scan;
-use app\common\model\StoreGoods;
 use app\common\model\StoreGoodsItem;
-use app\common\model\User;
-use app\common\model\UserMessage;
 use app\common\model\UserTrack;
 use think\Db;
 use think\Exception;
@@ -28,59 +24,6 @@ class General extends Base
     }
 
     /**
-     * @title 发送短信验证码
-     * @desc 发送短信验证码
-     * @author qc
-     * @url /api/General/sendSms
-     * @method POST
-     * @tag 短信验证码
-     * @param name:phone type:int require:1 default:-- desc:要获取验证码的手机号
-     * @return name:code type:string default:-- desc:验证码
-     */
-    public function sendSms(){
-        $phone = input('post.phone');
-        if(empty($phone)) $this ->error('参数错误');
-        $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
-        AlibabaCloud::accessKeyClient('LTAI5tEEfowhMkLu8auo6n6G', 'ch94CL3TEwNAxXNREweZl3gfk8jQ84')
-            ->regionId('cn-hangzhou')->asDefaultClient();
-        try {
-            $result = AlibabaCloud::rpc()
-                ->product('Dysmsapi')
-                ->version('2017-05-25')
-                ->action('SendSms')
-                ->method('POST')
-                ->host('dysmsapi.aliyuncs.com')
-                ->options([
-                    'query' => [
-                        'RegionId' => "cn-hangzhou",
-                        'PhoneNumbers' => $phone,
-                        'SignName' => "康养食品",
-                        'TemplateCode' => "SMS_241155218",
-                        'TemplateParam' => json_encode(array("code"=>$code)),
-                    ],
-                ])->request();
-            $result = $result->toArray();
-            if($result['Code'] == "OK") {
-                $sms_data = array(
-                    'phone'=>$phone,
-                    'code'=>$code,
-                    'result'=>$result['Message']
-                );
-                Db::name('store_member_sms')->insert($sms_data);
-                $this->success('发送成功',$code);
-            }else{
-                $this->error('发送失败');
-            }
-        } catch (ClientException $e) {
-            echo $e->getErrorMessage() . PHP_EOL;
-        } catch (ServerException $e) {
-            echo $e->getErrorMessage() . PHP_EOL;
-        }
-
-    }
-
-
-    /**
      * @title 获取物流详情
      * @desc 获取物流详情
      * @author qc

+ 2 - 300
application/api/controller/Login.php

@@ -46,8 +46,8 @@ class Login extends Base
             if(!$user_info) {
                 $reg_data = [];
                 $reg_data['account_type'] = $account_type;
-                $account_type == 1?  $reg_data['email'] =  $account : $ret_data['phone'] = $account;
-                $account_type == 1?  $reg_data['name'] =  $account : 'G'.substr_replace($account,'****',3,4);
+                $account_type == 1 ?  $reg_data['email'] =  $account : $ret_data['phone'] = $account;
+                $account_type == 1 ?  $reg_data['name']  =  'G企业用户_'.explode(',',$account)[0] : 'G'. substr_replace($account,'****',3,4);
                 $user_info = User::create($reg_data);
             }
             $ret_data['token'] =  $this->createJwt($user_info->id);;
@@ -60,158 +60,6 @@ class Login extends Base
 
 
     /**
-     * @title 账号绑定手机号
-     * @desc 账号绑定手机号
-     * @author qc
-     * @url /api/Login/accountBindPhone
-     * @method POST
-     * @param name:bind_type type:int require:1 default:1 desc:绑定类型(1.微信小程序,2.微信授权app,3.pc微信扫码,4.qq授权app,5pc授权QQ)
-     * @param name:phone type:int require:1 default:-- desc:手机号(1,2,3,4)
-     * @param name:phone_code type:string require:1 default:-- desc:手机验证码(1,2,3,4)
-     * @param name:code type:int require:0 default:-- desc:code值(1)
-     * @param name:access_token type:string require:0 default:0 desc:access_token(2,4)
-     * @param name:openid type:string require:0 default:0 desc:openid(2)
-     * @param name:pid type:string require:0 default:-- desc:推荐人(能获取到就传)
-     * @param name:name type:string require:0 default:-- desc:名称(能获取到就传)
-     * @param name:headimg type:string require:0 default:-- desc:头像(能获取到就传)
-     * @return name:token type:string default:-- desc:成功返回token
-     */
-    public function accountBindPhone()
-    {
-        $bind_type = input('post.bind_type',1);
-        $phone = input('post.phone');
-        $phone_code = input('post.phone_code');
-        $code = input('post.code');
-        $pid = input('post.pid', 0);
-        $headimgurl = input('post.headimg', '');
-        $nickname = input('post.name', '');
-        $access_token = input('post.access_token');
-        $openid = input('post.openid');
-        $check_code = $this->checkPhoneCode($phone,$phone_code);
-        if(!$check_code) $this->error('验证码错误');
-        $this->updatePhoneCode($check_code);
-        $member =User::where('phone', $phone)->find();
-        $is_new = $member ? 0:1;// 是否是新用户
-        $bind_data = [];
-        if($is_new) $bind_data['phone'] = $phone;
-        switch ($bind_type){
-            case 1://微信小程序注册
-                $app = Factory::miniProgram(config('app.mini_program'));
-                $data = $app->auth->session($code);
-                if(empty($data['openid'])) $this->error($data['errmsg']);
-                $check_member = User::where('openid',$data['openid'])->find();
-                if($check_member) $this->error('账号已存在'.$bind_type);
-                $bind_data['openid'] = $data['openid'];
-                if($is_new) $bind_data['name']   =  $nickname ? :$phone;
-                if($is_new) $bind_data['headimg'] = $headimgurl ? :'';
-                if($is_new || (!$is_new && !$member->wechat_unionid)) $bind_data['wechat_unionid'] = !empty($data['unionid']) ? $data['unionid'] :'';
-                break;
-            case 2://微信授权app注册
-                if($member && $member->app_openid) $this->error('该手机号已绑定微信'.$bind_type);
-                if(empty($access_token) || empty($openid)) $this->error('参数错误');
-                $user_info = http_curl('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid);
-                if(!$user_info || empty($user_info['unionid'])) $this->error('获取用户微信信息有误');
-                $check_member = User::where('app_openid',$user_info['openid'])->find();
-                if($check_member) $this->error('账号已存在'.$bind_type);
-                $bind_data['app_openid'] = $user_info['openid'];
-                if($is_new) $bind_data['name']   = $user_info['nickname'];
-                if($is_new) $bind_data['headimg'] = $user_info['headimgurl'];
-                if($is_new || (!$is_new && !$member->wechat_unionid))  $bind_data['wechat_unionid'] = !empty($user_info['unionid']) ? $user_info['unionid'] :'';
-                break;
-            case 3://pc微信扫码
-                if($member && $member->pc_openid) $this->error('该手机号已绑定微信'.$bind_type);
-                if(empty($code)) $this->error('参数错误');
-                $res = http_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('pc_wx')['app_id'].'&secret='.config('pc_wx')['secret'].'&code='.$code.'&grant_type=authorization_code');
-                if(!$res || !isset($res['access_token'])) $this->error('获取access_token有误');
-                $user_info = http_curl('https://api.weixin.qq.com/sns/userinfo?access_token='.$res['access_token'].'&openid='.$res['openid']);
-                if(!$user_info) $this->error('获取用户微信信息有误');
-                $check_member = User::where('pc_openid',$user_info['openid'])->find();
-                if($check_member) $this->error('账号已存在'.$bind_type);
-                $bind_data['pc_openid'] = $user_info['openid'];
-                if($is_new) $bind_data['name']   = $user_info['nickname'];
-                if($is_new) $bind_data['headimg'] = $user_info['headimgurl'];
-                if($is_new || (!$is_new && !$member->wechat_unionid)) $bind_data['wechat_unionid'] = !empty($user_info['unionid']) ? $user_info['unionid'] :'';
-                break;
-            case 4:// qq授权app
-                if($member && $member->qq_unionid) $this->error('该手机号已绑定QQ'.$bind_type);
-                if(empty($access_token)) $this->error('参数错误');
-                $res = curl_get('https://graph.qq.com/oauth2.0/me?access_token='.$access_token.'&unionid=1'.'&fmt=json');
-                if(!$res || !isset($res['unionid'])) $this->error('获取unionid有误');
-                $check_qq = User::where('qq_unionid', $res['unionid'])->value('id');
-                if($check_qq) $this->error('用户已存在');
-                $bind_data['qq_unionid'] = $res['unionid'];
-                if($is_new) $bind_data['name']   = $nickname;
-                if($is_new) $bind_data['headimg'] = $headimgurl;
-                break;
-            case 5:// pc qq
-                if(empty($access_token)) $this->error('参数错误');
-                $res = curl_get('https://graph.qq.com/oauth2.0/me?access_token='.$access_token.'&unionid=1'.'&fmt=json');
-                if(!$res || !isset($res['unionid'])) $this->error('获取unionid有误');
-                $check_qq = User::where('qq_unionid', $res['unionid'])->value('id');
-                if($check_qq) $this->error('用户已存在');
-                $bind_data['qq_unionid'] = $res['unionid'];
-                if($is_new) $bind_data['name']   = $nickname;
-                if($is_new) $bind_data['headimg'] = $headimgurl;
-                break;
-        }
-        // 新用户创建钱包
-        if($is_new){
-            if(empty($bind_data['headimg'])) $bind_data['headimg'] = 'https://xieshouxiongmao.oss-cn-beijing.aliyuncs.com/add09dc3edac6bfd/c15ab257e41b46ba.png';
-            if(empty($bind_data['name'])) $bind_data['name'] = $phone;
-            $member = User::create($bind_data);
-            User::update(['invite_code'=>create_invite_code($member->id)],['id'=>$member->id]);
-            Data::save("UserWallet",['user_id'=>$member->id],'user_id',['user_id'=>$member->id]);//创建钱包
-            if($pid) InviteInfo::create(['user_id'=>$member->id,'pid'=>$pid,'create_at'=>date('Y-m-d H:i:s')]);
-        }else{
-            User::where('id',$member->id)->update($bind_data);
-        }
-        $token = $this->createJwt($member->id);
-        $this->success('绑定成功', ['token' => $token]);
-    }
-
-    /**
-     * @title 手机验正码注册
-     * @desc 手机验正码注册
-     * @author qc
-     * @url /api/Login/phoneCodeRegister
-     * @method POST
-     * @param name:phone type:int require:1 default:-- desc:手机号
-     * @param name:code type:string require:1 default:-- desc:手机验证码
-     * @param name:verify type:string require:1 default:-- desc:图形验证码
-     * @param name:pid type:string require:0 default:-- desc:推荐人id
-     * @param name:uniqid type:string require:1 default:-- desc:生成验证码图形时返回的uniqid
-     * @param name:password type:string require:1 default:-- desc:密码
-     * @param name:con_password type:string require:1 default:-- desc:确认密码
-     * @return name:token type:string default:-- desc:用户登录成功后的token值
-     */
-    public function phoneCodeRegister()
-    {
-        $verify = input('post.verify');
-        $uniqid = input('post.uniqid');
-        $phone = input('post.phone');
-        $code = input('post.code');
-        $password = input('post.password');
-        $con_password = input('post.con_password');
-        $pid = input('pid', 0);
-        if($password !== $con_password) $this->error('两次输入密码不一致');
-        if (!CaptchaService::instance()->check($verify, $uniqid)) $this->error('图形验证码验证失败,请重新输入!');
-        $check_code = $this->checkPhoneCode($phone,$code);
-        if(!$check_code) $this->error('验证码错误');
-        $this->updatePhoneCode($check_code);
-        $member = User::field('id,phone')->where('phone', $phone)->find();
-        if($member) $this->error('该手机号已注册');
-        $member_data = ['phone' => $phone,'encryption_password'=>encrypt_password($password)];
-        Db::name('store_member')->insert($member_data);
-        $uid = Db::getLastInsID();
-        User::update(['invite_code'=>create_invite_code($uid)],['id'=>$uid]);
-        UserWallet::create(['user_id'=>$uid]);//创建钱包
-        if($pid) InviteInfo::create(['user_id'=>$uid,'pid'=>$pid,'create_at'=>date('Y-m-d H:i:s')]);
-        $token = $this->createJwt($uid);
-        $this->success('登录成功', ['token' => $token]);
-    }
-
-
-    /**
      * @title 获取验证码
      * @desc 获取验证码
      * @author qc
@@ -227,152 +75,6 @@ class Login extends Base
         $this->success('生成验证码成功', $captcha);
     }
 
-    /**
-     * @title 重置密码
-     * @desc 重置密码
-     * @author qc
-     * @url /api/Login/resetPassword
-     * @method POST
-     * @param name:phone type:int require:1 default:-- desc:手机号
-     * @param name:code type:string require:1 default:-- desc:手机验证码
-     * @param name:verify type:string require:1 default:-- desc:图形验证码
-     * @param name:uniqid type:string require:1 default:-- desc:生成验证码图形时返回的uniqid
-     * @param name:password type:string require:1 default:-- desc:密码
-     * @param name:con_password type:string require:1 default:-- desc:确认密码
-     */
-    public function resetPassword()
-    {
-        $verify = input('post.verify');
-        $uniqid = input('post.uniqid');
-        $phone = input('post.phone');
-        $code = input('post.code');
-        $password = input('post.password');
-        $con_password = input('post.con_password');
-        $validate = new UserVali();
-        if (!$validate->scene('reset_password')->check(['phone'=>$phone,'password'=>$password])) {
-            $this->error($validate->getError());
-        }
-        if (!CaptchaService::instance()->check($verify, $uniqid)) $this->error('图形验证码验证失败,请重新输入!');
-        $check_code = $this->checkPhoneCode($phone,$code);
-        if(!$check_code) $this->error('验证码错误');
-        $user_id = User::where('phone',$phone)->value('id');
-        if(!$user_id) $this->error('账号不存在');
-        if($password !== $con_password) $this->error('两次输入密码不一致');
-        User::where(['phone'=>$phone])->update(['encryption_password'=>encrypt_password($password)]);
-        $this->success('修改密码成功');
-    }
-
-
-    public function weChatLogin()
-    {
-        $code = input('post.code');
-        $headimg = input('post.headimg');
-        $name = input('post.name');
-        $pid = input('post.pid', 0);
-        if (empty($code) || empty($headimg) || empty($name)) $this->error('参数错误');
-        $app = Factory::miniProgram(config('app.mini_program'));
-        $data = $app->auth->session($code);
-        if (empty($data['openid'])) {
-            $this->error($data['errmsg']);
-        }
-        $member = Db::name('store_member')->field('id,phone')->where('openid', $data['openid'])->find();
-        if (empty($member)) {
-            $member_data = array(
-                'openid' => $data['openid'],
-                'headimg' => $headimg,
-                'name' => $name,
-                'pid' => $pid,
-                'create_at' => date("Y-m-d H:i:s")
-            );
-            Db::name('store_member')->insert($member_data);
-            $uid = Db::getLastInsID();
-            User::update(['invite_code'=>create_invite_code($uid)],['id'=>$uid]);
-            UserWallet::create(['user_id'=>$uid]);//创建钱包
-            if($pid) InviteInfo::create(['user_id'=>$uid,'pid'=>$pid,'create_at'=>date('Y-m-d H:i:s')]);
-        } else {
-            $uid = $member['id'];
-        }
-        if (empty($uid)) $this->error('数据有误');
-        $token = $this->createJwt($uid);
-        $this->success('登录成功', ['token' => $token,'phone'=>empty($member)  ?'' :$member['phone']]);
-    }
-
-    public function weChatAppLogin()
-    {
-        $code = input('post.code');
-        if(empty($code)) $this->error('参数错误');
-        $res = http_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('app_wx')['app_id'].'&secret='.config('app_wx')['secret'].'&code='.$code.'&grant_type=authorization_code');
-        if(!$res) $this->error('获取access_token有误');
-        $user_info = http_curl('https://api.weixin.qq.com/sns/userinfo?access_token='.$res['access_token'].'&openid='.$res['openid']);
-        if(!$user_info) $this->error('获取用户微信信息有误');
-        $data['app_openid'] = $user_info['openid'];
-        $data['name'] = $user_info['nickname'];
-        $data['headimg'] = $user_info['headimgurl'];
-        $data['token'] = '';
-        $member = User::where('app_openid',$data['app_openid'])->find();
-        if(!$member) $this->success('授权成功',$data);
-        $token = $this->createJwt($member->id);
-        $data['token'] = $token;
-        $this->success('登录成功',$data);
-    }
 
-    public function weChatPcLogin()
-    {
-        $code = input('post.code');
-        $res = http_get('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('pc_wx')['app_id'].'&secret='.config('pc_wx')['secret'].'&code='.$code.'&grant_type=authorization_code');
-        if(!$res) $this->error('获取access_token有误');
-        $user_info = http_get('https://api.weixin.qq.com/sns/userinfo?access_token='.$res['access_token'].'&openid='.$res['openid']);
-        $data['pc_openid'] = $user_info['openid'];
-        $data['name'] = $user_info['nickname'];
-        $data['headimg'] = $user_info['headimgurl'];
-        $member = User::where('pc_openid',$data['pc_openid'])->find();
-        if(!$member) $this->success('授权成功',$data);
-        $token = $this->createJwt($member->id);
-        $data['token'] = $token;
-        $this->success('登录成功',$data);
-    }
-
-    public function phoneCodeLogin()
-    {
-        $phone = input('post.phone');
-        $code = input('post.code');
-        $member = Db::name('store_member')->field('id,phone')->where('phone', $phone)->find();
-        if(empty($phone)) $this->error('用户不存在,请先注册');
-        $check_code = $this->checkPhoneCode($phone,$code);
-        if(!$check_code) $this->error('验证码错误');
-        $this->updatePhoneCode($check_code);
-        $uid = $member['id'];
-        $token = $this->createJwt($uid);
-        $this->success('登录成功', ['token' => $token,'phone'=>empty($member)  ?'' :$member['phone']]);
-    }
-
-    public function passwordLogin()
-    {
-        $phone = input('post.phone');
-        $password = input('post.password');
-        if (empty($password) || empty($phone)) $this->error('参数错误');
-        $member = Db::name('store_member')->where('phone', $phone)->find();
-        if(!$member) $this->error('用户不存在');
-        if(!check_password($password,$member['encryption_password'])) $this->error('密码错误');
-        $token = self::createJwt($member['id']);
-        $this->success('登录成功', ['token' => $token]);
-    }
-    /**
-     * @title 获取版本号
-     * @desc 获取版本号
-     * @author QGF
-     * @url /api/Login/get_store_versions
-     * @method GET
-     * @tag 获取版本号
-     * @param name:type type:int require:1 default:1 desc:类型(1:安卓,2:IOS。默认安卓)
-     * @return name:title type:string default:-- desc:版本号
-     * @return name:content type:string default:-- desc:修改内容
-     * @return name:url type:string default:-- desc:下載地址(安卓有值)
-     */
-    public function get_store_versions(){
-        $type = input('type',1);
-        $store_versions = Db::name('store_versions')->field('title,content,url')->where('type',$type)->find();
-        $this->success('获取成功',$store_versions);
-    }
 
 }

+ 8 - 0
application/common/model/UserTrack.php

@@ -0,0 +1,8 @@
+<?php
+namespace app\common\model;
+use think\Model;
+// 用户足迹
+class UserTrack extends Model
+{
+
+}

+ 154 - 0
vendor/aliyunmail/aliyun-php-sdk-core/AcsRequest.php

@@ -0,0 +1,154 @@
+<?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.
+ */
+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();
+	
+	protected $locationServiceCode;
+	protected $locationEndpointType;
+	
+	function  __construct($product, $version, $actionName, $locationServiceCode = null, $locationEndpointType = "openAPI")
+	{
+	    $this->headers["x-sdk-client"] = "php/2.0.0";
+	    $this->product = $product;
+	    $this->version = $version;
+	    $this->actionName = $actionName;
+	    
+	    $this->locationServiceCode = $locationServiceCode;
+	    $this->locationEndpointType = $locationEndpointType;
+	}
+	
+	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;
+    } 
+	
+	public function getLocationServiceCode()
+	{
+		return $this->locationServiceCode;
+	}
+
+	public function getLocationEndpointType()
+	{
+		return $this->locationEndpointType;
+	}
+}

+ 44 - 0
vendor/aliyunmail/aliyun-php-sdk-core/AcsResponse.php

@@ -0,0 +1,44 @@
+<?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.
+ */
+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;
+    }
+}

+ 83 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Auth/Credential.php

@@ -0,0 +1,83 @@
+<?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.
+ */
+class Credential
+{
+    private $dateTimeFormat = 'Y-m-d\TH:i:s\Z';
+    private $refreshDate;
+    private $expiredDate;
+    private $accessKeyId;
+    private $accessSecret;
+    private $securityToken;
+    
+    public 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;
+    }
+}

+ 27 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Auth/ISigner.php

@@ -0,0 +1,27 @@
+<?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.
+ */
+interface ISigner
+{
+    public function getSignatureMethod();
+    
+    public function getSignatureVersion();
+    
+    public function signString($source, $accessSecret);
+}

+ 36 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Auth/ShaHmac1Signer.php

@@ -0,0 +1,36 @@
+<?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.
+ */
+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";
+    }
+}

+ 36 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Auth/ShaHmac256Signer.php

@@ -0,0 +1,36 @@
+<?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.
+ */
+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";
+    }
+}

+ 48 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Autoloader/Autoloader.php

@@ -0,0 +1,48 @@
+<?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.
+ */
+spl_autoload_register("Autoloader::autoload");
+class Autoloader
+{
+    private static $autoloadPathArray = array(
+        "aliyun-php-sdk-core",
+        "aliyun-php-sdk-core/Auth",
+        "aliyun-php-sdk-core/Http",
+        "aliyun-php-sdk-core/Profile",
+        "aliyun-php-sdk-core/Regions",
+        "aliyun-php-sdk-core/Exception"
+    );
+    
+    public static function autoload($className)
+    {
+        foreach (self::$autoloadPathArray as $path) {
+            $file = dirname(dirname(__DIR__)).DIRECTORY_SEPARATOR.$path.DIRECTORY_SEPARATOR.$className.".php";
+            $file = str_replace('\\', DIRECTORY_SEPARATOR, $file);
+            if (is_file($file)) {
+                include_once $file;
+                break;
+            }
+        }
+    }
+    
+    public static function addAutoloadPath($path)
+    {
+        array_push(self::$autoloadPathArray, $path);
+    }
+}

+ 47 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Config.php

@@ -0,0 +1,47 @@
+<?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.
+ */
+include_once 'Autoloader/Autoloader.php';
+include_once 'Regions/EndpointConfig.php';
+include_once 'Regions/LocationService.php';
+
+//config sdk auto load path.
+Autoloader::addAutoloadPath("aliyun-php-sdk-ecs");
+Autoloader::addAutoloadPath("aliyun-php-sdk-batchcompute");
+Autoloader::addAutoloadPath("aliyun-php-sdk-sts");
+Autoloader::addAutoloadPath("aliyun-php-sdk-push");
+Autoloader::addAutoloadPath("aliyun-php-sdk-ram");
+Autoloader::addAutoloadPath("aliyun-php-sdk-ubsms");
+Autoloader::addAutoloadPath("aliyun-php-sdk-ubsms-inner");
+Autoloader::addAutoloadPath("aliyun-php-sdk-green");
+Autoloader::addAutoloadPath("aliyun-php-sdk-dm");
+Autoloader::addAutoloadPath("aliyun-php-sdk-iot");
+Autoloader::addAutoloadPath("aliyun-php-sdk-jaq");
+Autoloader::addAutoloadPath("aliyun-php-sdk-cs");
+Autoloader::addAutoloadPath("aliyun-php-sdk-live");
+Autoloader::addAutoloadPath("aliyun-php-sdk-vpc");
+Autoloader::addAutoloadPath("aliyun-php-sdk-kms");
+Autoloader::addAutoloadPath("aliyun-php-sdk-rds");
+Autoloader::addAutoloadPath("aliyun-php-sdk-slb");
+Autoloader::addAutoloadPath("aliyun-php-sdk-cms");
+
+//config http proxy
+define('ENABLE_HTTP_PROXY', false);
+define('HTTP_PROXY_IP', '127.0.0.1');
+define('HTTP_PROXY_PORT', '8888');

+ 134 - 0
vendor/aliyunmail/aliyun-php-sdk-core/DefaultAcsClient.php

@@ -0,0 +1,134 @@
+<?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.
+ */
+class DefaultAcsClient implements IAcsClient
+{
+    public $iClientProfile;
+    public $__urlTestFlag__;
+    private $locationService;
+    
+    public function __construct($iClientProfile)
+    {
+        $this->iClientProfile = $iClientProfile;
+        $this->__urlTestFlag__ = false;
+        $this->locationService = new LocationService($this->iClientProfile);
+    }
+    
+    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);
+
+        // Get the domain from the Location Service by speicified `ServiceCode` and `RegionId`.
+        $domain = null;
+        if (null != $request->getLocationServiceCode())
+        {
+            $domain = $this->locationService->findProductDomain($request->getRegionId(), $request->getLocationServiceCode(), $request->getLocationEndpointType(), $request->getProduct());
+        }       
+        if ($domain == null)
+        {
+            $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->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);
+        } elseif ("XML" == $format) {
+            $respObject = @simplexml_load_string($body);
+        } elseif ("RAW" == $format) {
+            $respObject = $body;
+        }
+        return $respObject;
+    }
+}

+ 63 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Exception/ClientException.php

@@ -0,0 +1,63 @@
+<?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.
+ */
+class ClientException extends Exception
+{
+    public 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;
+    }
+}

+ 44 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Exception/ServerException.php

@@ -0,0 +1,44 @@
+<?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.
+ */
+class ServerException extends ClientException
+{
+    private $httpStatus;
+    private $requestId;
+
+    public 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;
+    }
+}

+ 80 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Http/HttpHelper.php

@@ -0,0 +1,80 @@
+<?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.
+ */
+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;
+    }
+    public static function getPostHttpBody($postFildes)
+    {
+        $content = "";
+        foreach ($postFildes as $apiParamKey => $apiParamValue) {
+            $content .= "$apiParamKey=" . urlencode($apiParamValue) . "&";
+        }
+        return substr($content, 0, -1);
+    }
+    public static function getHttpHearders($headers)
+    {
+        $httpHeader = array();
+        foreach ($headers as $key => $value) {
+            array_push($httpHeader, $key.":".$value);
+        }
+        return $httpHeader;
+    }
+}

+ 52 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Http/HttpResponse.php

@@ -0,0 +1,52 @@
+<?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.
+ */
+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;
+    }
+}

+ 23 - 0
vendor/aliyunmail/aliyun-php-sdk-core/IAcsClient.php

@@ -0,0 +1,23 @@
+<?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.
+ */
+interface IAcsClient
+{
+    public function doAction($requst);
+}

+ 146 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Profile/DefaultProfile.php

@@ -0,0 +1,146 @@
+<?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.
+ */
+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);
+		}
+
+		LocationService::addEndPoint($regionId, $product, $domain);
+	}
+	
+	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);
+		$productsDomains = array(new ProductDomain($product, $domain));
+		$endpoint = new Endpoint($endpointName, $regionIds, $productsDomains);
+		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::findProductDomainAndUpdate($productDomains, $product, $domain)) {
+            array_push($productDomains, new ProductDomain($product, $domain));
+        }
+
+        $endpoint->setProductDomains($productDomains);
+    }
+    
+    private static function findProductDomainAndUpdate($productDomains, $product, $domain)
+    {
+        foreach ($productDomains as $key => $productDomain) {
+            if ($productDomain->getProductName() == $product) {
+                $productDomain->setDomainName($domain);
+                return $productDomain;
+            }
+        }
+        return null;
+    }
+}

+ 29 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Profile/IClientProfile.php

@@ -0,0 +1,29 @@
+<?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.
+ */
+interface IClientProfile
+{
+    public function getSigner();
+    
+    public function getRegionId();
+    
+    public function getFormat();
+    
+    public function getCredential();
+}

+ 62 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Regions/Endpoint.php

@@ -0,0 +1,62 @@
+<?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.
+ */
+class Endpoint
+{
+    private $name;
+    private $regionIds;
+    private $productDomains;
+    
+    public 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;
+    }
+}

+ 65 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Regions/EndpointConfig.php

@@ -0,0 +1,65 @@
+<?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.
+ */
+$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();
+        } elseif (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);

+ 60 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Regions/EndpointProvider.php

@@ -0,0 +1,60 @@
+<?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.
+ */
+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;
+    }
+}

+ 120 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Regions/LocationService.php

@@ -0,0 +1,120 @@
+<?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.
+ */
+
+define("LOCATION_SERVICE_PRODUCT_NAME", "Location");
+define("LOCATION_SERVICE_DOMAIN", "location.aliyuncs.com");
+define("LOCATION_SERVICE_VERSION", "2015-06-12");
+define("LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION", "DescribeEndpoints");
+define("LOCATION_SERVICE_REGION", "cn-hangzhou");
+define("CACHE_EXPIRE_TIME", 3600);
+
+class DescribeEndpointRequest extends RpcAcsRequest
+{
+	function __construct($id, $serviceCode, $endPointType) {
+		parent::__construct(LOCATION_SERVICE_PRODUCT_NAME, LOCATION_SERVICE_VERSION, LOCATION_SERVICE_DESCRIBE_ENDPOINT_ACTION);
+		
+		$this->queryParameters["Id"] = $id;
+		$this->queryParameters["ServiceCode"] = $serviceCode;
+		$this->queryParameters["Type"] = $endPointType;
+		$this->setRegionId(LOCATION_SERVICE_REGION);
+		
+		$this->setAcceptFormat("JSON");
+	}
+}
+
+class LocationService
+{	
+	private $clientProfile;
+	public static $cache = array();
+	public static $lastClearTimePerProduct = array();
+	public static $serviceDomain = LOCATION_SERVICE_DOMAIN;
+	
+	function __construct($clientProfile) {
+		$this->clientProfile = $clientProfile;
+	}
+	
+	public function findProductDomain($regionId, $serviceCode, $endPointType, $product)
+	{
+		$key = $regionId.'#'.$product;
+		@$domain = self::$cache[$key];
+		if ($domain == null || $this->checkCacheIsExpire($key) == true)
+		{
+			$domain = $this->findProductDomainFromLocationService($regionId, $serviceCode, $endPointType);
+            self::$cache[$key] = $domain;
+		}
+
+		return $domain;
+	}
+
+	public static function addEndPoint($regionId, $product, $domain)
+    {
+        $key = $regionId.'#'.$product;
+        self::$cache[$key] = $domain;
+        $lastClearTime = mktime(0, 0, 0, 1, 1, 2999);
+        self::$lastClearTimePerProduct[$key] = $lastClearTime;
+    }
+
+    public static function modifyServiceDomain($domain)
+    {
+        self::$serviceDomain = $domain;
+    }
+
+	private function checkCacheIsExpire($key)
+    {
+        $lastClearTime = self::$lastClearTimePerProduct[$key];
+        if ($lastClearTime == null)
+        {
+            $lastClearTime = time();
+            self::$lastClearTimePerProduct[$key] = $lastClearTime;
+        }
+
+        $now = time();
+        $elapsedTime = $now - $lastClearTime;
+
+        if ($elapsedTime > CACHE_EXPIRE_TIME)
+        {
+            $lastClearTime = time();
+            self::$lastClearTimePerProduct[$key] = $lastClearTime;
+            return true;
+        }
+
+        return false;
+    }
+	
+	private function findProductDomainFromLocationService($regionId, $serviceCode, $endPointType)
+	{
+		$request = new DescribeEndpointRequest($regionId, $serviceCode, $endPointType);
+		
+		$signer = $this->clientProfile->getSigner();
+		$credential = $this->clientProfile->getCredential();
+		
+		$requestUrl = $request->composeUrl($signer, $credential, self::$serviceDomain);
+		
+		$httpResponse = HttpHelper::curl($requestUrl, $request->getMethod(), null, $request->getHeaders());
+		
+		if (!$httpResponse->isSuccess())
+		{
+			return null;
+		}
+
+		$respObj = json_decode($httpResponse->getBody());
+		return $respObj->Endpoints->Endpoint[0]->Endpoint;
+	}
+}

+ 47 - 0
vendor/aliyunmail/aliyun-php-sdk-core/Regions/ProductDomain.php

@@ -0,0 +1,47 @@
+<?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.
+ */
+class ProductDomain
+{
+    private $productName;
+    private $domainName;
+    
+    public 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
vendor/aliyunmail/aliyun-php-sdk-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.cn-shanghai.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.us-west-1.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.ap-southeast-1.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>

+ 203 - 0
vendor/aliyunmail/aliyun-php-sdk-core/RoaAcsRequest.php

@@ -0,0 +1,203 @@
+<?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.
+ */
+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, $locationServiceCode = null, $locationEndpointType = "openAPI")
+    {
+        parent::__construct($product, $version, $actionName, $locationServiceCode, $locationEndpointType);
+        $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;
+    }
+}

+ 113 - 0
vendor/aliyunmail/aliyun-php-sdk-core/RpcAcsRequest.php

@@ -0,0 +1,113 @@
+<?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.
+ */
+abstract class RpcAcsRequest extends AcsRequest
+{
+    private $dateTimeFormat = 'Y-m-d\TH:i:s\Z';
+    private $domainParameters = array();
+
+    function  __construct($product, $version, $actionName, $locationServiceCode = null, $locationEndpointType = "openAPI")
+    {
+        parent::__construct($product, $version, $actionName, $locationServiceCode, $locationEndpointType);
+        $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"] = md5(uniqid(mt_rand(), 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;
+    }
+}

+ 35 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php

@@ -0,0 +1,35 @@
+<?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.
+ */
+include_once '../../Config.php';
+class CredentialTest extends PHPUnit_Framework_TestCase
+{
+    public function testCredential()
+    {
+        $credential = new Credential("accessKeyId", "accessSecret");
+        $this->assertEquals("accessKeyId", $credential->getAccessKeyId());
+        $this->assertEquals("accessSecret", $credential->getAccessSecret());
+        $this->assertNotNull($credential->getRefreshDate());
+        
+        $dateNow = date("Y-m-d\TH:i:s\Z");
+        $credential->setExpiredDate(1);
+        $this->assertNotNull($credential->getExpiredDate());
+        $this->assertTrue($credential->getExpiredDate() > $dateNow);
+    }
+}

+ 28 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php

@@ -0,0 +1,28 @@
+<?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.
+ */
+include_once '../../Config.php';
+class ShaHmac1SignerTest extends PHPUnit_Framework_TestCase
+{
+    public function testShaHmac1Signer()
+    {
+        $signer = new ShaHmac1Signer();
+        $this->assertEquals("33nmIV5/p6kG/64eLXNljJ5vw84=", $signer->signString("this is a ShaHmac1 test.", "accessSecret"));
+    }
+}

+ 30 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php

@@ -0,0 +1,30 @@
+<?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.
+ */
+include_once '../../Config.php';
+
+class ShaHmac256SignerTest extends PHPUnit_Framework_TestCase
+{
+    public function testShaHmac256Signer()
+    {
+        $signer = new ShaHmac256Signer();
+        $this->assertEquals("TpF1lE/avV9EHGWGg9Vo/QTd2bLRwFCk9jjo56uRbCo=",
+            $signer->signString("this is a ShaHmac256 test.", "accessSecret"));
+    }
+}

+ 40 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/BaseTest.php

@@ -0,0 +1,40 @@
+<?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.
+ */
+class BaseTest extends PHPUnit_Framework_TestCase
+{
+    public $client = null;
+    public function setUp()
+    {
+        $path = substr(dirname(__FILE__), 0, strripos(dirname(__FILE__), DIRECTORY_SEPARATOR)).DIRECTORY_SEPARATOR;
+        include_once $path.'Config.php';
+        include_once 'Ecs/Rquest/DescribeRegionsRequest.php';
+        include_once 'BatchCompute/ListImagesRequest.php';
+
+        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "AccessKey", "AccessSecret");
+        $this->client = new DefaultAcsClient($iClientProfile);
+    }
+    
+    public function getProperty($propertyKey)
+    {
+        $accessKey = "";
+        $accessSecret = "";
+        $iClientProfile = DefaultProfile::getProfile("cn-hangzhou", "AccessKey", "AccessSecret");
+    }
+}

+ 30 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php

@@ -0,0 +1,30 @@
+<?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 UnitTest\BatchCompute\Request;
+
+class ListImagesRequest extends \RoaAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("BatchCompute", "2013-01-11", "ListImages");
+        $this->setUriPattern("/images");
+        $this->setMethod("GET");
+    }
+}

+ 42 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php

@@ -0,0 +1,42 @@
+<?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.
+ */
+include_once 'BaseTest.php';
+use UnitTest\Ecs\Request as Ecs;
+use UnitTest\BatchCompute\Request as BC;
+
+class DefaultAcsClientTest extends BaseTest
+{
+    public function testDoActionRPC()
+    {
+        $request = new Ecs\DescribeRegionsRequest();
+        $response = $this->client->doAction($request);
+        
+        $this->assertNotNull($response->RequestId);
+        $this->assertNotNull($response->Regions->Region[0]->LocalName);
+        $this->assertNotNull($response->Regions->Region[0]->RegionId);
+    }
+    
+    public function testDoActionROA()
+    {
+        $request = new BC\ListImagesRequest();
+        $response = $this->client->doAction($request);
+        $this->assertNotNull($response);
+    }
+}

+ 80 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php

@@ -0,0 +1,80 @@
+<?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 UnitTest\Ecs\Request;
+
+class DescribeRegionsRequest extends \RpcAcsRequest
+{
+    public function __construct()
+    {
+        parent::__construct("Ecs", "2014-05-26", "DescribeRegions");
+    }
+
+    private $ownerId;
+
+    private $resourceOwnerAccount;
+
+    private $resourceOwnerId;
+
+    private $ownerAccount;
+
+    public function getOwnerId()
+    {
+        return $this->ownerId;
+    }
+
+    public function setOwnerId($ownerId)
+    {
+        $this->ownerId = $ownerId;
+        $this->queryParameters["OwnerId"]=$ownerId;
+    }
+
+    public function getResourceOwnerAccount()
+    {
+        return $this->resourceOwnerAccount;
+    }
+
+    public function setResourceOwnerAccount($resourceOwnerAccount)
+    {
+        $this->resourceOwnerAccount = $resourceOwnerAccount;
+        $this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+    }
+
+    public function getResourceOwnerId()
+    {
+        return $this->resourceOwnerId;
+    }
+
+    public function setResourceOwnerId($resourceOwnerId)
+    {
+        $this->resourceOwnerId = $resourceOwnerId;
+        $this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+    }
+
+    public function getOwnerAccount()
+    {
+        return $this->ownerAccount;
+    }
+
+    public function setOwnerAccount($ownerAccount)
+    {
+        $this->ownerAccount = $ownerAccount;
+        $this->queryParameters["OwnerAccount"]=$ownerAccount;
+    }
+}

+ 29 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php

@@ -0,0 +1,29 @@
+<?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.
+ */
+include_once '../BaseTest.php';
+class HttpHelperTest extends BaseTest
+{
+    public function testCurl()
+    {
+        $httpResponse = HttpHelper::curl("ecs.aliyuncs.com");
+        $this->assertEquals(400, $httpResponse->getStatus());
+        $this->assertNotNull($httpResponse->getBody());
+    }
+}

+ 60 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php

@@ -0,0 +1,60 @@
+<?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.
+ */
+include_once '../../Config.php';
+class DefaultProfileTest extends PHPUnit_Framework_TestCase
+{
+    public function testGetProfile()
+    {
+        $profile = DefaultProfile::getProfile("cn-hangzhou", "accessId", "accessSecret");
+        $this->assertEquals("cn-hangzhou", $profile->getRegionId());
+        $this->assertEquals("accessId", $profile->getCredential()->getAccessKeyId());
+        $this->assertEquals("accessSecret", $profile->getCredential()->getAccessSecret());
+    }
+    
+    public function testAddEndpoint()
+    {
+        $profile = DefaultProfile::getProfile("cn-hangzhou", "accessId", "accessSecret");
+        $profile->addEndpoint("cn-hangzhou", "cn-hangzhou", "TestProduct", "testproduct.aliyuncs.com");
+        $endpoints = $profile->getEndpoints();
+        foreach ($endpoints as $key => $endpoint) {
+            if ("cn-hangzhou" == $endpoint->getName()) {
+                $regionIds = $endpoint->getRegionIds();
+                $this->assertContains("cn-hangzhou", $regionIds);
+                
+                $productDomains= $endpoint->getProductDomains();
+                $this->assertNotNull($productDomains);
+                $productDomain = $this->getProductDomain($productDomains);
+                $this->assertNotNull($productDomain);
+                $this->assertEquals("TestProduct", $productDomain->getProductName());
+                $this->assertEquals("testproduct.aliyuncs.com", $productDomain->getDomainName());
+            }
+        }
+    }
+    
+    private function getProductDomain($productDomains)
+    {
+        foreach ($productDomains as $productDomain) {
+            if ($productDomain->getProductName() == "TestProduct") {
+                return $productDomain;
+            }
+        }
+        return null;
+    }
+}

+ 46 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php

@@ -0,0 +1,46 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zhangw
+ * Date: 2017/7/17
+ * Time: 下午4:57
+ */
+
+include_once '../../Config.php';
+
+use PHPUnit\Framework\TestCase;
+
+class EndPointByLocationTest extends TestCase
+{
+    private $locationService;
+
+    private $clientProfile;
+
+    private function initClient()
+    {
+        # 创建 DefaultAcsClient 实例并初始化
+        $this->clientProfile = DefaultProfile::getProfile(
+            "cn-shanghai",                   # 您的 Region ID
+            "<your AK>",               # 您的 Access Key ID
+            "<your Secret>"            # 您的 Access Key Secret
+        );
+
+        $this->locationService = new LocationService($this->clientProfile);
+    }
+
+    public function testFindProductDomain()
+    {
+        $this->initClient();
+        $domain = $this->locationService->findProductDomain("cn-shanghai", "apigateway", "openAPI", "CloudAPI");
+        $this->assertEquals("apigateway.cn-shanghai.aliyuncs.com", $domain);
+    }
+
+    public function testFindProductDomainWithAddEndPoint()
+    {
+        DefaultProfile::addEndpoint("cn-shanghai", "cn-shanghai", "CloudAPI", "apigateway.cn-shanghai123.aliyuncs.com");
+        $this->initClient();
+        $domain = $this->locationService->findProductDomain("cn-shanghai", "apigateway", "openAPI", "CloudAPI");
+        $this->assertEquals("apigateway.cn-shanghai123.aliyuncs.com", $domain);
+    }
+
+}

+ 28 - 0
vendor/aliyunmail/aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php

@@ -0,0 +1,28 @@
+<?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.
+ */
+include_once '../../Config.php';
+
+class EndpointProviderTest extends PHPUnit_Framework_TestCase
+{
+    public function testFindProductDomain()
+    {
+        $this->assertEquals("ecs.aliyuncs.com", EndpointProvider::findProductDomain("cn-hangzhou", "Ecs"));
+    }
+}

+ 126 - 0
vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/BatchSendMailRequest.php

@@ -0,0 +1,126 @@
+<?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 Dm\Request\V20151123;
+
+class BatchSendMailRequest extends \RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dm", "2015-11-23", "BatchSendMail");
+	}
+
+	private  $ownerId;
+
+	private  $resourceOwnerAccount;
+
+	private  $resourceOwnerId;
+
+	private  $templateName;
+
+	private  $accountName;
+
+	private  $receiversName;
+
+	private  $addressType;
+
+	private  $tagName;
+	private  $clickTrace;
+	public function getClickTrace() {
+		return $this->clickTrace;
+	}
+
+	public function setClickTrace($clickTrace) {
+		$this->clickTrace = $clickTrace;
+		$this->queryParameters["ClickTrace"]=$clickTrace;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getTemplateName() {
+		return $this->templateName;
+	}
+
+	public function setTemplateName($templateName) {
+		$this->templateName = $templateName;
+		$this->queryParameters["TemplateName"]=$templateName;
+	}
+
+	public function getAccountName() {
+		return $this->accountName;
+	}
+
+	public function setAccountName($accountName) {
+		$this->accountName = $accountName;
+		$this->queryParameters["AccountName"]=$accountName;
+	}
+
+	public function getReceiversName() {
+		return $this->receiversName;
+	}
+
+	public function setReceiversName($receiversName) {
+		$this->receiversName = $receiversName;
+		$this->queryParameters["ReceiversName"]=$receiversName;
+	}
+
+	public function getAddressType() {
+		return $this->addressType;
+	}
+
+	public function setAddressType($addressType) {
+		$this->addressType = $addressType;
+		$this->queryParameters["AddressType"]=$addressType;
+	}
+
+	public function getTagName() {
+		return $this->tagName;
+	}
+
+	public function setTagName($tagName) {
+		$this->tagName = $tagName;
+		$this->queryParameters["TagName"]=$tagName;
+	}
+	
+}

+ 171 - 0
vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/SingleSendMailRequest.php

@@ -0,0 +1,171 @@
+<?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 Dm\Request\V20151123;
+
+class SingleSendMailRequest extends \RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dm", "2015-11-23", "SingleSendMail");
+		parent::setMethod("POST");
+	}
+
+	private  $ownerId;
+
+	private  $resourceOwnerAccount;
+
+	private  $resourceOwnerId;
+
+	private  $accountName;
+
+	private  $addressType;
+
+	private  $tagName;
+
+	private  $replyToAddress;
+
+	private  $toAddress;
+
+	private  $subject;
+
+	private  $htmlBody;
+
+	private  $textBody;
+
+	private  $fromAlias;
+	private  $clickTrace;
+	public function getClickTrace() {
+		return $this->clickTrace;
+	}
+
+	public function setClickTrace($clickTrace) {
+		$this->clickTrace = $clickTrace;
+		$this->queryParameters["ClickTrace"]=$clickTrace;
+	}
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getAccountName() {
+		return $this->accountName;
+	}
+
+	public function setAccountName($accountName) {
+		$this->accountName = $accountName;
+		$this->queryParameters["AccountName"]=$accountName;
+	}
+
+	public function getAddressType() {
+		return $this->addressType;
+	}
+
+	public function setAddressType($addressType) {
+		$this->addressType = $addressType;
+		$this->queryParameters["AddressType"]=$addressType;
+	}
+
+	public function getTagName() {
+		return $this->tagName;
+	}
+
+	public function setTagName($tagName) {
+		$this->tagName = $tagName;
+		$this->queryParameters["TagName"]=$tagName;
+	}
+
+	public function getReplyToAddress() {
+		return $this->replyToAddress;
+	}
+
+	public function setReplyToAddress($replyToAddress) {
+		$this->replyToAddress = $replyToAddress;
+		$this->queryParameters["ReplyToAddress"]=$replyToAddress;
+	}
+
+	public function getToAddress() {
+		return $this->toAddress;
+	}
+
+	public function setToAddress($toAddress) {
+		$this->toAddress = $toAddress;
+		$this->queryParameters["ToAddress"]=$toAddress;
+	}
+
+	public function getSubject() {
+		return $this->subject;
+	}
+
+	public function setSubject($subject) {
+		$this->subject = $subject;
+		$this->queryParameters["Subject"]=$subject;
+	}
+
+	public function getHtmlBody() {
+		return $this->htmlBody;
+	}
+
+	public function setHtmlBody($htmlBody) {
+		$this->htmlBody = $htmlBody;
+		$this->queryParameters["HtmlBody"]=$htmlBody;
+	}
+
+	public function getTextBody() {
+		return $this->textBody;
+	}
+
+	public function setTextBody($textBody) {
+		$this->textBody = $textBody;
+		$this->queryParameters["TextBody"]=$textBody;
+	}
+
+	public function getFromAlias() {
+		return $this->fromAlias;
+	}
+
+	public function setFromAlias($fromAlias) {
+		$this->fromAlias = $fromAlias;
+		$this->queryParameters["FromAlias"]=$fromAlias;
+	}
+	
+}

+ 107 - 0
vendor/aliyunmail/aliyun-php-sdk-dm/Dm/Request/V20151123/SingleSendSmsRequest.php

@@ -0,0 +1,107 @@
+<?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 Dm\Request\V20151123;
+
+class SingleSendSmsRequest extends \RpcAcsRequest
+{
+	function  __construct()
+	{
+		parent::__construct("Dm", "2015-11-23", "SingleSendSms");		
+	}
+
+	private  $ownerId;
+
+	private  $resourceOwnerAccount;
+
+	private  $resourceOwnerId;
+
+	private  $signName;
+
+	private  $templateCode;
+
+	private  $recNum;
+
+	private  $paramString;
+
+
+	public function getOwnerId() {
+		return $this->ownerId;
+	}
+
+	public function setOwnerId($ownerId) {
+		$this->ownerId = $ownerId;
+		$this->queryParameters["OwnerId"]=$ownerId;
+	}
+
+	public function getResourceOwnerAccount() {
+		return $this->resourceOwnerAccount;
+	}
+
+	public function setResourceOwnerAccount($resourceOwnerAccount) {
+		$this->resourceOwnerAccount = $resourceOwnerAccount;
+		$this->queryParameters["ResourceOwnerAccount"]=$resourceOwnerAccount;
+	}
+
+	public function getResourceOwnerId() {
+		return $this->resourceOwnerId;
+	}
+
+	public function setResourceOwnerId($resourceOwnerId) {
+		$this->resourceOwnerId = $resourceOwnerId;
+		$this->queryParameters["ResourceOwnerId"]=$resourceOwnerId;
+	}
+
+	public function getSignName() {
+		return $this->signName;
+	}
+
+	public function setSignName($signName) {
+		$this->signName = $signName;
+		$this->queryParameters["SignName"]=$signName;
+	}
+
+	public function getTemplateCode() {
+		return $this->templateCode;
+	}
+
+	public function setTemplateCode($templateCode) {
+		$this->templateCode = $templateCode;
+		$this->queryParameters["TemplateCode"]=$templateCode;
+	}
+
+	public function getRecNum() {
+		return $this->recNum;
+	}
+
+	public function setRecNum($recNum) {
+		$this->recNum = $recNum;
+		$this->queryParameters["RecNum"]=$recNum;
+	}
+
+	public function getParamString() {
+		return $this->paramString;
+	}
+
+	public function setParamString($paramString) {
+		$this->paramString = $paramString;
+		$this->queryParameters["ParamString"]=$paramString;
+	}
+	
+}