├── .gitignore ├── .php_cs ├── .scrutinizer.yml ├── .styleci.yml ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── lib ├── AliyunMNS │ ├── AsyncCallback.php │ ├── Client.php │ ├── Common │ │ └── XMLParser.php │ ├── Config.php │ ├── Constants.php │ ├── Exception │ │ ├── BatchDeleteFailException.php │ │ ├── BatchSendFailException.php │ │ ├── InvalidArgumentException.php │ │ ├── MalformedXMLException.php │ │ ├── MessageNotExistException.php │ │ ├── MnsException.php │ │ ├── QueueAlreadyExistException.php │ │ ├── QueueNotExistException.php │ │ ├── ReceiptHandleErrorException.php │ │ ├── SubscriptionAlreadyExistException.php │ │ ├── SubscriptionNotExistException.php │ │ ├── TopicAlreadyExistException.php │ │ └── TopicNotExistException.php │ ├── Http │ │ └── HttpClient.php │ ├── Model │ │ ├── DeleteMessageErrorItem.php │ │ ├── Message.php │ │ ├── QueueAttributes.php │ │ ├── SendMessageRequestItem.php │ │ ├── SendMessageResponseItem.php │ │ ├── SubscriptionAttributes.php │ │ ├── TopicAttributes.php │ │ └── UpdateSubscriptionAttributes.php │ ├── Queue.php │ ├── Requests │ │ ├── BaseRequest.php │ │ ├── BatchDeleteMessageRequest.php │ │ ├── BatchPeekMessageRequest.php │ │ ├── BatchReceiveMessageRequest.php │ │ ├── BatchSendMessageRequest.php │ │ ├── ChangeMessageVisibilityRequest.php │ │ ├── CreateQueueRequest.php │ │ ├── CreateTopicRequest.php │ │ ├── DeleteMessageRequest.php │ │ ├── DeleteQueueRequest.php │ │ ├── DeleteTopicRequest.php │ │ ├── GetQueueAttributeRequest.php │ │ ├── GetSubscriptionAttributeRequest.php │ │ ├── GetTopicAttributeRequest.php │ │ ├── ListQueueRequest.php │ │ ├── ListSubscriptionRequest.php │ │ ├── ListTopicRequest.php │ │ ├── PeekMessageRequest.php │ │ ├── PublishMessageRequest.php │ │ ├── ReceiveMessageRequest.php │ │ ├── SendMessageRequest.php │ │ ├── SetQueueAttributeRequest.php │ │ ├── SetSubscriptionAttributeRequest.php │ │ ├── SetTopicAttributeRequest.php │ │ ├── SubscribeRequest.php │ │ └── UnsubscribeRequest.php │ ├── Responses │ │ ├── BaseResponse.php │ │ ├── BatchDeleteMessageResponse.php │ │ ├── BatchPeekMessageResponse.php │ │ ├── BatchReceiveMessageResponse.php │ │ ├── BatchSendMessageResponse.php │ │ ├── ChangeMessageVisibilityResponse.php │ │ ├── CreateQueueResponse.php │ │ ├── CreateTopicResponse.php │ │ ├── DeleteMessageResponse.php │ │ ├── DeleteQueueResponse.php │ │ ├── DeleteTopicResponse.php │ │ ├── GetQueueAttributeResponse.php │ │ ├── GetSubscriptionAttributeResponse.php │ │ ├── GetTopicAttributeResponse.php │ │ ├── ListQueueResponse.php │ │ ├── ListSubscriptionResponse.php │ │ ├── ListTopicResponse.php │ │ ├── MnsPromise.php │ │ ├── PeekMessageResponse.php │ │ ├── PublishMessageResponse.php │ │ ├── ReceiveMessageResponse.php │ │ ├── SendMessageResponse.php │ │ ├── SetQueueAttributeResponse.php │ │ ├── SetSubscriptionAttributeResponse.php │ │ ├── SetTopicAttributeResponse.php │ │ ├── SubscribeResponse.php │ │ └── UnsubscribeResponse.php │ ├── Signature │ │ └── Signature.php │ ├── Topic.php │ └── Traits │ │ ├── MessageIdAndMD5.php │ │ ├── MessagePropertiesForPeek.php │ │ ├── MessagePropertiesForPublish.php │ │ ├── MessagePropertiesForReceive.php │ │ └── MessagePropertiesForSend.php └── README.md ├── phpunit.xml ├── src ├── Connectors │ └── MnsConnector.php ├── Jobs │ └── MnsJob.php ├── MnsAdapter.php ├── MnsQueue.php └── NotImplementedException.php └── tests ├── AbstractTestCase.php ├── Jobs └── MnsJobTest.php ├── MnsAdapterTest.php ├── MnsQueueTest.php └── bootstrap.php /.gitignore: -------------------------------------------------------------------------------- 1 | # Finder 2 | ._.DS_Store 3 | .DS_Store 4 | 5 | # PHPStorm 6 | .idea 7 | 8 | # Composer vendor 9 | /vendor 10 | 11 | # Node Module 12 | /node_modules 13 | 14 | # Configuration file 15 | .env 16 | 17 | # IDE helper 18 | _ide_helper.php 19 | .phpstorm.meta.php 20 | 21 | .composer.lock 22 | -------------------------------------------------------------------------------- /.php_cs: -------------------------------------------------------------------------------- 1 | 9 | @link: https://github.com/abrahamgreyson/laravel-mns 10 | 11 | This source file is subject to the MIT license that is bundled 12 | with this source code in the file LICENSE. 13 | EOF; 14 | 15 | $level = Symfony\CS\FixerInterface::PSR2_LEVEL; 16 | 17 | $fixers = [ 18 | 'header_comment', 19 | 'blankline_after_open_tag', 20 | 'multiline_array_trailing_comma', 21 | 'no_blank_lines_after_class_opening', 22 | 'no_empty_lines_after_phpdocs', 23 | 'phpdoc_no_package', 24 | 'phpdoc_var_without_name', 25 | 'remove_lines_between_uses', 26 | 'return', 27 | 'single_array_no_trailing_comma', 28 | 'single_quote', 29 | 'ternary_spaces', 30 | 'trim_array_spaces', 31 | 'unary_operators_spaces', 32 | 'ordered_use', 33 | 'short_array_syntax', 34 | 'whitespacy_lines', 35 | 'spaces_cast' 36 | ]; 37 | 38 | Symfony\CS\Fixer\Contrib\HeaderCommentFixer::setHeader($header); 39 | 40 | $finder = Symfony\CS\Finder\DefaultFinder::create()->in(__DIR__)->exclude('lib'); 41 | 42 | return Symfony\CS\Config\Config::create()->level($level)->fixers($fixers)->finder($finder); 43 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | filter: 2 | excluded_paths: 3 | - tests/* 4 | - lib/* 5 | 6 | checks: 7 | php: 8 | code_rating: true 9 | duplication: true 10 | 11 | build: 12 | environment: 13 | php: 14 | version: 5.5.9 15 | 16 | tests: 17 | before: 18 | - command: 'composer require laravel/framework:5.2' 19 | override: 20 | - command: 'phpunit --coverage-clover=some-file' 21 | coverage: 22 | file: 'some-file' 23 | format: 'php-clover' 24 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | preset: PSR2 2 | 3 | finder: 4 | exclude: 5 | - "tests" 6 | - "lib" 7 | 8 | enabled: 9 | - simplified_null_return 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # see http://about.travis-ci.org/docs/user/languages/php/ for more hints. 2 | language: php 3 | 4 | # list any PHP version you want to test against. 5 | php: 6 | # using major version aliases. 7 | # after php 5.5, aliased to a recent version. 8 | - 5.5 9 | - 5.6 10 | - 7.0 11 | - hhvm 12 | 13 | env: 14 | global: 15 | - COMPOSER_DISCARD_CHANGES=true 16 | matrix: 17 | - laravel_version="5.1.*" composer_prefer="--prefer-lowest" 18 | - laravel_version="5.1.*" composer_prefer="--prefer-stable" 19 | - laravel_version="5.1.*" composer_prefer="" 20 | - laravel_version="5.2.*" composer_prefer="--prefer-lowest" 21 | - laravel_version="5.2.*" composer_prefer="--prefer-stable" 22 | - laravel_version="5.2.*" composer_prefer="" 23 | - laravel_version="5.0.*" composer_prefer="--prefer-lowest" 24 | - laravel_version="5.0.*" composer_prefer="--prefer-stable" 25 | - laravel_version="5.0.*" composer_prefer="" 26 | 27 | matrix: 28 | global: 29 | # failures not break entire test suite. 30 | allow_failures: 31 | - php: nightly 32 | - php: hhvm 33 | fast_finish: true 34 | 35 | install: 36 | # speed up package installation process use parallel. 37 | - composer global require hirak/prestissimo 38 | - composer require laravel/framework:$laravel_version 39 | - composer update --prefer-source --no-interaction $composer_prefer 40 | 41 | before_script: 42 | # disable xdebug since it override var_dump() function we rely on to parse object. 43 | - if [ $(phpenv version-name) != "hhvm" ]; then phpenv config-rm xdebug.ini; fi 44 | 45 | script: 46 | - ./vendor/bin/phpunit 47 | 48 | notifications: 49 | email: 50 | on_success: never 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 chunfang 4 | Copyright (c) 2016 Abraham Greyson <82011220@qq.com> 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel-MNS 2 | [![Build Status](https://travis-ci.org/abrahamgreyson/laravel-mns.svg?branch=master)](https://travis-ci.org/abrahamgreyson/laravel-mns) 3 | [![Code Coverage](https://scrutinizer-ci.com/g/abrahamgreyson/laravel-mns/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/abrahamgreyson/laravel-mns/?branch=master) 4 | [![Latest Stable Version](https://poser.pugx.org/abe/laravel-mns/v/stable)](https://packagist.org/packages/abe/laravel-mns) 5 | [![License](https://img.shields.io/badge/license-MIT-000000.svg)](https://packagist.org/packages/abe/laravel-mns) 6 | 7 | 阿里云消息服务(MNS)的 Laravel 适配,本质上是为 Laravel 的队列增加 MNS 驱动。包含了阿里云 MNS SDK,为了 Laravel 能透明的使用 MNS 而对其作必要的引用。 8 | 9 | > 自 [chefxu/aliyun_mns](https://github.com/chefxu/aliyun_mns) 之上修改而来,鉴于缩进、换行和文件命名等代码风格有所差异,无法发 pr。 10 | 11 | > 阿里云 MNS SDK 不支持 Composer,直接将其包含在版本库中,并注册到 `AliyunMNS` 命名空间下。 12 | 13 | 14 | ## 安装使用 15 | 16 | 通过 Composer 安装: 17 | 18 | ```shell 19 | $ composer require abe/laravel-mns 20 | ``` 21 | 22 | 之后在 config/queue.php 中增加 `mns` 配置: 23 | 24 | ```php 25 | 'connections' => [ 26 | 'redis' => [ 27 | 'driver' => 'redis', 28 | 'connection' => 'default', 29 | 'queue' => 'default', 30 | 'expire' => 60, 31 | ], 32 | 33 | // 新增阿里云 MNS。 34 | 'mns' => [ 35 | 'driver' => 'mns', 36 | 'key' => env('MNS_ACCESS_KEY', 'access-key'), 37 | 'secret' => env('MNS_SECRET_KEY', 'secret-key'), 38 | // 外网连接必须启用 https。 39 | 'endpoint' => 'your-endpoint', 40 | 'queue' => env('MNS_DEFAULT_QUEUE', 'default-queue-name'), 41 | ], 42 | ], 43 | ``` 44 | 45 | 并且在你常用的 ServiceProvider 中注册队列驱动: 46 | 47 | ```php 48 | Queue::extend('mns', function() 49 | { 50 | return new \LaravelMns\Connectors\MnsConnector(); 51 | }); 52 | ``` 53 | 54 | 正常使用 Laravel Queue 即可: 55 | 56 | [https://laravel.com/docs/5.2/queues](https://laravel.com/docs/5.2/queues) 57 | 58 | 59 | ## 许可 60 | 61 | MIT 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "abe/laravel-mns", 3 | "description": "Laravel queue driver bases on Aliyun Message Service(MNS).", 4 | "keywords": ["aliyun", "laravel", "queue", "mns"], 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Abraham Greyson", 9 | "email": "82011220@qq.com" 10 | } 11 | ], 12 | "support": { 13 | "issues": "https://github.com/abrahamgreyson/laravel-mns/issues", 14 | "source": "https://github.com/abrahamgreyson/laravel-mns" 15 | }, 16 | "require": { 17 | "guzzlehttp/guzzle": "^6.2", 18 | "guzzlehttp/psr7": "^1.3" 19 | }, 20 | "require-dev": { 21 | "phpunit/phpunit": "~4.1", 22 | "mockery/mockery": "~0.9.4" 23 | }, 24 | "autoload": { 25 | "psr-4": { 26 | "AliyunMNS\\": "lib/AliyunMNS/", 27 | "LaravelMns\\": "src/" 28 | } 29 | }, 30 | "autoload-dev": { 31 | "psr-4": { 32 | "LaravelMns\\Test\\": "tests/" 33 | } 34 | }, 35 | "minimum-stability": "dev", 36 | "extra": { 37 | "branch-alias": { 38 | "dev-master": "5.2-dev" 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /lib/AliyunMNS/AsyncCallback.php: -------------------------------------------------------------------------------- 1 | succeedCallback = $succeedCallback; 15 | $this->failedCallback = $failedCallback; 16 | } 17 | 18 | public function onSucceed(BaseResponse $result) 19 | { 20 | return call_user_func($this->succeedCallback, $result); 21 | } 22 | 23 | public function onFailed(MnsException $e) 24 | { 25 | return call_user_func($this->failedCallback, $e); 26 | } 27 | } 28 | 29 | ?> 30 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Client.php: -------------------------------------------------------------------------------- 1 | client = new HttpClient($endPoint, $accessId, 45 | $accessKey, $securityToken, $config); 46 | } 47 | 48 | /** 49 | * Returns a queue reference for operating on the queue 50 | * this function does not create the queue automatically. 51 | * 52 | * @param string $queueName: the queue name 53 | * @param bool $base64: whether the message in queue will be base64 encoded 54 | * 55 | * @return Queue $queue: the Queue instance 56 | */ 57 | public function getQueueRef($queueName, $base64 = TRUE) 58 | { 59 | return new Queue($this->client, $queueName, $base64); 60 | } 61 | 62 | /** 63 | * Create Queue and Returns the Queue reference 64 | * 65 | * @param CreateQueueRequest $request: the QueueName and QueueAttributes 66 | * 67 | * @return CreateQueueResponse $response: the CreateQueueResponse 68 | * 69 | * @throws QueueAlreadyExistException if queue already exists 70 | * @throws InvalidArgumentException if any argument value is invalid 71 | * @throws MnsException if any other exception happends 72 | */ 73 | public function createQueue(CreateQueueRequest $request) 74 | { 75 | $response = new CreateQueueResponse($request->getQueueName()); 76 | return $this->client->sendRequest($request, $response); 77 | } 78 | 79 | /** 80 | * Create Queue and Returns the Queue reference 81 | * The request will not be sent until calling MnsPromise->wait(); 82 | * 83 | * @param CreateQueueRequest $request: the QueueName and QueueAttributes 84 | * @param AsyncCallback $callback: the Callback when the request finishes 85 | * 86 | * @return MnsPromise $promise: the MnsPromise instance 87 | * 88 | * @throws MnsException if any exception happends 89 | */ 90 | public function createQueueAsync(CreateQueueRequest $request, 91 | AsyncCallback $callback = NULL) 92 | { 93 | $response = new CreateQueueResponse($request->getQueueName()); 94 | return $this->client->sendRequestAsync($request, $response, $callback); 95 | } 96 | 97 | /** 98 | * Query the queues created by current account 99 | * 100 | * @param ListQueueRequest $request: define filters for quering queues 101 | * 102 | * @return ListQueueResponse: the response containing queueNames 103 | */ 104 | public function listQueue(ListQueueRequest $request) 105 | { 106 | $response = new ListQueueResponse(); 107 | return $this->client->sendRequest($request, $response); 108 | } 109 | 110 | public function listQueueAsync(ListQueueRequest $request, 111 | AsyncCallback $callback = NULL) 112 | { 113 | $response = new ListQueueResponse(); 114 | return $this->client->sendRequestAsync($request, $response, $callback); 115 | } 116 | 117 | /** 118 | * Delete the specified queue 119 | * the request will succeed even when the queue does not exist 120 | * 121 | * @param $queueName: the queueName 122 | * 123 | * @return DeleteQueueResponse 124 | */ 125 | public function deleteQueue($queueName) 126 | { 127 | $request = new DeleteQueueRequest($queueName); 128 | $response = new DeleteQueueResponse(); 129 | return $this->client->sendRequest($request, $response); 130 | } 131 | 132 | public function deleteQueueAsync($queueName, 133 | AsyncCallback $callback = NULL) 134 | { 135 | $request = new DeleteQueueRequest($queueName); 136 | $response = new DeleteQueueResponse(); 137 | return $this->client->sendRequestAsync($request, $response, $callback); 138 | } 139 | 140 | // API for Topic 141 | /** 142 | * Returns a topic reference for operating on the topic 143 | * this function does not create the topic automatically. 144 | * 145 | * @param string $topicName: the topic name 146 | * 147 | * @return Topic $topic: the Topic instance 148 | */ 149 | public function getTopicRef($topicName) 150 | { 151 | return new Topic($this->client, $topicName); 152 | } 153 | 154 | /** 155 | * Create Topic and Returns the Topic reference 156 | * 157 | * @param CreateTopicRequest $request: the TopicName and TopicAttributes 158 | * 159 | * @return CreateTopicResponse $response: the CreateTopicResponse 160 | * 161 | * @throws TopicAlreadyExistException if topic already exists 162 | * @throws InvalidArgumentException if any argument value is invalid 163 | * @throws MnsException if any other exception happends 164 | */ 165 | public function createTopic(CreateTopicRequest $request) 166 | { 167 | $response = new CreateTopicResponse($request->getTopicName()); 168 | return $this->client->sendRequest($request, $response); 169 | } 170 | 171 | /** 172 | * Delete the specified topic 173 | * the request will succeed even when the topic does not exist 174 | * 175 | * @param $topicName: the topicName 176 | * 177 | * @return DeleteTopicResponse 178 | */ 179 | public function deleteTopic($topicName) 180 | { 181 | $request = new DeleteTopicRequest($topicName); 182 | $response = new DeleteTopicResponse(); 183 | return $this->client->sendRequest($request, $response); 184 | } 185 | 186 | /** 187 | * Query the topics created by current account 188 | * 189 | * @param ListTopicRequest $request: define filters for quering topics 190 | * 191 | * @return ListTopicResponse: the response containing topicNames 192 | */ 193 | public function listTopic(ListTopicRequest $request) 194 | { 195 | $response = new ListTopicResponse(); 196 | return $this->client->sendRequest($request, $response); 197 | } 198 | } 199 | 200 | ?> 201 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Common/XMLParser.php: -------------------------------------------------------------------------------- 1 | NULL, 'Message' => NULL, 'RequestId' => NULL, 'HostId' => NULL); 11 | while ($xmlReader->Read()) 12 | { 13 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 14 | { 15 | switch ($xmlReader->name) { 16 | case 'Code': 17 | $xmlReader->read(); 18 | if ($xmlReader->nodeType == \XMLReader::TEXT) 19 | { 20 | $result['Code'] = $xmlReader->value; 21 | } 22 | break; 23 | case 'Message': 24 | $xmlReader->read(); 25 | if ($xmlReader->nodeType == \XMLReader::TEXT) 26 | { 27 | $result['Message'] = $xmlReader->value; 28 | } 29 | break; 30 | case 'RequestId': 31 | $xmlReader->read(); 32 | if ($xmlReader->nodeType == \XMLReader::TEXT) 33 | { 34 | $result['RequestId'] = $xmlReader->value; 35 | } 36 | break; 37 | case 'HostId': 38 | $xmlReader->read(); 39 | if ($xmlReader->nodeType == \XMLReader::TEXT) 40 | { 41 | $result['HostId'] = $xmlReader->value; 42 | } 43 | break; 44 | } 45 | } 46 | } 47 | return $result; 48 | } 49 | } 50 | 51 | ?> 52 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Config.php: -------------------------------------------------------------------------------- 1 | maxAttempts = 3; 14 | $this->proxy = NULL; 15 | $this->requestTimeout = 6; // 6 seconds 16 | $this->expectContinue = false; 17 | } 18 | 19 | /* 20 | public function getMaxAttempts() 21 | { 22 | return $this->maxAttempts; 23 | } 24 | 25 | public function setMaxAttempts($maxAttempts) 26 | { 27 | $this->maxAttempts = $maxAttempts; 28 | } 29 | */ 30 | 31 | public function getProxy() 32 | { 33 | return $this->proxy; 34 | } 35 | 36 | public function setProxy($proxy) 37 | { 38 | $this->proxy = $proxy; 39 | } 40 | 41 | public function getRequestTimeout() 42 | { 43 | return $this->requestTimeout; 44 | } 45 | 46 | public function setRequestTimeout($requestTimeout) 47 | { 48 | $this->requestTimeout = $requestTimeout; 49 | } 50 | 51 | public function getExpectContinue() 52 | { 53 | return $this->expectContinue; 54 | } 55 | 56 | public function setExpectContinue($expectContinue) 57 | { 58 | $this->expectContinue = $expectContinue; 59 | } 60 | } 61 | 62 | ?> 63 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Constants.php: -------------------------------------------------------------------------------- 1 | 61 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/BatchDeleteFailException.php: -------------------------------------------------------------------------------- 1 | deleteMessageErrorItems = array(); 22 | } 23 | 24 | public function addDeleteMessageErrorItem(DeleteMessageErrorItem $item) 25 | { 26 | $this->deleteMessageErrorItems[] = $item; 27 | } 28 | 29 | public function getDeleteMessageErrorItems() 30 | { 31 | return $this->deleteMessageErrorItems; 32 | } 33 | } 34 | 35 | ?> 36 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/BatchSendFailException.php: -------------------------------------------------------------------------------- 1 | sendMessageResponseItems = array(); 22 | } 23 | 24 | public function addSendMessageResponseItem(SendMessageResponseItem $item) 25 | { 26 | $this->sendMessageResponseItems[] = $item; 27 | } 28 | 29 | public function getSendMessageResponseItems() 30 | { 31 | return $this->sendMessageResponseItems; 32 | } 33 | } 34 | 35 | ?> 36 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/MalformedXMLException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/MessageNotExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/MnsException.php: -------------------------------------------------------------------------------- 1 | = 500) 17 | { 18 | $mnsErrorCode = "ServerError"; 19 | } 20 | else 21 | { 22 | $mnsErrorCode = "ClientError"; 23 | } 24 | } 25 | $this->mnsErrorCode = $mnsErrorCode; 26 | 27 | $this->requestId = $requestId; 28 | $this->hostId = $hostId; 29 | } 30 | 31 | public function __toString() 32 | { 33 | $str = "Code: " . $this->getCode() . " Message: " . $this->getMessage(); 34 | if ($this->mnsErrorCode != NULL) 35 | { 36 | $str .= " MnsErrorCode: " . $this->mnsErrorCode; 37 | } 38 | if ($this->requestId != NULL) 39 | { 40 | $str .= " RequestId: " . $this->requestId; 41 | } 42 | if ($this->hostId != NULL) 43 | { 44 | $str .= " HostId: " . $this->hostId; 45 | } 46 | return $str; 47 | } 48 | 49 | public function getMnsErrorCode() 50 | { 51 | return $this->mnsErrorCode; 52 | } 53 | 54 | public function getRequestId() 55 | { 56 | return $this->requestId; 57 | } 58 | 59 | public function getHostId() 60 | { 61 | return $this->hostId; 62 | } 63 | } 64 | 65 | ?> 66 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/QueueAlreadyExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/QueueNotExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/ReceiptHandleErrorException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/SubscriptionAlreadyExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/SubscriptionNotExistException.php: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/TopicAlreadyExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Exception/TopicNotExistException.php: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Http/HttpClient.php: -------------------------------------------------------------------------------- 1 | accessId = $accessId; 31 | $this->accessKey = $accessKey; 32 | $this->client = new \GuzzleHttp\Client([ 33 | 'base_uri' => $endPoint, 34 | 'defaults' => [ 35 | 'headers' => [ 36 | 'Host' => $endPoint 37 | ], 38 | 'proxy' => $config->getProxy(), 39 | 'expect' => $config->getExpectContinue(), 40 | 'timeout' => $config->getRequestTimeout() 41 | ] 42 | ]); 43 | $this->securityToken = $securityToken; 44 | } 45 | 46 | private function addRequiredHeaders(BaseRequest &$request) 47 | { 48 | $body = $request->generateBody(); 49 | $queryString = $request->generateQueryString(); 50 | 51 | $request->setBody($body); 52 | $request->setQueryString($queryString); 53 | 54 | if ($body != NULL) 55 | { 56 | $request->setHeader(Constants::CONTENT_LENGTH, strlen($body)); 57 | } 58 | $request->setHeader('Date', gmdate(Constants::GMT_DATE_FORMAT)); 59 | if (!$request->isHeaderSet(Constants::CONTENT_TYPE)) 60 | { 61 | $request->setHeader(Constants::CONTENT_TYPE, 'text/xml'); 62 | } 63 | $request->setHeader(Constants::MNS_VERSION_HEADER, Constants::MNS_VERSION); 64 | 65 | if ($this->securityToken != NULL) 66 | { 67 | $request->setHeader(Constants::SECURITY_TOKEN, $this->securityToken); 68 | } 69 | 70 | $sign = Signature::SignRequest($this->accessKey, $request); 71 | $request->setHeader(Constants::AUTHORIZATION, 72 | Constants::MNS . " " . $this->accessId . ":" . $sign); 73 | } 74 | 75 | public function sendRequestAsync(BaseRequest $request, 76 | BaseResponse &$response, AsyncCallback $callback = NULL) 77 | { 78 | $promise = $this->sendRequestAsyncInternal($request, $response, $callback); 79 | return new MnsPromise($promise, $response); 80 | } 81 | 82 | public function sendRequest(BaseRequest $request, BaseResponse &$response) 83 | { 84 | $promise = $this->sendRequestAsync($request, $response); 85 | return $promise->wait(); 86 | } 87 | 88 | private function sendRequestAsyncInternal(BaseRequest &$request, BaseResponse &$response, AsyncCallback $callback = NULL) 89 | { 90 | $this->addRequiredHeaders($request); 91 | 92 | $parameters = array('exceptions' => false, 'http_errors' => false); 93 | $queryString = $request->getQueryString(); 94 | $body = $request->getBody(); 95 | if ($queryString != NULL) { 96 | $parameters['query'] = $queryString; 97 | } 98 | if ($body != NULL) { 99 | $parameters['body'] = $body; 100 | } 101 | 102 | $request = new Request(strtoupper($request->getMethod()), 103 | $request->getResourcePath(), $request->getHeaders()); 104 | try 105 | { 106 | if ($callback != NULL) 107 | { 108 | return $this->client->sendAsync($request, $parameters)->then( 109 | function ($res) use (&$response, $callback) { 110 | try { 111 | $response->parseResponse($res->getStatusCode(), $res->getBody()); 112 | $callback->onSucceed($response); 113 | } catch (MnsException $e) { 114 | $callback->onFailed($e); 115 | } 116 | } 117 | ); 118 | } 119 | else 120 | { 121 | return $this->client->sendAsync($request, $parameters); 122 | } 123 | } 124 | catch (TransferException $e) 125 | { 126 | $message = $e->getMessage(); 127 | if ($e->hasResponse()) { 128 | $message = $e->getResponse()->getBody(); 129 | } 130 | throw new MnsException($e->getCode(), $message, $e); 131 | } 132 | } 133 | } 134 | 135 | ?> 136 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/DeleteMessageErrorItem.php: -------------------------------------------------------------------------------- 1 | errorCode = $errorCode; 15 | $this->errorMessage = $errorMessage; 16 | $this->receiptHandle = $receiptHandle; 17 | } 18 | 19 | public function getErrorCode() 20 | { 21 | return $this->errorCode; 22 | } 23 | 24 | public function getErrorMessage() 25 | { 26 | return $this->errorMessage; 27 | } 28 | 29 | public function getReceiptHandle() 30 | { 31 | return $this->receiptHandle; 32 | } 33 | 34 | static public function fromXML($xmlReader) 35 | { 36 | $errorCode = NULL; 37 | $errorMessage = NULL; 38 | $receiptHandle = NULL; 39 | 40 | while ($xmlReader->read()) 41 | { 42 | switch ($xmlReader->nodeType) 43 | { 44 | case \XMLReader::ELEMENT: 45 | switch ($xmlReader->name) 46 | { 47 | case Constants::ERROR_CODE: 48 | $xmlReader->read(); 49 | if ($xmlReader->nodeType == \XMLReader::TEXT) 50 | { 51 | $errorCode = $xmlReader->value; 52 | } 53 | break; 54 | case Constants::ERROR_MESSAGE: 55 | $xmlReader->read(); 56 | if ($xmlReader->nodeType == \XMLReader::TEXT) 57 | { 58 | $errorMessage = $xmlReader->value; 59 | } 60 | break; 61 | case Constants::RECEIPT_HANDLE: 62 | $xmlReader->read(); 63 | if ($xmlReader->nodeType == \XMLReader::TEXT) 64 | { 65 | $receiptHandle = $xmlReader->value; 66 | } 67 | break; 68 | } 69 | break; 70 | case \XMLReader::END_ELEMENT: 71 | if ($xmlReader->name == Constants::ERROR) 72 | { 73 | return new DeleteMessageErrorItem($errorCode, $errorMessage, $receiptHandle); 74 | } 75 | break; 76 | } 77 | } 78 | 79 | return new DeleteMessageErrorItem($errorCode, $errorMessage, $receiptHandle); 80 | } 81 | } 82 | 83 | ?> 84 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/Message.php: -------------------------------------------------------------------------------- 1 | messageId = $messageId; 14 | $this->messageBodyMD5 = $messageBodyMD5; 15 | $this->messageBody = $messageBody; 16 | $this->enqueueTime = $enqueueTime; 17 | $this->nextVisibleTime = $nextVisibleTime; 18 | $this->firstDequeueTime = $firstDequeueTime; 19 | $this->dequeueCount = $dequeueCount; 20 | $this->priority = $priority; 21 | $this->receiptHandle = $receiptHandle; 22 | } 23 | 24 | static public function fromXML(\XMLReader $xmlReader, $base64) 25 | { 26 | $messageId = NULL; 27 | $messageBodyMD5 = NULL; 28 | $messageBody = NULL; 29 | $enqueueTime = NULL; 30 | $nextVisibleTime = NULL; 31 | $firstDequeueTime = NULL; 32 | $dequeueCount = NULL; 33 | $priority = NULL; 34 | $receiptHandle = NULL; 35 | 36 | while ($xmlReader->read()) 37 | { 38 | switch ($xmlReader->nodeType) 39 | { 40 | case \XMLReader::ELEMENT: 41 | switch ($xmlReader->name) { 42 | case Constants::MESSAGE_ID: 43 | $xmlReader->read(); 44 | if ($xmlReader->nodeType == \XMLReader::TEXT) 45 | { 46 | $messageId = $xmlReader->value; 47 | } 48 | break; 49 | case Constants::MESSAGE_BODY_MD5: 50 | $xmlReader->read(); 51 | if ($xmlReader->nodeType == \XMLReader::TEXT) 52 | { 53 | $messageBodyMD5 = $xmlReader->value; 54 | } 55 | break; 56 | case Constants::MESSAGE_BODY: 57 | $xmlReader->read(); 58 | if ($xmlReader->nodeType == \XMLReader::TEXT) 59 | { 60 | if ($base64 == TRUE) { 61 | $messageBody = base64_decode($xmlReader->value); 62 | } else { 63 | $messageBody = $xmlReader->value; 64 | } 65 | } 66 | break; 67 | case Constants::ENQUEUE_TIME: 68 | $xmlReader->read(); 69 | if ($xmlReader->nodeType == \XMLReader::TEXT) 70 | { 71 | $enqueueTime = $xmlReader->value; 72 | } 73 | break; 74 | case Constants::NEXT_VISIBLE_TIME: 75 | $xmlReader->read(); 76 | if ($xmlReader->nodeType == \XMLReader::TEXT) 77 | { 78 | $nextVisibleTime = $xmlReader->value; 79 | } 80 | break; 81 | case Constants::FIRST_DEQUEUE_TIME: 82 | $xmlReader->read(); 83 | if ($xmlReader->nodeType == \XMLReader::TEXT) 84 | { 85 | $firstDequeueTime = $xmlReader->value; 86 | } 87 | break; 88 | case Constants::DEQUEUE_COUNT: 89 | $xmlReader->read(); 90 | if ($xmlReader->nodeType == \XMLReader::TEXT) 91 | { 92 | $dequeueCount = $xmlReader->value; 93 | } 94 | break; 95 | case Constants::PRIORITY: 96 | $xmlReader->read(); 97 | if ($xmlReader->nodeType == \XMLReader::TEXT) 98 | { 99 | $priority = $xmlReader->value; 100 | } 101 | break; 102 | case Constants::RECEIPT_HANDLE: 103 | $xmlReader->read(); 104 | if ($xmlReader->nodeType == \XMLReader::TEXT) 105 | { 106 | $receiptHandle = $xmlReader->value; 107 | } 108 | break; 109 | } 110 | break; 111 | case \XMLReader::END_ELEMENT: 112 | if ($xmlReader->name == 'Message') 113 | { 114 | $message = new Message( 115 | $messageId, 116 | $messageBodyMD5, 117 | $messageBody, 118 | $enqueueTime, 119 | $nextVisibleTime, 120 | $firstDequeueTime, 121 | $dequeueCount, 122 | $priority, 123 | $receiptHandle); 124 | return $message; 125 | } 126 | break; 127 | } 128 | } 129 | 130 | $message = new Message( 131 | $messageId, 132 | $messageBodyMD5, 133 | $messageBody, 134 | $enqueueTime, 135 | $nextVisibleTime, 136 | $firstDequeueTime, 137 | $dequeueCount, 138 | $priority, 139 | $receiptHandle); 140 | 141 | return $message; 142 | } 143 | } 144 | 145 | ?> 146 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/SendMessageRequestItem.php: -------------------------------------------------------------------------------- 1 | messageBody = $messageBody; 15 | $this->delaySeconds = $delaySeconds; 16 | $this->priority = $priority; 17 | } 18 | 19 | public function writeXML(\XMLWriter $xmlWriter, $base64) 20 | { 21 | $xmlWriter->startELement('Message'); 22 | $this->writeMessagePropertiesForSendXML($xmlWriter, $base64); 23 | $xmlWriter->endElement(); 24 | } 25 | } 26 | 27 | ?> 28 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/SendMessageResponseItem.php: -------------------------------------------------------------------------------- 1 | isSucceed = $isSucceed; 22 | if ($isSucceed == TRUE) 23 | { 24 | $this->messageId = $param1; 25 | $this->messageBodyMD5 = $param2; 26 | } 27 | else 28 | { 29 | $this->errorCode = $param1; 30 | $this->errorMessage = $param2; 31 | } 32 | } 33 | 34 | public function isSucceed() 35 | { 36 | return $this->isSucceed; 37 | } 38 | 39 | public function getErrorCode() 40 | { 41 | return $this->errorCode; 42 | } 43 | 44 | public function getErrorMessage() 45 | { 46 | return $this->errorMessage; 47 | } 48 | 49 | static public function fromXML($xmlReader) 50 | { 51 | $messageId = NULL; 52 | $messageBodyMD5 = NULL; 53 | $errorCode = NULL; 54 | $errorMessage = NULL; 55 | 56 | while ($xmlReader->read()) 57 | { 58 | switch ($xmlReader->nodeType) 59 | { 60 | case \XMLReader::ELEMENT: 61 | switch ($xmlReader->name) { 62 | case Constants::MESSAGE_ID: 63 | $xmlReader->read(); 64 | if ($xmlReader->nodeType == \XMLReader::TEXT) 65 | { 66 | $messageId = $xmlReader->value; 67 | } 68 | break; 69 | case Constants::MESSAGE_BODY_MD5: 70 | $xmlReader->read(); 71 | if ($xmlReader->nodeType == \XMLReader::TEXT) 72 | { 73 | $messageBodyMD5 = $xmlReader->value; 74 | } 75 | break; 76 | case Constants::ERROR_CODE: 77 | $xmlReader->read(); 78 | if ($xmlReader->nodeType == \XMLReader::TEXT) 79 | { 80 | $errorCode = $xmlReader->value; 81 | } 82 | break; 83 | case Constants::ERROR_MESSAGE: 84 | $xmlReader->read(); 85 | if ($xmlReader->nodeType == \XMLReader::TEXT) 86 | { 87 | $errorMessage = $xmlReader->value; 88 | } 89 | break; 90 | } 91 | break; 92 | case \XMLReader::END_ELEMENT: 93 | if ($xmlReader->name == 'Message') 94 | { 95 | if ($messageId != NULL) 96 | { 97 | return new SendMessageResponseItem(TRUE, $messageId, $messageBodyMD5); 98 | } 99 | else 100 | { 101 | return new SendMessageResponseItem(FALSE, $errorCode, $errorMessage); 102 | } 103 | } 104 | break; 105 | } 106 | } 107 | 108 | if ($messageId != NULL) 109 | { 110 | return new SendMessageResponseItem(TRUE, $messageId, $messageBodyMD5); 111 | } 112 | else 113 | { 114 | return new SendMessageResponseItem(FALSE, $errorCode, $errorMessage); 115 | } 116 | } 117 | } 118 | 119 | ?> 120 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/SubscriptionAttributes.php: -------------------------------------------------------------------------------- 1 | endpoint = $endpoint; 32 | $this->strategy = $strategy; 33 | $this->contentFormat = $contentFormat; 34 | $this->subscriptionName = $subscriptionName; 35 | 36 | //cloud change in AliyunMNS\Topic 37 | $this->topicName = $topicName; 38 | 39 | $this->topicOwner = $topicOwner; 40 | $this->createTime = $createTime; 41 | $this->lastModifyTime = $lastModifyTime; 42 | } 43 | 44 | public function getEndpoint() 45 | { 46 | return $this->endpoint; 47 | } 48 | 49 | public function setEndpoint($endpoint) 50 | { 51 | $this->endpoint = $endpoint; 52 | } 53 | 54 | public function getStrategy() 55 | { 56 | return $this->strategy; 57 | } 58 | 59 | public function setStrategy($strategy) 60 | { 61 | $this->strategy = $strategy; 62 | } 63 | 64 | public function getContentFormat() 65 | { 66 | return $this->contentFormat; 67 | } 68 | 69 | public function setContentFormat($contentFormat) 70 | { 71 | $this->contentFormat = $contentFormat; 72 | } 73 | 74 | public function getTopicName() 75 | { 76 | return $this->topicName; 77 | } 78 | 79 | public function setTopicName($topicName) 80 | { 81 | $this->topicName = $topicName; 82 | } 83 | 84 | public function getTopicOwner() 85 | { 86 | return $this->topicOwner; 87 | } 88 | 89 | public function getSubscriptionName() 90 | { 91 | return $this->subscriptionName; 92 | } 93 | 94 | public function getCreateTime() 95 | { 96 | return $this->createTime; 97 | } 98 | 99 | public function getLastModifyTime() 100 | { 101 | return $this->lastModifyTime; 102 | } 103 | 104 | public function writeXML(\XMLWriter $xmlWriter) 105 | { 106 | if ($this->endpoint != NULL) 107 | { 108 | $xmlWriter->writeElement(Constants::ENDPOINT, $this->endpoint); 109 | } 110 | if ($this->strategy != NULL) 111 | { 112 | $xmlWriter->writeElement(Constants::STRATEGY, $this->strategy); 113 | } 114 | if ($this->contentFormat != NULL) 115 | { 116 | $xmlWriter->writeElement(Constants::CONTENT_FORMAT, $this->contentFormat); 117 | } 118 | } 119 | 120 | static public function fromXML(\XMLReader $xmlReader) 121 | { 122 | $endpoint = NULL; 123 | $strategy = NULL; 124 | $contentFormat = NULL; 125 | $topicOwner = NULL; 126 | $topicName = NULL; 127 | $createTime = NULL; 128 | $lastModifyTime = NULL; 129 | 130 | while ($xmlReader->read()) 131 | { 132 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 133 | { 134 | switch ($xmlReader->name) { 135 | case 'TopicOwner': 136 | $xmlReader->read(); 137 | if ($xmlReader->nodeType == \XMLReader::TEXT) 138 | { 139 | $topicOwner = $xmlReader->value; 140 | } 141 | break; 142 | case 'TopicName': 143 | $xmlReader->read(); 144 | if ($xmlReader->nodeType == \XMLReader::TEXT) 145 | { 146 | $topicName = $xmlReader->value; 147 | } 148 | break; 149 | case 'SubscriptionName': 150 | $xmlReader->read(); 151 | if ($xmlReader->nodeType == \XMLReader::TEXT) 152 | { 153 | $subscriptionName = $xmlReader->value; 154 | } 155 | case 'Endpoint': 156 | $xmlReader->read(); 157 | if ($xmlReader->nodeType == \XMLReader::TEXT) 158 | { 159 | $subscriptionName = $xmlReader->value; 160 | } 161 | break; 162 | case 'NotifyStrategy': 163 | $xmlReader->read(); 164 | if ($xmlReader->nodeType == \XMLReader::TEXT) 165 | { 166 | $strategy = $xmlReader->value; 167 | } 168 | break; 169 | case 'NotifyContentFormat': 170 | $xmlReader->read(); 171 | if ($xmlReader->nodeType == \XMLReader::TEXT) 172 | { 173 | $contentFormat = $xmlReader->value; 174 | } 175 | break; 176 | case 'CreateTime': 177 | $xmlReader->read(); 178 | if ($xmlReader->nodeType == \XMLReader::TEXT) 179 | { 180 | $createTime = $xmlReader->value; 181 | } 182 | break; 183 | case 'LastModifyTime': 184 | $xmlReader->read(); 185 | if ($xmlReader->nodeType == \XMLReader::TEXT) 186 | { 187 | $lastModifyTime = $xmlReader->value; 188 | } 189 | break; 190 | } 191 | } 192 | } 193 | 194 | $attributes = new SubscriptionAttributes( 195 | $subscriptionName, 196 | $endpoint, 197 | $strategy, 198 | $contentFormat, 199 | $topicName, 200 | $topicOwner, 201 | $createTime, 202 | $lastModifyTime); 203 | return $attributes; 204 | } 205 | } 206 | 207 | ?> 208 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/TopicAttributes.php: -------------------------------------------------------------------------------- 1 | maximumMessageSize = $maximumMessageSize; 29 | $this->messageRetentionPeriod = $messageRetentionPeriod; 30 | 31 | $this->topicName = $topicName; 32 | $this->createTime = $createTime; 33 | $this->lastModifyTime = $lastModifyTime; 34 | } 35 | 36 | public function setMaximumMessageSize($maximumMessageSize) 37 | { 38 | $this->maximumMessageSize = $maximumMessageSize; 39 | } 40 | 41 | public function getMaximumMessageSize() 42 | { 43 | return $this->maximumMessageSize; 44 | } 45 | 46 | public function setMessageRetentionPeriod($messageRetentionPeriod) 47 | { 48 | $this->messageRetentionPeriod = $messageRetentionPeriod; 49 | } 50 | 51 | public function getMessageRetentionPeriod() 52 | { 53 | return $this->messageRetentionPeriod; 54 | } 55 | 56 | public function getTopicName() 57 | { 58 | return $this->topicName; 59 | } 60 | 61 | public function getCreateTime() 62 | { 63 | return $this->createTime; 64 | } 65 | 66 | public function getLastModifyTime() 67 | { 68 | return $this->lastModifyTime; 69 | } 70 | 71 | public function writeXML(\XMLWriter $xmlWriter) 72 | { 73 | if ($this->maximumMessageSize != NULL) 74 | { 75 | $xmlWriter->writeElement(Constants::MAXIMUM_MESSAGE_SIZE, $this->maximumMessageSize); 76 | } 77 | if ($this->messageRetentionPeriod != NULL) 78 | { 79 | $xmlWriter->writeElement(Constants::MESSAGE_RETENTION_PERIOD, $this->messageRetentionPeriod); 80 | } 81 | } 82 | 83 | static public function fromXML(\XMLReader $xmlReader) 84 | { 85 | $maximumMessageSize = NULL; 86 | $messageRetentionPeriod = NULL; 87 | $topicName = NULL; 88 | $createTime = NULL; 89 | $lastModifyTime = NULL; 90 | 91 | while ($xmlReader->read()) 92 | { 93 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 94 | { 95 | switch ($xmlReader->name) { 96 | case 'MaximumMessageSize': 97 | $xmlReader->read(); 98 | if ($xmlReader->nodeType == \XMLReader::TEXT) 99 | { 100 | $maximumMessageSize = $xmlReader->value; 101 | } 102 | break; 103 | case 'MessageRetentionPeriod': 104 | $xmlReader->read(); 105 | if ($xmlReader->nodeType == \XMLReader::TEXT) 106 | { 107 | $messageRetentionPeriod = $xmlReader->value; 108 | } 109 | break; 110 | case 'TopicName': 111 | $xmlReader->read(); 112 | if ($xmlReader->nodeType == \XMLReader::TEXT) 113 | { 114 | $topicName = $xmlReader->value; 115 | } 116 | break; 117 | case 'CreateTime': 118 | $xmlReader->read(); 119 | if ($xmlReader->nodeType == \XMLReader::TEXT) 120 | { 121 | $createTime = $xmlReader->value; 122 | } 123 | break; 124 | case 'LastModifyTime': 125 | $xmlReader->read(); 126 | if ($xmlReader->nodeType == \XMLReader::TEXT) 127 | { 128 | $lastModifyTime = $xmlReader->value; 129 | } 130 | break; 131 | } 132 | } 133 | } 134 | 135 | $attributes = new TopicAttributes( 136 | $maximumMessageSize, 137 | $messageRetentionPeriod, 138 | $topicName, 139 | $createTime, 140 | $lastModifyTime); 141 | return $attributes; 142 | } 143 | } 144 | 145 | ?> 146 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Model/UpdateSubscriptionAttributes.php: -------------------------------------------------------------------------------- 1 | subscriptionName = $subscriptionName; 20 | 21 | $this->strategy = $strategy; 22 | } 23 | 24 | public function getStrategy() 25 | { 26 | return $this->strategy; 27 | } 28 | 29 | public function setStrategy($strategy) 30 | { 31 | $this->strategy = $strategy; 32 | } 33 | 34 | public function getTopicName() 35 | { 36 | return $this->topicName; 37 | } 38 | 39 | public function setTopicName($topicName) 40 | { 41 | $this->topicName = $topicName; 42 | } 43 | 44 | public function getSubscriptionName() 45 | { 46 | return $this->subscriptionName; 47 | } 48 | 49 | public function writeXML(\XMLWriter $xmlWriter) 50 | { 51 | if ($this->strategy != NULL) 52 | { 53 | $xmlWriter->writeElement(Constants::STRATEGY, $this->strategy); 54 | } 55 | } 56 | } 57 | 58 | ?> 59 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/BaseRequest.php: -------------------------------------------------------------------------------- 1 | method = $method; 15 | $this->resourcePath = $resourcePath; 16 | } 17 | 18 | abstract public function generateBody(); 19 | abstract public function generateQueryString(); 20 | 21 | public function setBody($body) 22 | { 23 | $this->body = $body; 24 | } 25 | 26 | public function getBody() 27 | { 28 | return $this->body; 29 | } 30 | 31 | public function setQueryString($queryString) 32 | { 33 | $this->queryString = $queryString; 34 | } 35 | 36 | public function getQueryString() 37 | { 38 | return $this->queryString; 39 | } 40 | 41 | public function isHeaderSet($header) 42 | { 43 | return isset($this->headers[$header]); 44 | } 45 | 46 | public function getHeaders() 47 | { 48 | return $this->headers; 49 | } 50 | 51 | public function removeHeader($header) 52 | { 53 | if (isset($this->headers[$header])) 54 | { 55 | unset($this->headers[$header]); 56 | } 57 | } 58 | 59 | public function setHeader($header, $value) 60 | { 61 | $this->headers[$header] = $value; 62 | } 63 | 64 | public function getResourcePath() 65 | { 66 | return $this->resourcePath; 67 | } 68 | 69 | public function getMethod() 70 | { 71 | return $this->method; 72 | } 73 | } 74 | 75 | ?> 76 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/BatchDeleteMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 17 | $this->receiptHandles = $receiptHandles; 18 | } 19 | 20 | public function getQueueName() 21 | { 22 | return $this->queueName; 23 | } 24 | 25 | public function getReceiptHandles() 26 | { 27 | return $this->receiptHandles; 28 | } 29 | 30 | public function generateBody() 31 | { 32 | $xmlWriter = new \XMLWriter; 33 | $xmlWriter->openMemory(); 34 | $xmlWriter->startDocument("1.0", "UTF-8"); 35 | $xmlWriter->startElementNS(NULL, Constants::RECEIPT_HANDLES, Constants::MNS_XML_NAMESPACE); 36 | foreach ($this->receiptHandles as $receiptHandle) 37 | { 38 | $xmlWriter->writeElement(Constants::RECEIPT_HANDLE, $receiptHandle); 39 | } 40 | $xmlWriter->endElement(); 41 | $xmlWriter->endDocument(); 42 | return $xmlWriter->outputMemory(); 43 | } 44 | 45 | public function generateQueryString() 46 | { 47 | return NULL; 48 | } 49 | } 50 | ?> 51 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/BatchPeekMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 18 | $this->numOfMessages = $numOfMessages; 19 | } 20 | 21 | public function getQueueName() 22 | { 23 | return $this->queueName; 24 | } 25 | 26 | public function getNumOfMessages() 27 | { 28 | return $this->numOfMessages; 29 | } 30 | 31 | public function generateBody() 32 | { 33 | return NULL; 34 | } 35 | 36 | public function generateQueryString() 37 | { 38 | return http_build_query(array("numOfMessages" => $this->numOfMessages, "peekonly" => "true")); 39 | } 40 | } 41 | ?> 42 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/BatchReceiveMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = NULL; 18 | $this->numOfMessages = $numOfMessages; 19 | $this->waitSeconds = $waitSeconds; 20 | } 21 | 22 | public function setQueueName($queueName) 23 | { 24 | $this->queueName = $queueName; 25 | $this->resourcePath = 'queues/' . $queueName . '/messages'; 26 | } 27 | 28 | public function getQueueName() 29 | { 30 | return $this->queueName; 31 | } 32 | 33 | public function getWaitSeconds() 34 | { 35 | return $this->waitSeconds; 36 | } 37 | 38 | public function getNumOfMessages() 39 | { 40 | return $this->numOfMessages; 41 | } 42 | 43 | public function generateBody() 44 | { 45 | return NULL; 46 | } 47 | 48 | public function generateQueryString() 49 | { 50 | $params = array("numOfMessages" => $this->numOfMessages); 51 | if ($this->waitSeconds != NULL) 52 | { 53 | $params["waitseconds"] = $this->waitSeconds; 54 | } 55 | return http_build_query($params); 56 | } 57 | } 58 | ?> 59 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/BatchSendMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = NULL; 21 | $this->sendMessageRequestItems = $sendMessageRequestItems; 22 | $this->base64 = $base64; 23 | } 24 | 25 | public function setBase64($base64) 26 | { 27 | $this->base64 = $base64; 28 | } 29 | 30 | public function isBase64() 31 | { 32 | return ($this->base64 == TRUE); 33 | } 34 | 35 | public function setQueueName($queueName) 36 | { 37 | $this->queueName = $queueName; 38 | $this->resourcePath = 'queues/' . $queueName . '/messages'; 39 | } 40 | 41 | public function getQueueName() 42 | { 43 | return $this->queueName; 44 | } 45 | 46 | public function getSendMessageRequestItems() 47 | { 48 | return $this->sendMessageRequestItems; 49 | } 50 | 51 | public function addSendMessageRequestItem(SendMessageRequestItem $item) 52 | { 53 | $this->sendMessageRequestItems[] = $item; 54 | } 55 | 56 | public function generateBody() 57 | { 58 | $xmlWriter = new \XMLWriter; 59 | $xmlWriter->openMemory(); 60 | $xmlWriter->startDocument("1.0", "UTF-8"); 61 | $xmlWriter->startElementNS(NULL, "Messages", Constants::MNS_XML_NAMESPACE); 62 | foreach ($this->sendMessageRequestItems as $item) 63 | { 64 | $item->writeXML($xmlWriter, $this->base64); 65 | } 66 | $xmlWriter->endElement(); 67 | $xmlWriter->endDocument(); 68 | return $xmlWriter->outputMemory(); 69 | } 70 | 71 | public function generateQueryString() 72 | { 73 | return NULL; 74 | } 75 | } 76 | ?> 77 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/ChangeMessageVisibilityRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 18 | $this->receiptHandle = $receiptHandle; 19 | $this->visibilityTimeout = $visibilityTimeout; 20 | } 21 | 22 | public function getQueueName() 23 | { 24 | return $this->queueName; 25 | } 26 | 27 | public function getReceiptHandle() 28 | { 29 | return $this->receiptHandle; 30 | } 31 | 32 | public function getVisibilityTimeout() 33 | { 34 | return $this->visibilityTimeout; 35 | } 36 | 37 | public function generateBody() 38 | { 39 | return NULL; 40 | } 41 | 42 | public function generateQueryString() 43 | { 44 | return http_build_query(array("receiptHandle" => $this->receiptHandle, "visibilityTimeout" => $this->visibilityTimeout)); 45 | } 46 | } 47 | ?> 48 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/CreateQueueRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 23 | $this->attributes = $attributes; 24 | } 25 | 26 | public function getQueueName() 27 | { 28 | return $this->queueName; 29 | } 30 | 31 | public function getQueueAttributes() 32 | { 33 | return $this->attributes; 34 | } 35 | 36 | public function generateBody() 37 | { 38 | $xmlWriter = new \XMLWriter; 39 | $xmlWriter->openMemory(); 40 | $xmlWriter->startDocument("1.0", "UTF-8"); 41 | $xmlWriter->startElementNS(NULL, "Queue", Constants::MNS_XML_NAMESPACE); 42 | $this->attributes->writeXML($xmlWriter); 43 | $xmlWriter->endElement(); 44 | $xmlWriter->endDocument(); 45 | return $xmlWriter->outputMemory(); 46 | } 47 | 48 | public function generateQueryString() 49 | { 50 | return NULL; 51 | } 52 | } 53 | ?> 54 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/CreateTopicRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 23 | $this->attributes = $attributes; 24 | } 25 | 26 | public function getTopicName() 27 | { 28 | return $this->topicName; 29 | } 30 | 31 | public function getTopicAttributes() 32 | { 33 | return $this->attributes; 34 | } 35 | 36 | public function generateBody() 37 | { 38 | $xmlWriter = new \XMLWriter; 39 | $xmlWriter->openMemory(); 40 | $xmlWriter->startDocument("1.0", "UTF-8"); 41 | $xmlWriter->startElementNS(NULL, "Topic", Constants::MNS_XML_NAMESPACE); 42 | $this->attributes->writeXML($xmlWriter); 43 | $xmlWriter->endElement(); 44 | $xmlWriter->endDocument(); 45 | return $xmlWriter->outputMemory(); 46 | } 47 | 48 | public function generateQueryString() 49 | { 50 | return NULL; 51 | } 52 | } 53 | ?> 54 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/DeleteMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 17 | $this->receiptHandle = $receiptHandle; 18 | } 19 | 20 | public function getQueueName() 21 | { 22 | return $this->queueName; 23 | } 24 | 25 | public function getReceiptHandle() 26 | { 27 | return $this->receiptHandle; 28 | } 29 | 30 | public function generateBody() 31 | { 32 | return NULL; 33 | } 34 | 35 | public function generateQueryString() 36 | { 37 | return http_build_query(array("ReceiptHandle" => $this->receiptHandle)); 38 | } 39 | } 40 | ?> 41 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/DeleteQueueRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 16 | } 17 | 18 | public function getQueueName() 19 | { 20 | return $this->queueName; 21 | } 22 | 23 | public function generateBody() 24 | { 25 | return NULL; 26 | } 27 | 28 | public function generateQueryString() 29 | { 30 | return NULL; 31 | } 32 | } 33 | ?> 34 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/DeleteTopicRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 16 | } 17 | 18 | public function getTopicName() 19 | { 20 | return $this->topicName; 21 | } 22 | 23 | public function generateBody() 24 | { 25 | return NULL; 26 | } 27 | 28 | public function generateQueryString() 29 | { 30 | return NULL; 31 | } 32 | } 33 | ?> 34 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/GetQueueAttributeRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 15 | } 16 | 17 | public function getQueueName() 18 | { 19 | return $this->queueName; 20 | } 21 | 22 | public function generateBody() 23 | { 24 | return NULL; 25 | } 26 | 27 | public function generateQueryString() 28 | { 29 | return NULL; 30 | } 31 | } 32 | ?> 33 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/GetSubscriptionAttributeRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 15 | $this->subscriptionName = $subscriptionName; 16 | } 17 | 18 | public function getTopicName() 19 | { 20 | return $this->topicName; 21 | } 22 | 23 | public function getSubscriptionName() 24 | { 25 | return $this->subscriptionName; 26 | } 27 | 28 | public function generateBody() 29 | { 30 | return NULL; 31 | } 32 | 33 | public function generateQueryString() 34 | { 35 | return NULL; 36 | } 37 | } 38 | 39 | ?> 40 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/GetTopicAttributeRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 15 | } 16 | 17 | public function getTopicName() 18 | { 19 | return $this->topicName; 20 | } 21 | 22 | public function generateBody() 23 | { 24 | return NULL; 25 | } 26 | 27 | public function generateQueryString() 28 | { 29 | return NULL; 30 | } 31 | } 32 | ?> 33 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/ListQueueRequest.php: -------------------------------------------------------------------------------- 1 | setRetNum($retNum); 17 | $this->setPrefix($prefix); 18 | $this->setMarker($marker); 19 | } 20 | 21 | public function getRetNum() 22 | { 23 | return $this->retNum; 24 | } 25 | 26 | public function setRetNum($retNum) 27 | { 28 | $this->retNum = $retNum; 29 | if ($retNum != NULL) 30 | { 31 | $this->setHeader("x-mns-ret-number", $retNum); 32 | } 33 | else 34 | { 35 | $this->removeHeader("x-mns-ret-number"); 36 | } 37 | } 38 | 39 | public function getPrefix() 40 | { 41 | return $this->prefix; 42 | } 43 | 44 | public function setPrefix($prefix) 45 | { 46 | $this->prefis = $prefix; 47 | if ($prefix != NULL) 48 | { 49 | $this->setHeader("x-mns-prefix", $prefix); 50 | } 51 | else 52 | { 53 | $this->removeHeader("x-mns-prefix"); 54 | } 55 | } 56 | 57 | public function getMarker() 58 | { 59 | return $this->marker; 60 | } 61 | 62 | public function setMarker($marker) 63 | { 64 | $this->marker = $marker; 65 | if ($marker != NULL) 66 | { 67 | $this->setHeader("x-mns-marker", $marker); 68 | } 69 | else 70 | { 71 | $this->removeHeader("x-mns-marker"); 72 | } 73 | } 74 | 75 | public function generateBody() 76 | { 77 | return NULL; 78 | } 79 | 80 | public function generateQueryString() 81 | { 82 | return NULL; 83 | } 84 | } 85 | 86 | ?> 87 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/ListSubscriptionRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 22 | $this->setRetNum($retNum); 23 | $this->setPrefix($prefix); 24 | $this->setMarker($marker); 25 | } 26 | 27 | public function getTopicName() 28 | { 29 | return $this->topicName; 30 | } 31 | 32 | public function getRetNum() 33 | { 34 | return $this->retNum; 35 | } 36 | 37 | public function setRetNum($retNum) 38 | { 39 | $this->retNum = $retNum; 40 | if ($retNum != NULL) 41 | { 42 | $this->setHeader("x-mns-ret-number", $retNum); 43 | } 44 | else 45 | { 46 | $this->removeHeader("x-mns-ret-number"); 47 | } 48 | } 49 | 50 | public function getPrefix() 51 | { 52 | return $this->prefix; 53 | } 54 | 55 | public function setPrefix($prefix) 56 | { 57 | $this->prefis = $prefix; 58 | if ($prefix != NULL) 59 | { 60 | $this->setHeader("x-mns-prefix", $prefix); 61 | } 62 | else 63 | { 64 | $this->removeHeader("x-mns-prefix"); 65 | } 66 | } 67 | 68 | public function getMarker() 69 | { 70 | return $this->marker; 71 | } 72 | 73 | public function setMarker($marker) 74 | { 75 | $this->marker = $marker; 76 | if ($marker != NULL) 77 | { 78 | $this->setHeader("x-mns-marker", $marker); 79 | } 80 | else 81 | { 82 | $this->removeHeader("x-mns-marker"); 83 | } 84 | } 85 | 86 | public function generateBody() 87 | { 88 | return NULL; 89 | } 90 | 91 | public function generateQueryString() 92 | { 93 | return NULL; 94 | } 95 | } 96 | 97 | ?> 98 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/ListTopicRequest.php: -------------------------------------------------------------------------------- 1 | setRetNum($retNum); 17 | $this->setPrefix($prefix); 18 | $this->setMarker($marker); 19 | } 20 | 21 | public function getRetNum() 22 | { 23 | return $this->retNum; 24 | } 25 | 26 | public function setRetNum($retNum) 27 | { 28 | $this->retNum = $retNum; 29 | if ($retNum != NULL) 30 | { 31 | $this->setHeader("x-mns-ret-number", $retNum); 32 | } 33 | else 34 | { 35 | $this->removeHeader("x-mns-ret-number"); 36 | } 37 | } 38 | 39 | public function getPrefix() 40 | { 41 | return $this->prefix; 42 | } 43 | 44 | public function setPrefix($prefix) 45 | { 46 | $this->prefis = $prefix; 47 | if ($prefix != NULL) 48 | { 49 | $this->setHeader("x-mns-prefix", $prefix); 50 | } 51 | else 52 | { 53 | $this->removeHeader("x-mns-prefix"); 54 | } 55 | } 56 | 57 | public function getMarker() 58 | { 59 | return $this->marker; 60 | } 61 | 62 | public function setMarker($marker) 63 | { 64 | $this->marker = $marker; 65 | if ($marker != NULL) 66 | { 67 | $this->setHeader("x-mns-marker", $marker); 68 | } 69 | else 70 | { 71 | $this->removeHeader("x-mns-marker"); 72 | } 73 | } 74 | 75 | public function generateBody() 76 | { 77 | return NULL; 78 | } 79 | 80 | public function generateQueryString() 81 | { 82 | return NULL; 83 | } 84 | } 85 | 86 | ?> 87 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/PeekMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 16 | } 17 | 18 | public function getQueueName() 19 | { 20 | return $this->queueName; 21 | } 22 | 23 | public function generateBody() 24 | { 25 | return NULL; 26 | } 27 | 28 | public function generateQueryString() 29 | { 30 | return NULL; 31 | } 32 | } 33 | ?> 34 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/PublishMessageRequest.php: -------------------------------------------------------------------------------- 1 | topicName = NULL; 19 | $this->messageBody = $messageBody; 20 | } 21 | 22 | public function setTopicName($topicName) 23 | { 24 | $this->topicName = $topicName; 25 | $this->resourcePath = 'topics/' . $topicName . '/messages'; 26 | } 27 | 28 | public function getTopicName() 29 | { 30 | return $this->topicName; 31 | } 32 | 33 | public function generateBody() 34 | { 35 | $xmlWriter = new \XMLWriter; 36 | $xmlWriter->openMemory(); 37 | $xmlWriter->startDocument("1.0", "UTF-8"); 38 | $xmlWriter->startElementNS(NULL, "Message", Constants::MNS_XML_NAMESPACE); 39 | $this->writeMessagePropertiesForPublishXML($xmlWriter); 40 | $xmlWriter->endElement(); 41 | $xmlWriter->endDocument(); 42 | return $xmlWriter->outputMemory(); 43 | } 44 | 45 | public function generateQueryString() 46 | { 47 | return NULL; 48 | } 49 | } 50 | ?> 51 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/ReceiveMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 17 | $this->waitSeconds = $waitSeconds; 18 | } 19 | 20 | public function getQueueName() 21 | { 22 | return $this->queueName; 23 | } 24 | 25 | public function getWaitSeconds() 26 | { 27 | return $this->waitSeconds; 28 | } 29 | 30 | public function generateBody() 31 | { 32 | return NULL; 33 | } 34 | 35 | public function generateQueryString() 36 | { 37 | if ($this->waitSeconds != NULL) 38 | { 39 | return http_build_query(array("waitseconds" => $this->waitSeconds)); 40 | } 41 | } 42 | } 43 | ?> 44 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/SendMessageRequest.php: -------------------------------------------------------------------------------- 1 | queueName = NULL; 23 | $this->messageBody = $messageBody; 24 | $this->delaySeconds = $delaySeconds; 25 | $this->priority = $priority; 26 | $this->base64 = $base64; 27 | } 28 | 29 | public function setBase64($base64) 30 | { 31 | $this->base64 = $base64; 32 | } 33 | 34 | public function isBase64() 35 | { 36 | return ($this->base64 == TRUE); 37 | } 38 | 39 | public function setQueueName($queueName) 40 | { 41 | $this->queueName = $queueName; 42 | $this->resourcePath = 'queues/' . $queueName . '/messages'; 43 | } 44 | 45 | public function getQueueName() 46 | { 47 | return $this->queueName; 48 | } 49 | 50 | public function generateBody() 51 | { 52 | $xmlWriter = new \XMLWriter; 53 | $xmlWriter->openMemory(); 54 | $xmlWriter->startDocument("1.0", "UTF-8"); 55 | $xmlWriter->startElementNS(NULL, "Message", Constants::MNS_XML_NAMESPACE); 56 | $this->writeMessagePropertiesForSendXML($xmlWriter, $this->base64); 57 | $xmlWriter->endElement(); 58 | $xmlWriter->endDocument(); 59 | return $xmlWriter->outputMemory(); 60 | } 61 | 62 | public function generateQueryString() 63 | { 64 | return NULL; 65 | } 66 | } 67 | ?> 68 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/SetQueueAttributeRequest.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 23 | $this->attributes = $attributes; 24 | } 25 | 26 | public function getQueueName() 27 | { 28 | return $this->queueName; 29 | } 30 | 31 | public function getQueueAttributes() 32 | { 33 | return $this->attributes; 34 | } 35 | 36 | public function generateBody() 37 | { 38 | $xmlWriter = new \XMLWriter; 39 | $xmlWriter->openMemory(); 40 | $xmlWriter->startDocument("1.0", "UTF-8"); 41 | $xmlWriter->startElementNS(NULL, "Queue", Constants::MNS_XML_NAMESPACE); 42 | $this->attributes->writeXML($xmlWriter); 43 | $xmlWriter->endElement(); 44 | $xmlWriter->endDocument(); 45 | return $xmlWriter->outputMemory(); 46 | } 47 | 48 | public function generateQueryString() 49 | { 50 | return NULL; 51 | } 52 | } 53 | ?> 54 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/SetSubscriptionAttributeRequest.php: -------------------------------------------------------------------------------- 1 | getTopicName() . '/subscriptions/' . $attributes->getSubscriptionName() . '?metaoverride=true'); 14 | 15 | if ($attributes == NULL) 16 | { 17 | $attributes = new UpdateSubscriptionAttributes(); 18 | } 19 | 20 | $this->attributes = $attributes; 21 | } 22 | 23 | public function getSubscriptionAttributes() 24 | { 25 | return $this->attributes; 26 | } 27 | 28 | public function generateBody() 29 | { 30 | $xmlWriter = new \XMLWriter; 31 | $xmlWriter->openMemory(); 32 | $xmlWriter->startDocument("1.0", "UTF-8"); 33 | $xmlWriter->startElementNS(NULL, "Subscription", Constants::MNS_XML_NAMESPACE); 34 | $this->attributes->writeXML($xmlWriter); 35 | $xmlWriter->endElement(); 36 | $xmlWriter->endDocument(); 37 | return $xmlWriter->outputMemory(); 38 | } 39 | 40 | public function generateQueryString() 41 | { 42 | return NULL; 43 | } 44 | } 45 | 46 | ?> 47 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/SetTopicAttributeRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 23 | $this->attributes = $attributes; 24 | } 25 | 26 | public function getTopicName() 27 | { 28 | return $this->topicName; 29 | } 30 | 31 | public function getTopicAttributes() 32 | { 33 | return $this->attributes; 34 | } 35 | 36 | public function generateBody() 37 | { 38 | $xmlWriter = new \XMLWriter; 39 | $xmlWriter->openMemory(); 40 | $xmlWriter->startDocument("1.0", "UTF-8"); 41 | $xmlWriter->startElementNS(NULL, "Topic", Constants::MNS_XML_NAMESPACE); 42 | $this->attributes->writeXML($xmlWriter); 43 | $xmlWriter->endElement(); 44 | $xmlWriter->endDocument(); 45 | return $xmlWriter->outputMemory(); 46 | } 47 | 48 | public function generateQueryString() 49 | { 50 | return NULL; 51 | } 52 | } 53 | ?> 54 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/SubscribeRequest.php: -------------------------------------------------------------------------------- 1 | getTopicName() . '/subscriptions/' . $attributes->getSubscriptionName()); 15 | 16 | $this->attributes = $attributes; 17 | } 18 | 19 | public function getSubscriptionAttributes() 20 | { 21 | return $this->attributes; 22 | } 23 | 24 | public function generateBody() 25 | { 26 | $xmlWriter = new \XMLWriter; 27 | $xmlWriter->openMemory(); 28 | $xmlWriter->startDocument("1.0", "UTF-8"); 29 | $xmlWriter->startElementNS(NULL, "Subscription", Constants::MNS_XML_NAMESPACE); 30 | $this->attributes->writeXML($xmlWriter); 31 | $xmlWriter->endElement(); 32 | $xmlWriter->endDocument(); 33 | return $xmlWriter->outputMemory(); 34 | } 35 | 36 | public function generateQueryString() 37 | { 38 | return NULL; 39 | } 40 | } 41 | 42 | ?> 43 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Requests/UnsubscribeRequest.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 15 | $this->subscriptionName = $subscriptionName; 16 | } 17 | 18 | public function getTopicName() 19 | { 20 | return $this->topicName; 21 | } 22 | 23 | public function getSubscriptionName() 24 | { 25 | return $this->subscriptionName; 26 | } 27 | 28 | public function generateBody() 29 | { 30 | return NULL; 31 | } 32 | 33 | public function generateQueryString() 34 | { 35 | return NULL; 36 | } 37 | } 38 | 39 | ?> 40 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/BaseResponse.php: -------------------------------------------------------------------------------- 1 | succeed; 14 | } 15 | 16 | public function getStatusCode() 17 | { 18 | return $this->statusCode; 19 | } 20 | } 21 | 22 | ?> 23 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/BatchDeleteMessageResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 23 | if ($statusCode == 204) { 24 | $this->succeed = TRUE; 25 | } else { 26 | $this->parseErrorResponse($statusCode, $content); 27 | } 28 | } 29 | 30 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 31 | { 32 | $this->succeed = FALSE; 33 | $xmlReader = new \XMLReader(); 34 | try { 35 | $xmlReader->XML($content); 36 | while ($xmlReader->read()) 37 | { 38 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) { 39 | switch ($xmlReader->name) { 40 | case Constants::ERROR: 41 | $this->parseNormalErrorResponse($xmlReader); 42 | break; 43 | default: // case Constants::Messages 44 | $this->parseBatchDeleteErrorResponse($xmlReader); 45 | break; 46 | } 47 | } 48 | } 49 | } catch (\Exception $e) { 50 | if ($exception != NULL) { 51 | throw $exception; 52 | } elseif($e instanceof MnsException) { 53 | throw $e; 54 | } else { 55 | throw new MnsException($statusCode, $e->getMessage()); 56 | } 57 | } catch (\Throwable $t) { 58 | throw new MnsException($statusCode, $t->getMessage()); 59 | } 60 | } 61 | 62 | private function parseBatchDeleteErrorResponse($xmlReader) 63 | { 64 | $ex = new BatchDeleteFailException($this->statusCode, "BatchDeleteMessage Failed For Some ReceiptHandles"); 65 | while ($xmlReader->read()) 66 | { 67 | if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == Constants::ERROR) { 68 | $ex->addDeleteMessageErrorItem( DeleteMessageErrorItem::fromXML($xmlReader)); 69 | } 70 | } 71 | throw $ex; 72 | } 73 | 74 | private function parseNormalErrorResponse($xmlReader) 75 | { 76 | $result = XMLParser::parseNormalError($xmlReader); 77 | 78 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 79 | { 80 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 81 | } 82 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 83 | { 84 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 85 | } 86 | if ($result['Code'] == Constants::RECEIPT_HANDLE_ERROR) 87 | { 88 | throw new ReceiptHandleErrorException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 89 | } 90 | 91 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 92 | } 93 | } 94 | 95 | ?> 96 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/BatchPeekMessageResponse.php: -------------------------------------------------------------------------------- 1 | messages = array(); 22 | $this->base64 = $base64; 23 | } 24 | 25 | public function setBase64($base64) 26 | { 27 | $this->base64 = $base64; 28 | } 29 | 30 | public function isBase64() 31 | { 32 | return ($this->base64 == TRUE); 33 | } 34 | 35 | public function getMessages() 36 | { 37 | return $this->messages; 38 | } 39 | 40 | public function parseResponse($statusCode, $content) 41 | { 42 | $this->statusCode = $statusCode; 43 | if ($statusCode == 200) { 44 | $this->succeed = TRUE; 45 | } else { 46 | $this->parseErrorResponse($statusCode, $content); 47 | } 48 | 49 | $xmlReader = new \XMLReader(); 50 | try { 51 | $xmlReader->XML($content); 52 | while ($xmlReader->read()) 53 | { 54 | if ($xmlReader->nodeType == \XMLReader::ELEMENT 55 | && $xmlReader->name == 'Message') 56 | { 57 | $this->messages[] = Message::fromXML($xmlReader, $this->base64); 58 | } 59 | } 60 | } catch (\Exception $e) { 61 | throw new MnsException($statusCode, $e->getMessage(), $e); 62 | } catch (\Throwable $t) { 63 | throw new MnsException($statusCode, $t->getMessage()); 64 | } 65 | } 66 | 67 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 68 | { 69 | $this->succeed = FALSE; 70 | $xmlReader = new \XMLReader(); 71 | try { 72 | $xmlReader->XML($content); 73 | $result = XMLParser::parseNormalError($xmlReader); 74 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 75 | { 76 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 77 | } 78 | if ($result['Code'] == Constants::MESSAGE_NOT_EXIST) 79 | { 80 | throw new MessageNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 81 | } 82 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 83 | } catch (\Exception $e) { 84 | if ($exception != NULL) { 85 | throw $exception; 86 | } elseif($e instanceof MnsException) { 87 | throw $e; 88 | } else { 89 | throw new MnsException($statusCode, $e->getMessage()); 90 | } 91 | } catch (\Throwable $t) { 92 | throw new MnsException($statusCode, $t->getMessage()); 93 | } 94 | } 95 | } 96 | 97 | ?> 98 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/BatchReceiveMessageResponse.php: -------------------------------------------------------------------------------- 1 | messages = array(); 22 | $this->base64 = $base64; 23 | } 24 | 25 | public function setBase64($base64) 26 | { 27 | $this->base64 = $base64; 28 | } 29 | 30 | public function isBase64() 31 | { 32 | return ($this->base64 == TRUE); 33 | } 34 | 35 | public function getMessages() 36 | { 37 | return $this->messages; 38 | } 39 | 40 | public function parseResponse($statusCode, $content) 41 | { 42 | $this->statusCode = $statusCode; 43 | if ($statusCode == 200) { 44 | $this->succeed = TRUE; 45 | } else { 46 | $this->parseErrorResponse($statusCode, $content); 47 | } 48 | 49 | $xmlReader = new \XMLReader(); 50 | try { 51 | $xmlReader->XML($content); 52 | while ($xmlReader->read()) 53 | { 54 | if ($xmlReader->nodeType == \XMLReader::ELEMENT 55 | && $xmlReader->name == 'Message') 56 | { 57 | $this->messages[] = Message::fromXML($xmlReader, $this->base64); 58 | } 59 | } 60 | } catch (\Exception $e) { 61 | throw new MnsException($statusCode, $e->getMessage(), $e); 62 | } catch (\Throwable $t) { 63 | throw new MnsException($statusCode, $t->getMessage()); 64 | } 65 | } 66 | 67 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 68 | { 69 | $this->succeed = FALSE; 70 | $xmlReader = new \XMLReader(); 71 | try { 72 | $xmlReader->XML($content); 73 | $result = XMLParser::parseNormalError($xmlReader); 74 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 75 | { 76 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 77 | } 78 | if ($result['Code'] == Constants::MESSAGE_NOT_EXIST) 79 | { 80 | throw new MessageNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 81 | } 82 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 83 | } catch (\Exception $e) { 84 | if ($exception != NULL) { 85 | throw $exception; 86 | } elseif($e instanceof MnsException) { 87 | throw $e; 88 | } else { 89 | throw new MnsException($statusCode, $e->getMessage()); 90 | } 91 | } catch (\Throwable $t) { 92 | throw new MnsException($statusCode, $t->getMessage()); 93 | } 94 | 95 | } 96 | } 97 | 98 | ?> 99 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/BatchSendMessageResponse.php: -------------------------------------------------------------------------------- 1 | sendMessageResponseItems = array(); 22 | } 23 | 24 | public function getSendMessageResponseItems() 25 | { 26 | return $this->sendMessageResponseItems; 27 | } 28 | 29 | public function parseResponse($statusCode, $content) 30 | { 31 | $this->statusCode = $statusCode; 32 | if ($statusCode == 201) { 33 | $this->succeed = TRUE; 34 | } else { 35 | $this->parseErrorResponse($statusCode, $content); 36 | } 37 | 38 | $xmlReader = new \XMLReader(); 39 | try { 40 | $xmlReader->XML($content); 41 | while ($xmlReader->read()) 42 | { 43 | if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'Message') { 44 | $this->sendMessageResponseItems[] = SendMessageResponseItem::fromXML($xmlReader); 45 | } 46 | } 47 | } catch (\Exception $e) { 48 | throw new MnsException($statusCode, $e->getMessage(), $e); 49 | } catch (\Throwable $t) { 50 | throw new MnsException($statusCode, $t->getMessage()); 51 | } 52 | } 53 | 54 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 55 | { 56 | $this->succeed = FALSE; 57 | $xmlReader = new \XMLReader(); 58 | try { 59 | $xmlReader->XML($content); 60 | while ($xmlReader->read()) 61 | { 62 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) { 63 | switch ($xmlReader->name) { 64 | case Constants::ERROR: 65 | $this->parseNormalErrorResponse($xmlReader); 66 | break; 67 | default: // case Constants::Messages 68 | $this->parseBatchSendErrorResponse($xmlReader); 69 | break; 70 | } 71 | } 72 | } 73 | } catch (\Exception $e) { 74 | if ($exception != NULL) { 75 | throw $exception; 76 | } elseif($e instanceof MnsException) { 77 | throw $e; 78 | } else { 79 | throw new MnsException($statusCode, $e->getMessage()); 80 | } 81 | } catch (\Throwable $t) { 82 | throw new MnsException($statusCode, $t->getMessage()); 83 | } 84 | } 85 | 86 | private function parseBatchSendErrorResponse($xmlReader) 87 | { 88 | $ex = new BatchSendFailException($this->statusCode, "BatchSendMessage Failed For Some Messages"); 89 | while ($xmlReader->read()) 90 | { 91 | if ($xmlReader->nodeType == \XMLReader::ELEMENT && $xmlReader->name == 'Message') { 92 | $ex->addSendMessageResponseItem( SendMessageResponseItem::fromXML($xmlReader)); 93 | } 94 | } 95 | throw $ex; 96 | } 97 | 98 | private function parseNormalErrorResponse($xmlReader) 99 | { 100 | $result = XMLParser::parseNormalError($xmlReader); 101 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 102 | { 103 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 104 | } 105 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 106 | { 107 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 108 | } 109 | if ($result['Code'] == Constants::MALFORMED_XML) 110 | { 111 | throw new MalformedXMLException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 112 | } 113 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 114 | } 115 | } 116 | 117 | ?> 118 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/ChangeMessageVisibilityResponse.php: -------------------------------------------------------------------------------- 1 | receiptHandle; 26 | } 27 | 28 | public function getNextVisibleTime() 29 | { 30 | return $this->nextVisibleTime; 31 | } 32 | 33 | public function parseResponse($statusCode, $content) 34 | { 35 | $this->statusCode = $statusCode; 36 | if ($statusCode == 200) { 37 | $this->succeed = TRUE; 38 | } else { 39 | $this->parseErrorResponse($statusCode, $content); 40 | } 41 | 42 | $xmlReader = new \XMLReader(); 43 | try { 44 | $xmlReader->XML($content); 45 | $message = Message::fromXML($xmlReader, TRUE); 46 | $this->receiptHandle = $message->getReceiptHandle(); 47 | $this->nextVisibleTime = $message->getNextVisibleTime(); 48 | } catch (\Exception $e) { 49 | throw new MnsException($statusCode, $e->getMessage(), $e); 50 | } catch (\Throwable $t) { 51 | throw new MnsException($statusCode, $t->getMessage()); 52 | } 53 | } 54 | 55 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 56 | { 57 | $this->succeed = FALSE; 58 | $xmlReader = new \XMLReader(); 59 | try { 60 | $xmlReader->XML($content); 61 | $result = XMLParser::parseNormalError($xmlReader); 62 | 63 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 64 | { 65 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 66 | } 67 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 68 | { 69 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 70 | } 71 | if ($result['Code'] == Constants::MESSAGE_NOT_EXIST) 72 | { 73 | throw new MessageNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 74 | } 75 | if ($result['Code'] == Constants::RECEIPT_HANDLE_ERROR) 76 | { 77 | throw new ReceiptHandleErrorException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 78 | } 79 | 80 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 81 | } catch (\Exception $e) { 82 | if ($exception != NULL) { 83 | throw $exception; 84 | } elseif($e instanceof MnsException) { 85 | throw $e; 86 | } else { 87 | throw new MnsException($statusCode, $e->getMessage()); 88 | } 89 | } catch (\Throwable $t) { 90 | throw new MnsException($statusCode, $t->getMessage()); 91 | } 92 | 93 | } 94 | } 95 | 96 | ?> 97 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/CreateQueueResponse.php: -------------------------------------------------------------------------------- 1 | queueName = $queueName; 18 | } 19 | 20 | public function parseResponse($statusCode, $content) 21 | { 22 | $this->statusCode = $statusCode; 23 | if ($statusCode == 201 || $statusCode == 204) { 24 | $this->succeed = TRUE; 25 | } else { 26 | $this->parseErrorResponse($statusCode, $content); 27 | } 28 | } 29 | 30 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 31 | { 32 | $this->succeed = FALSE; 33 | $xmlReader = new \XMLReader(); 34 | try { 35 | $xmlReader->XML($content); 36 | $result = XMLParser::parseNormalError($xmlReader); 37 | 38 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 39 | { 40 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 41 | } 42 | if ($result['Code'] == Constants::QUEUE_ALREADY_EXIST) 43 | { 44 | throw new QueueAlreadyExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 45 | } 46 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 47 | } catch (\Exception $e) { 48 | if ($exception != NULL) { 49 | throw $exception; 50 | } elseif($e instanceof MnsException) { 51 | throw $e; 52 | } else { 53 | throw new MnsException($statusCode, $e->getMessage()); 54 | } 55 | } catch (\Throwable $t) { 56 | throw new MnsException($statusCode, $t->getMessage()); 57 | } 58 | } 59 | 60 | public function getQueueName() 61 | { 62 | return $this->queueName; 63 | } 64 | } 65 | 66 | ?> 67 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/CreateTopicResponse.php: -------------------------------------------------------------------------------- 1 | topicName = $topicName; 18 | } 19 | 20 | public function parseResponse($statusCode, $content) 21 | { 22 | $this->statusCode = $statusCode; 23 | if ($statusCode == 201 || $statusCode == 204) { 24 | $this->succeed = TRUE; 25 | } else { 26 | $this->parseErrorResponse($statusCode, $content); 27 | } 28 | } 29 | 30 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 31 | { 32 | $this->succeed = FALSE; 33 | $xmlReader = new \XMLReader(); 34 | try { 35 | $xmlReader->XML($content); 36 | $result = XMLParser::parseNormalError($xmlReader); 37 | 38 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 39 | { 40 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 41 | } 42 | if ($result['Code'] == Constants::TOPIC_ALREADY_EXIST) 43 | { 44 | throw new TopicAlreadyExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 45 | } 46 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 47 | } catch (\Exception $e) { 48 | if ($exception != NULL) { 49 | throw $exception; 50 | } elseif($e instanceof MnsException) { 51 | throw $e; 52 | } else { 53 | throw new MnsException($statusCode, $e->getMessage()); 54 | } 55 | } catch (\Throwable $t) { 56 | throw new MnsException($statusCode, $t->getMessage()); 57 | } 58 | } 59 | 60 | public function getTopicName() 61 | { 62 | return $this->topicName; 63 | } 64 | } 65 | 66 | ?> 67 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/DeleteMessageResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 21 | if ($statusCode == 204) { 22 | $this->succeed = TRUE; 23 | } else { 24 | $this->parseErrorResponse($statusCode, $content); 25 | } 26 | } 27 | 28 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 29 | { 30 | $this->succeed = FALSE; 31 | $xmlReader = new \XMLReader(); 32 | try { 33 | $xmlReader->XML($content); 34 | $result = XMLParser::parseNormalError($xmlReader); 35 | 36 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 37 | { 38 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 39 | } 40 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 41 | { 42 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 43 | } 44 | if ($result['Code'] == Constants::RECEIPT_HANDLE_ERROR) 45 | { 46 | throw new ReceiptHandleErrorException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 47 | } 48 | 49 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 50 | } catch (\Exception $e) { 51 | if ($exception != NULL) { 52 | throw $exception; 53 | } elseif($e instanceof MnsException) { 54 | throw $e; 55 | } else { 56 | throw new MnsException($statusCode, $e->getMessage()); 57 | } 58 | } catch (\Throwable $t) { 59 | throw new MnsException($statusCode, $t->getMessage()); 60 | } 61 | } 62 | } 63 | 64 | ?> 65 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/DeleteQueueResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 17 | if ($statusCode == 204) { 18 | $this->succeed = TRUE; 19 | } else { 20 | $this->parseErrorResponse($statusCode, $content); 21 | } 22 | } 23 | 24 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 25 | { 26 | $this->succeed = FALSE; 27 | $xmlReader = new \XMLReader(); 28 | try { 29 | $xmlReader->XML($content); 30 | $result = XMLParser::parseNormalError($xmlReader); 31 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 32 | } catch (\Exception $e) { 33 | if ($exception != NULL) { 34 | throw $exception; 35 | } elseif($e instanceof MnsException) { 36 | throw $e; 37 | } else { 38 | throw new MnsException($statusCode, $e->getMessage()); 39 | } 40 | } catch (\Throwable $t) { 41 | throw new MnsException($statusCode, $t->getMessage()); 42 | } 43 | } 44 | } 45 | 46 | ?> 47 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/DeleteTopicResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 17 | if ($statusCode == 204) { 18 | $this->succeed = TRUE; 19 | } else { 20 | $this->parseErrorResponse($statusCode, $content); 21 | } 22 | } 23 | 24 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 25 | { 26 | $this->succeed = FALSE; 27 | $xmlReader = new \XMLReader(); 28 | try { 29 | $xmlReader->XML($content); 30 | $result = XMLParser::parseNormalError($xmlReader); 31 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 32 | } catch (\Exception $e) { 33 | if ($exception != NULL) { 34 | throw $exception; 35 | } elseif($e instanceof MnsException) { 36 | throw $e; 37 | } else { 38 | throw new MnsException($statusCode, $e->getMessage()); 39 | } 40 | } catch (\Throwable $t) { 41 | throw new MnsException($statusCode, $t->getMessage()); 42 | } 43 | } 44 | } 45 | 46 | ?> 47 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/GetQueueAttributeResponse.php: -------------------------------------------------------------------------------- 1 | attributes = NULL; 19 | } 20 | 21 | public function getQueueAttributes() 22 | { 23 | return $this->attributes; 24 | } 25 | 26 | public function parseResponse($statusCode, $content) 27 | { 28 | $this->statusCode = $statusCode; 29 | if ($statusCode == 200) { 30 | $this->succeed = TRUE; 31 | } else { 32 | $this->parseErrorResponse($statusCode, $content); 33 | } 34 | 35 | $xmlReader = new \XMLReader(); 36 | try { 37 | $xmlReader->XML($content); 38 | $this->attributes = QueueAttributes::fromXML($xmlReader); 39 | } catch (\Exception $e) { 40 | throw new MnsException($statusCode, $e->getMessage(), $e); 41 | } catch (\Throwable $t) { 42 | throw new MnsException($statusCode, $t->getMessage()); 43 | } 44 | 45 | } 46 | 47 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 48 | { 49 | $this->succeed = FALSE; 50 | $xmlReader = new \XMLReader(); 51 | try { 52 | $xmlReader->XML($content); 53 | $result = XMLParser::parseNormalError($xmlReader); 54 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 55 | { 56 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 57 | } 58 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 59 | } catch (\Exception $e) { 60 | if ($exception != NULL) { 61 | throw $exception; 62 | } elseif($e instanceof MnsException) { 63 | throw $e; 64 | } else { 65 | throw new MnsException($statusCode, $e->getMessage()); 66 | } 67 | } catch (\Throwable $t) { 68 | throw new MnsException($statusCode, $t->getMessage()); 69 | } 70 | } 71 | } 72 | 73 | ?> 74 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/GetSubscriptionAttributeResponse.php: -------------------------------------------------------------------------------- 1 | attributes = NULL; 18 | } 19 | 20 | public function getSubscriptionAttributes() 21 | { 22 | return $this->attributes; 23 | } 24 | 25 | public function parseResponse($statusCode, $content) 26 | { 27 | $this->statusCode = $statusCode; 28 | if ($statusCode == 200) 29 | { 30 | $this->succeed = TRUE; 31 | } 32 | else 33 | { 34 | $this->parseErrorResponse($statusCode, $content); 35 | } 36 | 37 | $xmlReader = new \XMLReader(); 38 | try 39 | { 40 | $xmlReader->XML($content); 41 | $this->attributes = SubscriptionAttributes::fromXML($xmlReader); 42 | } 43 | catch (\Exception $e) 44 | { 45 | throw new MnsException($statusCode, $e->getMessage(), $e); 46 | } 47 | catch (\Throwable $t) 48 | { 49 | throw new MnsException($statusCode, $t->getMessage()); 50 | } 51 | } 52 | 53 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 54 | { 55 | $this->succeed = FALSE; 56 | $xmlReader = new \XMLReader(); 57 | try 58 | { 59 | $xmlReader->XML($content); 60 | $result = XMLParser::parseNormalError($xmlReader); 61 | if ($result['Code'] == Constants::SUBSCRIPTION_NOT_EXIST) 62 | { 63 | throw new SubscriptionNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 64 | } 65 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 66 | } 67 | catch (\Exception $e) 68 | { 69 | if ($exception != NULL) 70 | { 71 | throw $exception; 72 | } 73 | elseif ($e instanceof MnsException) 74 | { 75 | throw $e; 76 | } 77 | else 78 | { 79 | throw new MnsException($statusCode, $e->getMessage()); 80 | } 81 | } 82 | catch (\Throwable $t) 83 | { 84 | throw new MnsException($statusCode, $t->getMessage()); 85 | } 86 | } 87 | } 88 | ?> 89 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/GetTopicAttributeResponse.php: -------------------------------------------------------------------------------- 1 | attributes = NULL; 18 | } 19 | 20 | public function getTopicAttributes() 21 | { 22 | return $this->attributes; 23 | } 24 | 25 | public function parseResponse($statusCode, $content) 26 | { 27 | $this->statusCode = $statusCode; 28 | if ($statusCode == 200) 29 | { 30 | $this->succeed = TRUE; 31 | } 32 | else 33 | { 34 | $this->parseErrorResponse($statusCode, $content); 35 | } 36 | 37 | $xmlReader = new \XMLReader(); 38 | try { 39 | $xmlReader->XML($content); 40 | $this->attributes = TopicAttributes::fromXML($xmlReader); 41 | } 42 | catch (\Exception $e) 43 | { 44 | throw new MnsException($statusCode, $e->getMessage(), $e); 45 | } 46 | catch (\Throwable $t) 47 | { 48 | throw new MnsException($statusCode, $t->getMessage()); 49 | } 50 | } 51 | 52 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 53 | { 54 | $this->succeed = FALSE; 55 | $xmlReader = new \XMLReader(); 56 | try 57 | { 58 | $xmlReader->XML($content); 59 | $result = XMLParser::parseNormalError($xmlReader); 60 | if ($result['Code'] == Constants::TOPIC_NOT_EXIST) 61 | { 62 | throw new TopicNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 63 | } 64 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 65 | } 66 | catch (\Exception $e) 67 | { 68 | if ($exception != NULL) 69 | { 70 | throw $exception; 71 | } 72 | elseif ($e instanceof MnsException) 73 | { 74 | throw $e; 75 | } 76 | else 77 | { 78 | throw new MnsException($statusCode, $e->getMessage()); 79 | } 80 | } 81 | catch (\Throwable $t) 82 | { 83 | throw new MnsException($statusCode, $t->getMessage()); 84 | } 85 | } 86 | } 87 | 88 | ?> 89 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/ListQueueResponse.php: -------------------------------------------------------------------------------- 1 | queueNames = array(); 16 | $this->nextMarker = NULL; 17 | } 18 | 19 | public function isFinished() 20 | { 21 | return $this->nextMarker == NULL; 22 | } 23 | 24 | public function getQueueNames() 25 | { 26 | return $this->queueNames; 27 | } 28 | 29 | public function getNextMarker() 30 | { 31 | return $this->nextMarker; 32 | } 33 | 34 | public function parseResponse($statusCode, $content) 35 | { 36 | $this->statusCode = $statusCode; 37 | if ($statusCode != 200) { 38 | $this->parseErrorResponse($statusCode, $content); 39 | return; 40 | } 41 | 42 | $this->succeed = TRUE; 43 | $xmlReader = new \XMLReader(); 44 | try { 45 | $xmlReader->XML($content); 46 | while ($xmlReader->read()) 47 | { 48 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 49 | { 50 | switch ($xmlReader->name) { 51 | case 'QueueURL': 52 | $xmlReader->read(); 53 | if ($xmlReader->nodeType == \XMLReader::TEXT) 54 | { 55 | $queueName = $this->getQueueNameFromQueueURL($xmlReader->value); 56 | $this->queueNames[] = $queueName; 57 | } 58 | break; 59 | case 'NextMarker': 60 | $xmlReader->read(); 61 | if ($xmlReader->nodeType == \XMLReader::TEXT) 62 | { 63 | $this->nextMarker = $xmlReader->value; 64 | } 65 | break; 66 | } 67 | } 68 | } 69 | } catch (\Exception $e) { 70 | throw new MnsException($statusCode, $e->getMessage(), $e); 71 | } catch (\Throwable $t) { 72 | throw new MnsException($statusCode, $t->getMessage()); 73 | } 74 | } 75 | 76 | private function getQueueNameFromQueueURL($queueURL) 77 | { 78 | $pieces = explode("/", $queueURL); 79 | if (count($pieces) == 5) 80 | { 81 | return $pieces[4]; 82 | } 83 | return ""; 84 | } 85 | 86 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 87 | { 88 | $this->succeed = FALSE; 89 | $xmlReader = new \XMLReader(); 90 | try { 91 | $xmlReader->XML($content); 92 | $result = XMLParser::parseNormalError($xmlReader); 93 | 94 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 95 | } catch (\Exception $e) { 96 | if ($exception != NULL) { 97 | throw $exception; 98 | } elseif($e instanceof MnsException) { 99 | throw $e; 100 | } else { 101 | throw new MnsException($statusCode, $e->getMessage()); 102 | } 103 | } catch (\Throwable $t) { 104 | throw new MnsException($statusCode, $t->getMessage()); 105 | } 106 | } 107 | } 108 | 109 | ?> 110 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/ListSubscriptionResponse.php: -------------------------------------------------------------------------------- 1 | SubscriptionNames = array(); 16 | $this->nextMarker = NULL; 17 | } 18 | 19 | public function isFinished() 20 | { 21 | return $this->nextMarker == NULL; 22 | } 23 | 24 | public function getSubscriptionNames() 25 | { 26 | return $this->SubscriptionNames; 27 | } 28 | 29 | public function getNextMarker() 30 | { 31 | return $this->nextMarker; 32 | } 33 | 34 | public function parseResponse($statusCode, $content) 35 | { 36 | $this->statusCode = $statusCode; 37 | if ($statusCode != 200) { 38 | $this->parseErrorResponse($statusCode, $content); 39 | return; 40 | } 41 | 42 | $this->succeed = TRUE; 43 | $xmlReader = new \XMLReader(); 44 | try { 45 | $xmlReader->XML($content); 46 | while ($xmlReader->read()) 47 | { 48 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 49 | { 50 | switch ($xmlReader->name) { 51 | case 'SubscriptionURL': 52 | $xmlReader->read(); 53 | if ($xmlReader->nodeType == \XMLReader::TEXT) 54 | { 55 | $subscriptionName = $this->getSubscriptionNameFromSubscriptionURL($xmlReader->value); 56 | $this->SubscriptionNames[] = $subscriptionName; 57 | } 58 | break; 59 | case 'NextMarker': 60 | $xmlReader->read(); 61 | if ($xmlReader->nodeType == \XMLReader::TEXT) 62 | { 63 | $this->nextMarker = $xmlReader->value; 64 | } 65 | break; 66 | } 67 | } 68 | } 69 | } 70 | catch (\Exception $e) 71 | { 72 | throw new MnsException($statusCode, $e->getMessage(), $e); 73 | } 74 | catch (\Throwable $t) 75 | { 76 | throw new MnsException($statusCode, $t->getMessage()); 77 | } 78 | } 79 | 80 | private function getSubscriptionNameFromSubscriptionURL($subscriptionURL) 81 | { 82 | $pieces = explode("/", $subscriptionURL); 83 | if (count($pieces) == 7) 84 | { 85 | return $pieces[6]; 86 | } 87 | return ""; 88 | } 89 | 90 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 91 | { 92 | $this->succeed = FALSE; 93 | $xmlReader = new \XMLReader(); 94 | try 95 | { 96 | $xmlReader->XML($content); 97 | $result = XMLParser::parseNormalError($xmlReader); 98 | 99 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 100 | } 101 | catch (\Exception $e) 102 | { 103 | if ($exception != NULL) 104 | { 105 | throw $exception; 106 | } 107 | elseif ($e instanceof MnsException) 108 | { 109 | throw $e; 110 | } 111 | else 112 | { 113 | throw new MnsException($statusCode, $e->getMessage()); 114 | } 115 | } 116 | catch (\Throwable $t) 117 | { 118 | throw new MnsException($statusCode, $t->getMessage()); 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/ListTopicResponse.php: -------------------------------------------------------------------------------- 1 | topicNames = array(); 16 | $this->nextMarker = NULL; 17 | } 18 | 19 | public function isFinished() 20 | { 21 | return $this->nextMarker == NULL; 22 | } 23 | 24 | public function getTopicNames() 25 | { 26 | return $this->topicNames; 27 | } 28 | 29 | public function getNextMarker() 30 | { 31 | return $this->nextMarker; 32 | } 33 | 34 | public function parseResponse($statusCode, $content) 35 | { 36 | $this->statusCode = $statusCode; 37 | if ($statusCode != 200) { 38 | $this->parseErrorResponse($statusCode, $content); 39 | return; 40 | } 41 | 42 | $this->succeed = TRUE; 43 | $xmlReader = new \XMLReader(); 44 | try 45 | { 46 | $xmlReader->XML($content); 47 | while ($xmlReader->read()) 48 | { 49 | if ($xmlReader->nodeType == \XMLReader::ELEMENT) 50 | { 51 | switch ($xmlReader->name) { 52 | case 'TopicURL': 53 | $xmlReader->read(); 54 | if ($xmlReader->nodeType == \XMLReader::TEXT) 55 | { 56 | $topicName = $this->getTopicNameFromTopicURL($xmlReader->value); 57 | $this->topicNames[] = $topicName; 58 | } 59 | break; 60 | case 'NextMarker': 61 | $xmlReader->read(); 62 | if ($xmlReader->nodeType == \XMLReader::TEXT) 63 | { 64 | $this->nextMarker = $xmlReader->value; 65 | } 66 | break; 67 | } 68 | } 69 | } 70 | } 71 | catch (\Exception $e) 72 | { 73 | throw new MnsException($statusCode, $e->getMessage(), $e); 74 | } 75 | catch (\Throwable $t) 76 | { 77 | throw new MnsException($statusCode, $t->getMessage()); 78 | } 79 | } 80 | 81 | private function getTopicNameFromTopicURL($topicURL) 82 | { 83 | $pieces = explode("/", $topicURL); 84 | if (count($pieces) == 5) 85 | { 86 | return $pieces[4]; 87 | } 88 | return ""; 89 | } 90 | 91 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 92 | { 93 | $this->succeed = FALSE; 94 | $xmlReader = new \XMLReader(); 95 | try 96 | { 97 | $xmlReader->XML($content); 98 | $result = XMLParser::parseNormalError($xmlReader); 99 | 100 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 101 | } 102 | catch (\Exception $e) 103 | { 104 | if ($exception != NULL) 105 | { 106 | throw $exception; 107 | } 108 | elseif ($e instanceof MnsException) 109 | { 110 | throw $e; 111 | } 112 | else 113 | { 114 | throw new MnsException($statusCode, $e->getMessage()); 115 | } 116 | } 117 | catch (\Throwable $t) 118 | { 119 | throw new MnsException($statusCode, $t->getMessage()); 120 | } 121 | } 122 | } 123 | 124 | ?> 125 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/MnsPromise.php: -------------------------------------------------------------------------------- 1 | promise = $promise; 18 | $this->response = $response; 19 | } 20 | 21 | public function isCompleted() 22 | { 23 | return $this->promise->getState() != 'pending'; 24 | } 25 | 26 | public function getResponse() 27 | { 28 | return $this->response; 29 | } 30 | 31 | public function wait() 32 | { 33 | try { 34 | $res = $this->promise->wait(); 35 | if ($res instanceof ResponseInterface) 36 | { 37 | $this->response->parseResponse($res->getStatusCode(), $res->getBody()); 38 | } 39 | } catch (TransferException $e) { 40 | $message = $e->getMessage(); 41 | if ($e->hasResponse()) { 42 | $message = $e->getResponse()->getBody(); 43 | } 44 | $this->response->parseErrorResponse($e->getCode(), $message); 45 | } 46 | return $this->response; 47 | } 48 | } 49 | 50 | ?> 51 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/PeekMessageResponse.php: -------------------------------------------------------------------------------- 1 | base64 = $base64; 22 | } 23 | 24 | public function setBase64($base64) 25 | { 26 | $this->base64 = $base64; 27 | } 28 | 29 | public function isBase64() 30 | { 31 | return ($this->base64 == TRUE); 32 | } 33 | 34 | public function parseResponse($statusCode, $content) 35 | { 36 | $this->statusCode = $statusCode; 37 | if ($statusCode == 200) { 38 | $this->succeed = TRUE; 39 | } else { 40 | $this->parseErrorResponse($statusCode, $content); 41 | } 42 | 43 | $xmlReader = new \XMLReader(); 44 | try { 45 | $xmlReader->XML($content); 46 | $this->readMessagePropertiesForPeekXML($xmlReader, $this->base64); 47 | } catch (\Exception $e) { 48 | throw new MnsException($statusCode, $e->getMessage(), $e); 49 | } catch (\Throwable $t) { 50 | throw new MnsException($statusCode, $t->getMessage()); 51 | } 52 | 53 | } 54 | 55 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 56 | { 57 | $this->succeed = FALSE; 58 | $xmlReader = new \XMLReader(); 59 | try { 60 | $xmlReader->XML($content); 61 | $result = XMLParser::parseNormalError($xmlReader); 62 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 63 | { 64 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 65 | } 66 | if ($result['Code'] == Constants::MESSAGE_NOT_EXIST) 67 | { 68 | throw new MessageNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 69 | } 70 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 71 | } catch (\Exception $e) { 72 | if ($exception != NULL) { 73 | throw $exception; 74 | } elseif($e instanceof MnsException) { 75 | throw $e; 76 | } else { 77 | throw new MnsException($statusCode, $e->getMessage()); 78 | } 79 | } catch (\Throwable $t) { 80 | throw new MnsException($statusCode, $t->getMessage()); 81 | } 82 | } 83 | } 84 | 85 | ?> 86 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/PublishMessageResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 24 | if ($statusCode == 201) { 25 | $this->succeed = TRUE; 26 | } else { 27 | $this->parseErrorResponse($statusCode, $content); 28 | } 29 | 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $this->readMessageIdAndMD5XML($xmlReader); 34 | } catch (\Exception $e) { 35 | throw new MnsException($statusCode, $e->getMessage(), $e); 36 | } catch (\Throwable $t) { 37 | throw new MnsException($statusCode, $t->getMessage()); 38 | } 39 | 40 | } 41 | 42 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 43 | { 44 | $this->succeed = FALSE; 45 | $xmlReader = new \XMLReader(); 46 | try { 47 | $xmlReader->XML($content); 48 | $result = XMLParser::parseNormalError($xmlReader); 49 | if ($result['Code'] == Constants::TOPIC_NOT_EXIST) 50 | { 51 | throw new TopicNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 52 | } 53 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 54 | { 55 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 56 | } 57 | if ($result['Code'] == Constants::MALFORMED_XML) 58 | { 59 | throw new MalformedXMLException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 60 | } 61 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 62 | } catch (\Exception $e) { 63 | if ($exception != NULL) { 64 | throw $exception; 65 | } elseif($e instanceof MnsException) { 66 | throw $e; 67 | } else { 68 | throw new MnsException($statusCode, $e->getMessage()); 69 | } 70 | } catch (\Throwable $t) { 71 | throw new MnsException($statusCode, $t->getMessage()); 72 | } 73 | } 74 | } 75 | 76 | ?> 77 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/ReceiveMessageResponse.php: -------------------------------------------------------------------------------- 1 | base64 = $base64; 22 | } 23 | 24 | public function setBase64($base64) 25 | { 26 | $this->base64 = $base64; 27 | } 28 | 29 | public function isBase64() 30 | { 31 | return ($this->base64 == TRUE); 32 | } 33 | 34 | public function parseResponse($statusCode, $content) 35 | { 36 | $this->statusCode = $statusCode; 37 | if ($statusCode == 200) { 38 | $this->succeed = TRUE; 39 | } else { 40 | $this->parseErrorResponse($statusCode, $content); 41 | } 42 | 43 | $xmlReader = new \XMLReader(); 44 | try { 45 | $xmlReader->XML($content); 46 | $this->readMessagePropertiesForReceiveXML($xmlReader, $this->base64); 47 | } catch (\Exception $e) { 48 | throw new MnsException($statusCode, $e->getMessage(), $e); 49 | } catch (\Throwable $t) { 50 | throw new MnsException($statusCode, $t->getMessage()); 51 | } 52 | 53 | } 54 | 55 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 56 | { 57 | $this->succeed = FALSE; 58 | $xmlReader = new \XMLReader(); 59 | try { 60 | $xmlReader->XML($content); 61 | $result = XMLParser::parseNormalError($xmlReader); 62 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 63 | { 64 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 65 | } 66 | if ($result['Code'] == Constants::MESSAGE_NOT_EXIST) 67 | { 68 | throw new MessageNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 69 | } 70 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 71 | } catch (\Exception $e) { 72 | if ($exception != NULL) { 73 | throw $exception; 74 | } elseif($e instanceof MnsException) { 75 | throw $e; 76 | } else { 77 | throw new MnsException($statusCode, $e->getMessage()); 78 | } 79 | } catch (\Throwable $t) { 80 | throw new MnsException($statusCode, $t->getMessage()); 81 | } 82 | } 83 | } 84 | 85 | ?> 86 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/SendMessageResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 24 | if ($statusCode == 201) { 25 | $this->succeed = TRUE; 26 | } else { 27 | $this->parseErrorResponse($statusCode, $content); 28 | } 29 | 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $this->readMessageIdAndMD5XML($xmlReader); 34 | } catch (\Exception $e) { 35 | throw new MnsException($statusCode, $e->getMessage(), $e); 36 | } catch (\Throwable $t) { 37 | throw new MnsException($statusCode, $t->getMessage()); 38 | } 39 | 40 | } 41 | 42 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 43 | { 44 | $this->succeed = FALSE; 45 | $xmlReader = new \XMLReader(); 46 | try { 47 | $xmlReader->XML($content); 48 | $result = XMLParser::parseNormalError($xmlReader); 49 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 50 | { 51 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 52 | } 53 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 54 | { 55 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 56 | } 57 | if ($result['Code'] == Constants::MALFORMED_XML) 58 | { 59 | throw new MalformedXMLException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 60 | } 61 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 62 | } catch (\Exception $e) { 63 | if ($exception != NULL) { 64 | throw $exception; 65 | } elseif($e instanceof MnsException) { 66 | throw $e; 67 | } else { 68 | throw new MnsException($statusCode, $e->getMessage()); 69 | } 70 | } catch (\Throwable $t) { 71 | throw new MnsException($statusCode, $t->getMessage()); 72 | } 73 | } 74 | } 75 | 76 | ?> 77 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/SetQueueAttributeResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 20 | if ($statusCode == 204) { 21 | $this->succeed = TRUE; 22 | } else { 23 | $this->parseErrorResponse($statusCode, $content); 24 | } 25 | } 26 | 27 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 28 | { 29 | $this->succeed = FALSE; 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $result = XMLParser::parseNormalError($xmlReader); 34 | 35 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 36 | { 37 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 38 | } 39 | if ($result['Code'] == Constants::QUEUE_NOT_EXIST) 40 | { 41 | throw new QueueNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 42 | } 43 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 44 | } catch (\Exception $e) { 45 | if ($exception != NULL) { 46 | throw $exception; 47 | } elseif($e instanceof MnsException) { 48 | throw $e; 49 | } else { 50 | throw new MnsException($statusCode, $e->getMessage()); 51 | } 52 | } catch (\Throwable $t) { 53 | throw new MnsException($statusCode, $t->getMessage()); 54 | } 55 | } 56 | } 57 | 58 | ?> 59 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/SetSubscriptionAttributeResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 20 | if ($statusCode == 204) { 21 | $this->succeed = TRUE; 22 | } else { 23 | $this->parseErrorResponse($statusCode, $content); 24 | } 25 | } 26 | 27 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 28 | { 29 | $this->succeed = FALSE; 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $result = XMLParser::parseNormalError($xmlReader); 34 | 35 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 36 | { 37 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 38 | } 39 | if ($result['Code'] == Constants::SUBSCRIPTION_NOT_EXIST) 40 | { 41 | throw new SubscriptionNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 42 | } 43 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 44 | } 45 | catch (\Exception $e) 46 | { 47 | if ($exception != NULL) { 48 | throw $exception; 49 | } 50 | elseif ($e instanceof MnsException) 51 | { 52 | throw $e; 53 | } 54 | else 55 | { 56 | throw new MnsException($statusCode, $e->getMessage()); 57 | } 58 | } catch (\Throwable $t) { 59 | throw new MnsException($statusCode, $t->getMessage()); 60 | } 61 | } 62 | } 63 | 64 | ?> 65 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/SetTopicAttributeResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 20 | if ($statusCode == 204) { 21 | $this->succeed = TRUE; 22 | } else { 23 | $this->parseErrorResponse($statusCode, $content); 24 | } 25 | } 26 | 27 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 28 | { 29 | $this->succeed = FALSE; 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $result = XMLParser::parseNormalError($xmlReader); 34 | 35 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 36 | { 37 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 38 | } 39 | if ($result['Code'] == Constants::TOPIC_NOT_EXIST) 40 | { 41 | throw new TopicNotExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 42 | } 43 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 44 | } 45 | catch (\Exception $e) 46 | { 47 | if ($exception != NULL) 48 | { 49 | throw $exception; 50 | } 51 | elseif ($e instanceof MnsException) 52 | { 53 | throw $e; 54 | } 55 | else 56 | { 57 | throw new MnsException($statusCode, $e->getMessage()); 58 | } 59 | } 60 | catch (\Throwable $t) 61 | { 62 | throw new MnsException($statusCode, $t->getMessage()); 63 | } 64 | } 65 | } 66 | 67 | ?> 68 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/SubscribeResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 16 | if ($statusCode == 201 || $statusCode == 204) 17 | { 18 | $this->succeed = TRUE; 19 | } 20 | else 21 | { 22 | $this->parseErrorResponse($statusCode, $content); 23 | } 24 | } 25 | 26 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 27 | { 28 | $this->succeed = FALSE; 29 | $xmlReader = new \XMLReader(); 30 | try 31 | { 32 | $xmlReader->XML($content); 33 | $result = XMLParser::parseNormalError($xmlReader); 34 | 35 | if ($result['Code'] == Constants::INVALID_ARGUMENT) 36 | { 37 | throw new InvalidArgumentException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 38 | } 39 | if ($result['Code'] == Constants::SUBSCRIPTION_ALREADY_EXIST) 40 | { 41 | throw new SubscriptionAlreadyExistException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 42 | } 43 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 44 | } 45 | catch (\Exception $e) 46 | { 47 | if ($exception != NULL) 48 | { 49 | throw $exception; 50 | } 51 | elseif ($e instanceof MnsException) 52 | { 53 | throw $e; 54 | } 55 | else 56 | { 57 | throw new MnsException($statusCode, $e->getMessage()); 58 | } 59 | } 60 | catch (\Throwable $t) 61 | { 62 | throw new MnsException($statusCode, $t->getMessage()); 63 | } 64 | } 65 | } 66 | 67 | ?> 68 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Responses/UnsubscribeResponse.php: -------------------------------------------------------------------------------- 1 | statusCode = $statusCode; 17 | if ($statusCode == 204) 18 | { 19 | $this->succeed = TRUE; 20 | } 21 | else 22 | { 23 | $this->parseErrorResponse($statusCode, $content); 24 | } 25 | } 26 | 27 | public function parseErrorResponse($statusCode, $content, MnsException $exception = NULL) 28 | { 29 | $this->succeed = FALSE; 30 | $xmlReader = new \XMLReader(); 31 | try { 32 | $xmlReader->XML($content); 33 | $result = XMLParser::parseNormalError($xmlReader); 34 | throw new MnsException($statusCode, $result['Message'], $exception, $result['Code'], $result['RequestId'], $result['HostId']); 35 | } catch (\Exception $e) { 36 | if ($exception != NULL) { 37 | throw $exception; 38 | } elseif($e instanceof MnsException) { 39 | throw $e; 40 | } else { 41 | throw new MnsException($statusCode, $e->getMessage()); 42 | } 43 | } catch (\Throwable $t) { 44 | throw new MnsException($statusCode, $t->getMessage()); 45 | } 46 | } 47 | } 48 | 49 | ?> 50 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Signature/Signature.php: -------------------------------------------------------------------------------- 1 | getHeaders(); 13 | $contentMd5 = ""; 14 | if (isset($headers['Content-MD5'])) 15 | { 16 | $contentMd5 = $headers['Content-MD5']; 17 | } 18 | $contentType = ""; 19 | if (isset($headers['Content-Type'])) 20 | { 21 | $contentType = $headers['Content-Type']; 22 | } 23 | $date = $headers['Date']; 24 | $queryString = $request->getQueryString(); 25 | $canonicalizedResource = $request->getResourcePath(); 26 | if ($queryString != NULL) 27 | { 28 | $canonicalizedResource .= "?" . $request->getQueryString(); 29 | } 30 | if (0 !== strpos($canonicalizedResource, "/")) 31 | { 32 | $canonicalizedResource = "/" . $canonicalizedResource; 33 | } 34 | 35 | $tmpHeaders = array(); 36 | foreach ($headers as $key => $value) 37 | { 38 | if (0 === strpos($key, Constants::MNS_HEADER_PREFIX)) 39 | { 40 | $tmpHeaders[$key] = $value; 41 | } 42 | } 43 | ksort($tmpHeaders); 44 | 45 | $canonicalizedMNSHeaders = implode("\n", array_map(function ($v, $k) { return $k . ":" . $v; }, $tmpHeaders, array_keys($tmpHeaders))); 46 | 47 | $stringToSign = strtoupper($request->getMethod()) . "\n" . $contentMd5 . "\n" . $contentType . "\n" . $date . "\n" . $canonicalizedMNSHeaders . "\n" . $canonicalizedResource; 48 | 49 | return base64_encode(hash_hmac("sha1", $stringToSign, $accessKey, $raw_output = TRUE)); 50 | } 51 | } 52 | 53 | ?> 54 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Topic.php: -------------------------------------------------------------------------------- 1 | client = $client; 34 | $this->topicName = $topicName; 35 | } 36 | 37 | public function getTopicName() 38 | { 39 | return $this->topicName; 40 | } 41 | 42 | public function setAttribute(TopicAttributes $attributes) 43 | { 44 | $request = new SetTopicAttributeRequest($this->topicName, $attributes); 45 | $response = new SetTopicAttributeResponse(); 46 | return $this->client->sendRequest($request, $response); 47 | } 48 | 49 | public function getAttribute() 50 | { 51 | $request = new GetTopicAttributeRequest($this->topicName); 52 | $response = new GetTopicAttributeResponse(); 53 | return $this->client->sendRequest($request, $response); 54 | } 55 | 56 | public function publishMessage(PublishMessageRequest $request) 57 | { 58 | $request->setTopicName($this->topicName); 59 | $response = new PublishMessageResponse(); 60 | return $this->client->sendRequest($request, $response); 61 | } 62 | 63 | public function subscribe(SubscriptionAttributes $attributes) 64 | { 65 | $attributes->setTopicName($this->topicName); 66 | $request = new SubscribeRequest($attributes); 67 | $response = new SubscribeResponse(); 68 | return $this->client->sendRequest($request, $response); 69 | } 70 | 71 | public function unsubscribe($subscriptionName) 72 | { 73 | $request = new UnsubscribeRequest($this->topicName, $subscriptionName); 74 | $response = new UnsubscribeResponse(); 75 | return $this->client->sendRequest($request, $response); 76 | } 77 | 78 | public function getSubscriptionAttribute($subscriptionName) 79 | { 80 | $request = new GetSubscriptionAttributeRequest($this->topicName, $subscriptionName); 81 | $response = new GetSubscriptionAttributeResponse(); 82 | return $this->client->sendRequest($request, $response); 83 | } 84 | 85 | public function setSubscriptionAttribute(UpdateSubscriptionAttributes $attributes) 86 | { 87 | $attributes->setTopicName($this->topicName); 88 | $request = new SetSubscriptionAttributeRequest($attributes); 89 | $response = new SetSubscriptionAttributeResponse(); 90 | return $this->client->sendRequest($request, $response); 91 | } 92 | 93 | public function listSubscription($retNum = NULL, $prefix = NULL, $marker = NULL) 94 | { 95 | $request = new ListSubscriptionRequest($this->topicName, $retNum, $prefix, $marker); 96 | $response = new ListSubscriptionResponse(); 97 | return $this->client->sendRequest($request, $response); 98 | } 99 | } 100 | 101 | ?> 102 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Traits/MessageIdAndMD5.php: -------------------------------------------------------------------------------- 1 | messageId; 15 | } 16 | 17 | public function getMessageBodyMD5() 18 | { 19 | return $this->messageBodyMD5; 20 | } 21 | 22 | public function readMessageIdAndMD5XML(\XMLReader $xmlReader) 23 | { 24 | $message = Message::fromXML($xmlReader, TRUE); 25 | $this->messageId = $message->getMessageId(); 26 | $this->messageBodyMD5 = $message->getMessageBodyMD5(); 27 | } 28 | } 29 | 30 | ?> 31 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Traits/MessagePropertiesForPeek.php: -------------------------------------------------------------------------------- 1 | messageBody; 22 | } 23 | 24 | public function getEnqueueTime() 25 | { 26 | return $this->enqueueTime; 27 | } 28 | 29 | public function getNextVisibleTime() 30 | { 31 | return $this->nextVisibleTime; 32 | } 33 | 34 | public function getFirstDequeueTime() 35 | { 36 | return $this->firstDequeueTime; 37 | } 38 | 39 | public function getDequeueCount() 40 | { 41 | return $this->dequeueCount; 42 | } 43 | 44 | public function getPriority() 45 | { 46 | return $this->priority; 47 | } 48 | 49 | public function readMessagePropertiesForPeekXML(\XMLReader $xmlReader, $base64) 50 | { 51 | $message = Message::fromXML($xmlReader, $base64); 52 | $this->messageId = $message->getMessageId(); 53 | $this->messageBodyMD5 = $message->getMessageBodyMD5(); 54 | $this->messageBody = $message->getMessageBody(); 55 | $this->enqueueTime = $message->getEnqueueTime(); 56 | $this->nextVisibleTime = $message->getNextVisibleTime(); 57 | $this->firstDequeueTime = $message->getFirstDequeueTime(); 58 | $this->dequeueCount = $message->getDequeueCount(); 59 | $this->priority = $message->getPriority(); 60 | } 61 | } 62 | 63 | ?> 64 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Traits/MessagePropertiesForPublish.php: -------------------------------------------------------------------------------- 1 | messageBody; 13 | } 14 | 15 | public function setMessageBody($messageBody) 16 | { 17 | $this->messageBody = $messageBody; 18 | } 19 | 20 | public function writeMessagePropertiesForPublishXML(\XMLWriter $xmlWriter) 21 | { 22 | if ($this->messageBody != NULL) 23 | { 24 | $xmlWriter->writeElement(Constants::MESSAGE_BODY, $this->messageBody); 25 | } 26 | } 27 | } 28 | 29 | ?> 30 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Traits/MessagePropertiesForReceive.php: -------------------------------------------------------------------------------- 1 | receiptHandle; 16 | } 17 | 18 | public function readMessagePropertiesForReceiveXML(\XMLReader $xmlReader, $base64) 19 | { 20 | $message = Message::fromXML($xmlReader, $base64); 21 | $this->messageId = $message->getMessageId(); 22 | $this->messageBodyMD5 = $message->getMessageBodyMD5(); 23 | $this->messageBody = $message->getMessageBody(); 24 | $this->enqueueTime = $message->getEnqueueTime(); 25 | $this->nextVisibleTime = $message->getNextVisibleTime(); 26 | $this->firstDequeueTime = $message->getFirstDequeueTime(); 27 | $this->dequeueCount = $message->getDequeueCount(); 28 | $this->priority = $message->getPriority(); 29 | $this->receiptHandle = $message->getReceiptHandle(); 30 | } 31 | } 32 | 33 | ?> 34 | -------------------------------------------------------------------------------- /lib/AliyunMNS/Traits/MessagePropertiesForSend.php: -------------------------------------------------------------------------------- 1 | messageBody; 15 | } 16 | 17 | public function setMessageBody($messageBody) 18 | { 19 | $this->messageBody = $messageBody; 20 | } 21 | 22 | public function getDelaySeconds() 23 | { 24 | return $this->delaySeconds; 25 | } 26 | 27 | public function setDelaySeconds($delaySeconds) 28 | { 29 | $this->delaySeconds = $delaySeconds; 30 | } 31 | 32 | public function getPriority() 33 | { 34 | return $this->priority; 35 | } 36 | 37 | public function setPriority($priority) 38 | { 39 | $this->priority = $priority; 40 | } 41 | 42 | public function writeMessagePropertiesForSendXML(\XMLWriter $xmlWriter, $base64) 43 | { 44 | if ($this->messageBody != NULL) 45 | { 46 | if ($base64 == TRUE) { 47 | $xmlWriter->writeElement(Constants::MESSAGE_BODY, base64_encode($this->messageBody)); 48 | } else { 49 | $xmlWriter->writeElement(Constants::MESSAGE_BODY, $this->messageBody); 50 | } 51 | } 52 | if ($this->delaySeconds != NULL) 53 | { 54 | $xmlWriter->writeElement(Constants::DELAY_SECONDS, $this->delaySeconds); 55 | } 56 | if ($this->priority != NULL) 57 | { 58 | $xmlWriter->writeElement(Constants::PRIORITY, $this->priority); 59 | } 60 | } 61 | } 62 | 63 | ?> 64 | -------------------------------------------------------------------------------- /lib/README.md: -------------------------------------------------------------------------------- 1 | # MNS SDK for PHP 2 | Please refer to http://www.aliyun.com/product/mns and https://docs.aliyun.com/?spm=5176.7393424.9.6.5ki1hv#/pub/mns/api_reference/intro&intro for more API details. 3 | 4 | ## Samples 5 | You must fulfill the AccessId/AccessKey/AccountID in the example before running. 6 | 7 | ## Require 8 | PHP >= 5.5 9 | 10 | ## Usage 11 | Add the require_once("/path_to_sdk/mns-autoloader.php") in your php file when using sdk 12 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | ./tests 20 | 21 | 22 | 23 | 24 | ./src 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/Connectors/MnsConnector.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Connectors; 16 | 17 | use AliyunMNS\Client as MnsClient; 18 | use Illuminate\Queue\Connectors\ConnectorInterface; 19 | use LaravelMns\MnsAdapter; 20 | use LaravelMns\MnsQueue; 21 | 22 | /** 23 | * Class MnsConnector. 24 | * 25 | * @codeCoverageIgnore 26 | */ 27 | class MnsConnector implements ConnectorInterface 28 | { 29 | /** 30 | * Establish a queue connection. 31 | * 32 | * @param array $config 33 | * 34 | * @return \Illuminate\Contracts\Queue\Queue 35 | */ 36 | public function connect(array $config) 37 | { 38 | $config = config('queue.connections.mns'); 39 | 40 | return new MnsQueue( 41 | new MnsAdapter( 42 | new MnsClient($config['endpoint'], $config['key'], $config['secret']), 43 | $config['queue'] 44 | ) 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Jobs/MnsJob.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Jobs; 16 | 17 | use AliyunMNS\Responses\ReceiveMessageResponse; 18 | use Illuminate\Container\Container; 19 | use Illuminate\Contracts\Queue\Job as JobContract; 20 | use Illuminate\Queue\Jobs\Job; 21 | use LaravelMns\MnsAdapter; 22 | 23 | class MnsJob extends Job implements JobContract 24 | { 25 | /** 26 | * The class name of the job. 27 | * 28 | * @var string 29 | */ 30 | protected $job; 31 | 32 | /** 33 | * The queue message data. 34 | * 35 | * @var string 36 | */ 37 | protected $data; 38 | 39 | /** 40 | * @var \LaravelMns\MnsAdapter 41 | */ 42 | private $mns; 43 | 44 | /** 45 | * Create a new job instance. 46 | * 47 | * @param \Illuminate\Container\Container $container 48 | * @param \LaravelMns\MnsAdapter $mns 49 | * @param string $queue 50 | * @param \AliyunMNS\Responses\ReceiveMessageResponse $job 51 | */ 52 | public function __construct( 53 | Container $container, 54 | MnsAdapter $mns, 55 | $queue, 56 | ReceiveMessageResponse $job 57 | ) { 58 | $this->container = $container; 59 | $this->mns = $mns; 60 | $this->queue = $queue; 61 | $this->job = $job; 62 | } 63 | 64 | /** 65 | * Fire the job. 66 | * 67 | * @return void 68 | */ 69 | public function fire() 70 | { 71 | if (method_exists($this, 'resolveAndFire')) { 72 | $this->resolveAndFire(json_decode($this->getRawBody(), true)); 73 | return; 74 | } 75 | parent::fire(); 76 | } 77 | 78 | /** 79 | * Get the raw body string for the job. 80 | * 81 | * @return string 82 | */ 83 | public function getRawBody() 84 | { 85 | return $this->job->getMessageBody(); 86 | } 87 | 88 | /** 89 | * Delete the job from the queue. 90 | */ 91 | public function delete() 92 | { 93 | parent::delete(); 94 | $receiptHandle = $this->job->getReceiptHandle(); 95 | $this->mns->deleteMessage($receiptHandle); 96 | } 97 | 98 | /** 99 | * Release the job back into the queue. 100 | * 101 | * @param int $delay 102 | */ 103 | public function release($delay = 0) 104 | { 105 | // 默认情况下 Laravel 将以 delay 0 来更改可见性,其预期的是使用队列服务默认的 106 | // 下次可消费时间,但 Aliyun MNS PHP SDK 的接口要求这个值必须大于 0, 107 | // 指从现在起,多久后消息变为可消费。 108 | $delay = $delay > 0 109 | ? $delay 110 | : $this->fromNowToNextVisibleTime($this->job->getNextVisibleTime()); 111 | parent::release($delay); 112 | $this->mns->changeMessageVisibility( 113 | $this->job->getReceiptHandle(), 114 | $delay 115 | ); 116 | } 117 | 118 | /** 119 | * Get the number of times the job has been attempted. 120 | * 121 | * @return int 122 | */ 123 | public function attempts() 124 | { 125 | return (int) $this->job->getDequeueCount(); 126 | } 127 | 128 | /** 129 | * 从现在起到消息变为可消费的秒数。 130 | * 131 | * @param int $nextVisibleTime 下次可消费时的微妙时间戳。 132 | * 133 | * @return int 134 | */ 135 | private function fromNowToNextVisibleTime($nextVisibleTime) 136 | { 137 | $nowInMilliSeconds = 1000 * microtime(true); 138 | $fromNowToNextVisibleTime = $nextVisibleTime - $nowInMilliSeconds; 139 | 140 | return (int) ($fromNowToNextVisibleTime / 1000); 141 | } 142 | 143 | /** 144 | * Get the IoC container instance. 145 | * 146 | * @return \Illuminate\Container\Container 147 | */ 148 | public function getContainer() 149 | { 150 | return $this->container; 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /src/MnsAdapter.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns; 16 | 17 | use AliyunMNS\Client as MnsClient; 18 | 19 | /** 20 | * Class MnsAdapter. 21 | * 22 | * @method string getQueueName() 23 | * @method \AliyunMNS\Responses\SetQueueAttributeResponse setAttribute(\AliyunMNS\Model\QueueAttributes $attributes) 24 | * @method \AliyunMNS\Responses\MnsPromise setAttributeAsync(\AliyunMNS\Model\QueueAttributes $attributes, \AliyunMNS\AsyncCallback $callback = null) 25 | * @method \AliyunMNS\Responses\GetQueueAttributeResponse getAttribute(\AliyunMNS\Model\QueueAttributes $attributes) 26 | * @method \AliyunMNS\Responses\MnsPromise getAttributeAsync(\AliyunMNS\Model\QueueAttributes $attributes, \AliyunMNS\AsyncCallback $callback = null) 27 | * @method \AliyunMNS\Responses\SendMessageResponse sendMessage(\AliyunMNS\Requests\SendMessageRequest $request) 28 | * @method \AliyunMNS\Responses\MnsPromise sendMessageAsync(\AliyunMNS\Requests\SendMessageRequest $request, \AliyunMNS\AsyncCallback $callback = null) 29 | * @method \AliyunMNS\Responses\PeekMessageResponse peekMessage() 30 | * @method \AliyunMNS\Responses\MnsPromise peekMessageAsync(\AliyunMNS\AsyncCallback $callback = null) 31 | * @method \AliyunMNS\Responses\ReceiveMessageResponse receiveMessage() 32 | * @method \AliyunMNS\Responses\MnsPromise receiveMessageAsync(\AliyunMNS\AsyncCallback $callback = null) 33 | * @method \AliyunMNS\Responses\ReceiveMessageResponse deleteMessage(string $receiptHandle) 34 | * @method \AliyunMNS\Responses\MnsPromise deleteMessageAsync(string $receiptHandle, \AliyunMNS\AsyncCallback $callback = null) 35 | * @method \AliyunMNS\Responses\ChangeMessageVisibilityResponse changeMessageVisibility(string $receiptHandle, int $visibilityTimeout) 36 | * @method \AliyunMNS\Responses\BatchSendMessageResponse batchSendMessage(\AliyunMNS\Requests\BatchSendMessageRequest $request) 37 | * @method \AliyunMNS\Responses\MnsPromise batchSendMessageAsync(\AliyunMNS\Requests\BatchSendMessageRequest $request, \AliyunMNS\AsyncCallback $callback = null) 38 | * @method \AliyunMNS\Responses\BatchReceiveMessageResponse batchReceiveMessage(\AliyunMNS\Requests\BatchReceiveMessageRequest $request) 39 | * @method \AliyunMNS\Responses\MnsPromise batchReceiveMessageAsync(\AliyunMNS\Requests\BatchReceiveMessageRequest $request, \AliyunMNS\AsyncCallback $callback = null) 40 | * @method \AliyunMNS\Responses\BatchPeekMessageResponse batchPeekMessage(\AliyunMNS\Requests\BatchPeekMessageRequest $request) 41 | * @method \AliyunMNS\Responses\MnsPromise batchPeekMessageAsync(\AliyunMNS\Requests\BatchPeekMessageRequest $request, \AliyunMNS\AsyncCallback $callback = null) 42 | * @method \AliyunMNS\Responses\BatchDeleteMessageResponse batchDeleteMessage(\AliyunMNS\Requests\BatchDeleteMessageRequest $request) 43 | * @method \AliyunMNS\Responses\MnsPromise batchDeleteMessageAsync(\AliyunMNS\Requests\BatchDeleteMessageRequest $request, \AliyunMNS\AsyncCallback $callback = null) 44 | */ 45 | class MnsAdapter 46 | { 47 | /** 48 | * @var string 适配的阿里云消息服务 SDK 版本,仅用作记录。 49 | * 50 | * @see https://help.aliyun.com/document_detail/mns/sdk/php-sdk.html 51 | */ 52 | const ADAPTER_TO_ALIYUN_MNS_SDK_VERSION = '1.3.0@2016-02-25'; 53 | 54 | /** 55 | * Aliyun MNS SDK Client. 56 | * 57 | * @var MnsClient 58 | */ 59 | private $client; 60 | 61 | /** 62 | * Aliyun MNS SDK Queue. 63 | * 64 | * @var \AliyunMNS\Queue 65 | */ 66 | private $queue; 67 | 68 | public function __construct(MnsClient $client, $queueName) 69 | { 70 | $this->client = $client; 71 | $this->setQueue($queueName); 72 | } 73 | 74 | /** 75 | * 转化 \AliyunMNS\Client 对象, 76 | * 可以通过本对象直接访问(而无需通过 \AliyunMNS\Client 对象构建)。 77 | * 78 | * @param $method 79 | * @param $parameters 80 | * 81 | * @return mixed 82 | */ 83 | public function __call($method, $parameters) 84 | { 85 | return call_user_func_array([$this->queue, $method], $parameters); 86 | } 87 | 88 | /** 89 | * 将队列设定为特定队列。 90 | * 91 | * @param $queue 92 | * 93 | * @return self 94 | */ 95 | public function setQueue($queue) 96 | { 97 | if (null !== $queue) { 98 | $this->queue = $this->client->getQueueRef($queue); 99 | } 100 | 101 | return $this; 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/MnsQueue.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns; 16 | 17 | use AliyunMNS\Exception\MessageNotExistException; 18 | use AliyunMNS\Requests\SendMessageRequest; 19 | use Illuminate\Contracts\Queue\Queue as QueueContract; 20 | use Illuminate\Queue\Queue; 21 | 22 | class MnsQueue extends Queue implements QueueContract 23 | { 24 | /** 25 | * @var MnsAdapter 26 | */ 27 | protected $mns; 28 | 29 | /** 30 | * Custom callable to handle jobs. 31 | * 32 | * @var callable 33 | */ 34 | protected $jobCreator; 35 | 36 | /** 37 | * The name of default queue. 38 | * 39 | * @var string 40 | */ 41 | protected $default; 42 | 43 | public function __construct(MnsAdapter $mns) 44 | { 45 | $this->mns = $mns; 46 | 47 | $this->default = $this->mns->getQueueName(); 48 | } 49 | 50 | /** 51 | * Push a new job onto the queue. 52 | * 53 | * @param string $job 54 | * @param mixed $data 55 | * @param string $queue 56 | * 57 | * @return mixed 58 | */ 59 | public function push($job, $data = '', $queue = null) 60 | { 61 | $payload = $this->createPayload($job, $data); 62 | 63 | return $this->pushRaw($payload, $queue); 64 | } 65 | 66 | /** 67 | * Push a raw payload onto the queue. 68 | * 69 | * @param string $payload 70 | * @param string $queue 71 | * @param array $options 72 | * 73 | * @return mixed 74 | */ 75 | public function pushRaw($payload, $queue = null, array $options = []) 76 | { 77 | $message = new SendMessageRequest($payload); 78 | $response = $this->mns->setQueue($queue)->sendMessage($message); 79 | 80 | return $response->getMessageId(); 81 | } 82 | 83 | /** 84 | * Push a new job onto the queue after a delay. 85 | * 86 | * @param \DateTime|int $delay 87 | * @param string $job 88 | * @param mixed $data 89 | * @param string $queue 90 | * 91 | * @return mixed 92 | */ 93 | public function later($delay, $job, $data = '', $queue = null) 94 | { 95 | $seconds = $this->getSeconds($delay); 96 | $payload = $this->createPayload($job, $data); 97 | $message = new SendMessageRequest($payload, $seconds); 98 | $response = $this->mns->setQueue($queue)->sendMessage($message); 99 | 100 | return $response->getMessageId(); 101 | } 102 | 103 | /** 104 | * Pop the next job off of the queue. 105 | * 106 | * @param string $queue 107 | * 108 | * @return \Illuminate\Queue\Jobs\Job|null 109 | */ 110 | public function pop($queue = null) 111 | { 112 | $queue = $this->getDefaultIfNull($queue); 113 | 114 | try { 115 | $response = $this->mns->setQueue($queue)->receiveMessage(); 116 | } catch (MessageNotExistException $e) { 117 | $response = null; 118 | } 119 | 120 | if ($response) { 121 | if ($this->jobCreator) { 122 | return call_user_func($this->jobCreator, $this->container, $queue, $response); 123 | } else { 124 | return new Jobs\MnsJob($this->container, $this->mns, $queue, $response); 125 | } 126 | } 127 | 128 | return null; 129 | } 130 | 131 | /** 132 | * 获取默认队列名(如果当前队列名为 null)。 133 | * 134 | * @param string|null $wanted 135 | * 136 | * @return string 137 | */ 138 | public function getDefaultIfNull($wanted) 139 | { 140 | return $wanted ? $wanted : $this->default; 141 | } 142 | 143 | /** 144 | * 设置使用特定的回调函数处理 job。 145 | * 146 | * @param callable $callback 147 | * 148 | * @return $this 149 | */ 150 | public function createJobsUsing(callable $callback) 151 | { 152 | $this->jobCreator = $callback; 153 | 154 | return $this; 155 | } 156 | 157 | /** 158 | * Get the size of the queue. 159 | * 160 | * @param string $queue 161 | * @return int 162 | */ 163 | public function size($queue = null) 164 | { 165 | throw new NotImplementedException('size方法没有实现'); 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /src/NotImplementedException.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Test; 16 | 17 | use Mockery as m; 18 | use PHPUnit_Runner_Version; 19 | 20 | abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase 21 | { 22 | /** 23 | * @var string phpunit major version string. 24 | */ 25 | protected $phpunitSeries; 26 | 27 | public function tearDown() 28 | { 29 | // 因为运行在 strict 模式下的 phpunit,会将不包含 phpunit 断言的测试方法 30 | // 标记为 risky。这里简单的在测试方法执行后把 mockery 的预期全部转化成 31 | // phpunit 的断言,通常不直接包含 phpunit 断言的测试,基本都是 mockery 预期。 32 | // 测试类需要继承这里, m::close() 的时候替换为 parent::tearDown()。 33 | if ($container = m::getContainer()) { 34 | $this->addToAssertionCount( 35 | $container->mockery_getExpectationCount() 36 | ); 37 | m::close(); 38 | } 39 | $this->phpunitSeries = null; 40 | } 41 | 42 | public function setUp() 43 | { 44 | // 取到 phpunit 的版本,并在这个类里做适配防止测试运行在 45 | // 不同 phpunit 版本下出现的接口不兼容问题。 46 | $id = PHPUnit_Runner_Version::id(); 47 | if (2 === substr_count($id, '.')) { 48 | // x.x.x 49 | $second = strpos($id, '.') + 1; 50 | $this->phpunitSeries = substr($id, 0, strpos($id, '.', $second)); 51 | } elseif (1 === substr_count($id, '.')) { 52 | // x.x 53 | $this->phpunitSeries = $id; 54 | } else { 55 | // x 56 | $this->phpunitSeries = $id . '.0'; 57 | } 58 | if ('' == $this->phpunitSeries) { 59 | $this->phpunitSeries = '4.0'; 60 | } 61 | } 62 | 63 | /** 64 | * In phpunit 5.2 setExpectedException() method is deprecated. 65 | * 66 | * @param mixed $exception 67 | */ 68 | public function expectException($exception) 69 | { 70 | if ($this->phpunitSeries < 5.2) { 71 | $this->setExpectedException($exception); 72 | } else { 73 | parent::expectException($exception); 74 | } 75 | } 76 | 77 | public function expectExceptionMessage($message) 78 | { 79 | if ($this->phpunitSeries < 5.2) { 80 | $this->setExpectedException($this->getExpectedException(), $message); 81 | } else { 82 | parent::expectExceptionMessage($message); 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /tests/Jobs/MnsJobTest.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Test; 16 | 17 | use AliyunMNS\Responses\ReceiveMessageResponse; 18 | use Carbon\Carbon; 19 | use LaravelMns\MnsAdapter; 20 | use Mockery as m; 21 | 22 | class MnsJobTest extends AbstractTestCase 23 | { 24 | public function tearDown() 25 | { 26 | parent::tearDown(); // TODO: Change the autogenerated stub 27 | } 28 | 29 | public function setUp() 30 | { 31 | parent::setUp(); // TODO: Change the autogenerated stub 32 | 33 | $this->default = 'queue'; 34 | $this->receiptHandle = 'ReceiptHandleXXXX'; 35 | $this->delay = 3600; 36 | 37 | $this->mockedJob = 'job'; 38 | $this->mockedData = ['data']; 39 | $this->mockedPayload = json_encode(['job' => $this->mockedJob, 'data' => $this->mockedData]); 40 | 41 | $this->mockedContainer = m::mock(\Illuminate\Container\Container::class); 42 | $this->mockedResponse = m::mock(ReceiveMessageResponse::class); 43 | $this->mockedAdapter = m::mock(MnsAdapter::class); 44 | } 45 | 46 | public function testFireProperlyCallJobHandler() 47 | { 48 | $job = $this->getJob(); 49 | $job->getContainer()->shouldReceive('make') 50 | ->once() 51 | ->with('job') 52 | ->andReturn($handler = m::mock('stdClass')); 53 | $this->mockedResponse->shouldReceive('getMessageBody') 54 | ->andReturn($this->mockedPayload); 55 | $handler->shouldReceive('fire') 56 | ->once() 57 | ->with($job, ['data']); 58 | $job->fire(); 59 | } 60 | 61 | public function testFireProperlyThrowWhenJobIsNotInsertByLaravel() 62 | { 63 | $this->mockedPayload = 'wrong payload.'; 64 | $job = $this->getJob(); 65 | $this->mockedResponse->shouldReceive('getMessageBody') 66 | ->andReturn($this->mockedPayload); 67 | $this->setExpectedException('InvalidArgumentException'); 68 | $job->fire(); 69 | } 70 | 71 | public function testDeleteProperlyRemovesFromMns() 72 | { 73 | $job = $this->getJob(); 74 | $this->mockedResponse->shouldReceive('getReceiptHandle') 75 | ->once() 76 | ->andReturn($this->receiptHandle); 77 | $this->mockedAdapter->shouldReceive('deleteMessage') 78 | ->with($this->receiptHandle) 79 | ->andReturn('true'); 80 | $job->delete($this->receiptHandle); 81 | $this->assertTrue($job->isDeleted()); 82 | } 83 | 84 | public function testReleaseProperlySetVisibleTimeToMns() 85 | { 86 | $job = $this->getJob(); 87 | $this->mockedResponse->shouldReceive('getReceiptHandle') 88 | ->twice() 89 | ->andReturn($this->receiptHandle); 90 | $this->mockedAdapter->shouldReceive('changeMessageVisibility') 91 | ->once() 92 | ->with($this->receiptHandle, $this->delay) 93 | ->andReturn('true'); 94 | $job->release($this->delay); 95 | $this->mockedResponse->shouldReceive('getNextVisibleTime')->once(); 96 | $this->mockedAdapter->shouldReceive('changeMessageVisibility')->once(); 97 | $job->release(); 98 | $this->assertTrue($job->isReleased()); 99 | } 100 | 101 | public function testAttemptsCanGetDequeueCount() 102 | { 103 | $job = $this->getJob(); 104 | $this->mockedResponse->shouldReceive('getDequeueCount')->andReturn(5); 105 | $attempts = $job->attempts(); 106 | $this->assertEquals(5, $attempts); 107 | } 108 | 109 | private function getJob() 110 | { 111 | return new \LaravelMns\Jobs\MnsJob( 112 | $this->mockedContainer, 113 | $this->mockedAdapter, 114 | $this->default, 115 | $this->mockedResponse 116 | ); 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /tests/MnsAdapterTest.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Test; 16 | 17 | use AliyunMNS\Client; 18 | use LaravelMns\MnsAdapter; 19 | use Mockery as m; 20 | 21 | class MnsAdapterTest extends AbstractTestCase 22 | { 23 | public function setUp() 24 | { 25 | parent::setUp(); // TODO: Change the autogenerated stub 26 | } 27 | 28 | public function tearDown() 29 | { 30 | parent::tearDown(); // TODO: Change the autogenerated stub 31 | } 32 | 33 | public function testSetQueueProperlySetQueueName() 34 | { 35 | $defaultQueueName = 'default'; 36 | $mnsClient = m::mock(Client::class)->makePartial(); 37 | $mnsClient->shouldReceive('getQueueRef') 38 | ->twice() 39 | ->with(m::anyOf($defaultQueueName, 'anotherName')) 40 | ->andReturn('whatever'); 41 | $adapterUnderTest = new MnsAdapter($mnsClient, $defaultQueueName); 42 | $adapterUnderTest->setQueue('anotherName'); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /tests/MnsQueueTest.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | namespace LaravelMns\Test; 16 | 17 | use AliyunMNS\Requests\SendMessageRequest; 18 | use AliyunMNS\Responses\ReceiveMessageResponse; 19 | use AliyunMNS\Responses\SendMessageResponse; 20 | use Carbon\Carbon; 21 | use LaravelMns\MnsAdapter; 22 | use LaravelMns\MnsQueue; 23 | use Mockery as m; 24 | 25 | class MnsQueueTest extends AbstractTestCase 26 | { 27 | public function tearDown() 28 | { 29 | parent::tearDown(); 30 | } 31 | 32 | public function setUp() 33 | { 34 | parent::setUp(); 35 | 36 | $this->default = 'default'; 37 | $this->delay = 100; 38 | 39 | $this->mockedJob = 'job'; 40 | $this->mockedData = ['data']; 41 | $this->mockedPayload = json_encode([ 42 | 'job' => $this->mockedJob, 43 | 'data' => $this->mockedData, 44 | ]); 45 | $this->mnsClient = m::mock(\AliyunMNS\Client::class); 46 | $this->queueClient = m::mock(\AliyunMNS\Queue::class); 47 | $this->request = new SendMessageRequest($this->mockedPayload); 48 | $this->response = m::mock(SendMessageResponse::class); 49 | $this->mnsClient 50 | ->shouldReceive('getQueueRef') 51 | ->with($this->default) 52 | ->andReturn($this->queueClient); 53 | $this->queueClient 54 | ->shouldReceive('getQueueName') 55 | ->once() 56 | ->andReturn($this->default); 57 | } 58 | 59 | public function testPushProperlyPushesJobsOntoMns() 60 | { 61 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 62 | $mnsQueue = m::mock(MnsQueue::class . '[createPayload]', [$mnsAdapter]) 63 | ->shouldAllowMockingProtectedMethods(); 64 | $mnsQueue->shouldReceive('createPayload') 65 | ->once() 66 | ->with($this->mockedJob, $this->mockedData) 67 | ->andReturn($this->mockedPayload); 68 | 69 | $this->queueClient 70 | ->shouldReceive('sendMessage') 71 | ->once() 72 | ->with(m::type(SendMessageRequest::class)) 73 | ->andReturn($this->response); 74 | $this->response 75 | ->shouldReceive('getMessageId') 76 | ->withNoArgs() 77 | ->andReturn(123); 78 | $id = $mnsQueue->push($this->mockedJob, $this->mockedData, $this->default); 79 | $this->assertEquals(123, $id); 80 | } 81 | 82 | public function testLaterProperlyPushesDelayedOntoMns() 83 | { 84 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 85 | $mnsQueue = m::mock(MnsQueue::class . '[createPayload, getSeconds]', [$mnsAdapter]) 86 | ->shouldAllowMockingProtectedMethods(); 87 | $mnsQueue->shouldReceive('createPayload') 88 | ->once() 89 | ->with($this->mockedJob, $this->mockedData) 90 | ->andReturn($this->mockedPayload); 91 | $mnsQueue->shouldReceive('getSeconds') 92 | ->once() 93 | ->with($this->delay) 94 | ->andReturn($this->delay); 95 | $this->queueClient->shouldReceive('sendMessage') 96 | ->once() 97 | ->with(m::type(SendMessageRequest::class)) 98 | ->andReturn($this->response); 99 | $this->response->shouldReceive('getMessageId') 100 | ->withNoArgs() 101 | ->andReturn(123); 102 | $id = $mnsQueue->later($this->delay, $this->mockedJob, $this->mockedData, $this->default); 103 | $this->assertEquals(123, $id); 104 | } 105 | 106 | public function testLaterProperlyPushesDelayedUsingDatetimeOntoMns() 107 | { 108 | $now = Carbon::now(); 109 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 110 | $mnsQueue = m::mock(MnsQueue::class . '[createPayload, getSeconds]', [$mnsAdapter]) 111 | ->shouldAllowMockingProtectedMethods(); 112 | $mnsQueue->shouldReceive('createPayload') 113 | ->once() 114 | ->with($this->mockedJob, $this->mockedData) 115 | ->andReturn($this->mockedPayload); 116 | $mnsQueue->shouldReceive('getSeconds') 117 | ->once() 118 | ->with($now) 119 | ->andReturn(3600); 120 | $this->queueClient->shouldReceive('sendMessage') 121 | ->once() 122 | ->with(m::type(SendMessageRequest::class)) 123 | ->andReturn($this->response); 124 | $this->response->shouldReceive('getMessageId') 125 | ->withNoArgs() 126 | ->andReturn(123); 127 | $id = $mnsQueue->later($now->addSeconds(3600), $this->mockedJob, $this->mockedData, $this->default); 128 | $this->assertEquals(123, $id); 129 | } 130 | 131 | public function testPopProperlyPopOffFromJobMns() 132 | { 133 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 134 | $response = m::mock(ReceiveMessageResponse::class); 135 | $mnsQueue = m::mock(MnsQueue::class, [$mnsAdapter])->makePartial(); 136 | $mnsQueue->setContainer(m::mock(\Illuminate\Container\Container::class)); 137 | $this->queueClient->shouldReceive('receiveMessage') 138 | ->once() 139 | ->withNoArgs() 140 | ->andReturn($response); 141 | $mnsQueue->pop($this->default); 142 | } 143 | 144 | public function testPopProperlyReturnsNullWhenMnsHasNoActivelyMessage() 145 | { 146 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 147 | $response = m::mock(ReceiveMessageResponse::class); 148 | $mnsQueue = m::mock(MnsQueue::class, [$mnsAdapter])->makePartial(); 149 | $mnsQueue->setContainer(m::mock(\Illuminate\Container\Container::class)); 150 | $this->queueClient->shouldReceive('receiveMessage') 151 | ->once() 152 | ->withNoArgs() 153 | ->andThrow(new \AliyunMNS\Exception\MessageNotExistException(404, 'No message can get.')); 154 | $result = $mnsQueue->pop($this->default); 155 | $this->assertNull($result); 156 | } 157 | 158 | public function testPopProperlyPopOffJobWithCustomCreator() 159 | { 160 | $mnsAdapter = new MnsAdapter($this->mnsClient, $this->default); 161 | $response = m::mock(ReceiveMessageResponse::class); 162 | $mnsQueue = m::mock(MnsQueue::class, [$mnsAdapter])->makePartial(); 163 | $mnsQueue->createJobsUsing(function () { 164 | return 'job'; 165 | }); 166 | $mnsQueue->setContainer(m::mock(\Illuminate\Container\Container::class)); 167 | $this->queueClient->shouldReceive('receiveMessage') 168 | ->once() 169 | ->withNoArgs() 170 | ->andReturn($response); 171 | $result = $mnsQueue->pop($this->default); 172 | $this->assertEquals('job', $result); 173 | } 174 | 175 | public function testGetDefaultIfNullCanResolveWantedQueueNameOrReturnDefault() 176 | { 177 | $msnQueue = new MnsQueue( 178 | new MnsAdapter($this->mnsClient, $this->default) 179 | ); 180 | $this->assertEquals('default', $msnQueue->getDefaultIfNull(null)); 181 | $this->assertEquals('somequeue', $msnQueue->getDefaultIfNull('somequeue')); 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | 9 | * @link: https://github.com/abrahamgreyson/laravel-mns 10 | * 11 | * This source file is subject to the MIT license that is bundled 12 | * with this source code in the file LICENSE. 13 | */ 14 | 15 | require __DIR__ . '/../vendor/autoload.php'; 16 | 17 | date_default_timezone_set('Asia/Chongqing'); 18 | --------------------------------------------------------------------------------