diff --git a/Api.php b/Api.php index c19e08a..2c6dda1 100644 --- a/Api.php +++ b/Api.php @@ -10,6 +10,7 @@ use Zelenin\SmsRu\Entity\StoplistPhone; use Zelenin\SmsRu\Exception\Exception; use Zelenin\SmsRu\Response\AuthCheckResponse; +use Zelenin\SmsRu\Response\CallCodeResponse; use Zelenin\SmsRu\Response\MyBalanceResponse; use Zelenin\SmsRu\Response\MyLimitResponse; use Zelenin\SmsRu\Response\MySendersResponse; @@ -263,6 +264,21 @@ public function stoplistGet() return $stoplistGetResponse; } + public function codeCall($phone) + { + $params = array_merge(['phone' => $phone], $this->getAuth()->getAuthParams()); + $response = $this->client->request('code/call', $params); + + $json = json_decode($response, true); + + if (is_array($json) == false) { + $response = explode("\n", $response); + return new CallCodeResponse(array_shift($response)); + } + + return CallCodeResponse::makeByJson($json); + } + /** * @param string $method * @param array $params diff --git a/Response/CallCodeResponse.php b/Response/CallCodeResponse.php new file mode 100644 index 0000000..cd16a03 --- /dev/null +++ b/Response/CallCodeResponse.php @@ -0,0 +1,50 @@ + 'Запрос выполнен.', + '200' => 'Неправильный api_id.', + '210' => 'Используется GET, где необходимо использовать POST.', + '211' => 'Метод не найден.', + '220' => 'Сервис временно недоступен, попробуйте чуть позже.', + '300' => 'Неправильный token (возможно истек срок действия, либо ваш IP изменился).', + '301' => 'Неправильный пароль, либо пользователь не найден.', + '302' => 'Пользователь авторизован, но аккаунт не подтвержден (пользователь не ввел код, присланный в регистрационной смс).', + ]; + + public static function makeByJson(array $json) + { + if ($json['status'] == 'ERROR') { + $code = '400'; + + $response = new CallCodeResponse($code); + $response->availableDescriptions[$code] = $json['status_text']; + + return $response; + } + + $response = new CallCodeResponse('100'); + + $response->checkCode = $json['code']; + $response->balance = $json['balance']; + $response->cost = $json['cost']; + $response->callId = $json['call_id']; + + return $response; + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index 0879999..88dd9f3 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,7 @@ }, "require": { "php": ">=5.5.0", + "ext-json": "*", "guzzlehttp/guzzle": "~6 || ~7" }, "autoload": { diff --git a/readme.md b/readme.md index 7bf7fc1..c567930 100644 --- a/readme.md +++ b/readme.md @@ -113,6 +113,13 @@ $client->stoplistDel($phone); $client->stoplistGet(); ``` +Отправить четырехзначный авторизационный код звонком: + +```php +$response = $client->codeCall($phone); +echo $response->checkCode; +``` + ## Автор [Александр Зеленин](https://github.com/zelenin/), e-mail: [aleksandr@zelenin.me](mailto:aleksandr@zelenin.me)