| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | 
							- <?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);
 
- /**
 
-  * @deprecated See: https://github.com/aliyun/openapi-sdk-php
 
-  * Class DescribeEndpointRequest
 
-  */
 
- class DescribeEndpointRequest extends RpcAcsRequest
 
- {
 
-     /**
 
-      * DescribeEndpointRequest constructor.
 
-      *
 
-      * @param $id
 
-      * @param $serviceCode
 
-      * @param $endPointType
 
-      */
 
-     public 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
 
- {
 
-     /**
 
-      * @var IClientProfile
 
-      */
 
-     private $clientProfile;
 
-     /**
 
-      * @var array
 
-      */
 
-     public static $cache = array();
 
-     /**
 
-      * @var array
 
-      */
 
-     public static $lastClearTimePerProduct = array();
 
-     /**
 
-      * @var string
 
-      */
 
-     public static $serviceDomain = LOCATION_SERVICE_DOMAIN;
 
-     /**
 
-      * LocationService constructor.
 
-      *
 
-      * @param $clientProfile
 
-      */
 
-     public function __construct($clientProfile)
 
-     {
 
-         $this->clientProfile = $clientProfile;
 
-     }
 
-     /**
 
-      * @param $regionId
 
-      * @param $serviceCode
 
-      * @param $endPointType
 
-      * @param $product
 
-      *
 
-      * @return mixed|null
 
-      * @throws ClientException
 
-      */
 
-     public function findProductDomain($regionId, $serviceCode, $endPointType, $product)
 
-     {
 
-         $key    = $regionId . '#' . $product;
 
-         $domain = isset(self::$cache[$key]) ? self::$cache[$key] : null;
 
-         if ($domain === null || $this->checkCacheIsExpire($key) == true) {
 
-             $domain            = $this->findProductDomainFromLocationService($regionId, $serviceCode, $endPointType);
 
-             self::$cache[$key] = $domain;
 
-         }
 
-         return $domain;
 
-     }
 
-     /**
 
-      * @param $regionId
 
-      * @param $product
 
-      * @param $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;
 
-     }
 
-     /**
 
-      * @param $domain
 
-      */
 
-     public static function modifyServiceDomain($domain)
 
-     {
 
-         self::$serviceDomain = $domain;
 
-     }
 
-     /**
 
-      * @param $key
 
-      *
 
-      * @return bool
 
-      */
 
-     private function checkCacheIsExpire($key)
 
-     {
 
-         $lastClearTime = isset(self::$lastClearTimePerProduct[$key])
 
-             ? self::$lastClearTimePerProduct[$key]
 
-             : null;
 
-         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;
 
-     }
 
-     /**
 
-      * @param $regionId
 
-      * @param $serviceCode
 
-      * @param $endPointType
 
-      *
 
-      * @return string|null
 
-      * @throws ClientException
 
-      */
 
-     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;
 
-     }
 
- }
 
 
  |