SmsRuResponse::isOk()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Kafkiansky\SmsRu;
6
7
final class SmsRuResponse
8
{
9
    use Parameterizable;
10
11
    /**
12
     * Arrays of existing errors code and messages.
13
     */
14
    private const ERRORS = [
15
        104 => 'Сообщение не может быть доставлено: время жизни истекло',
16
        105 => 'Сообщение не может быть доставлено: удалено оператором',
17
        106 => 'Сообщение не может быть доставлено: сбой в телефоне',
18
        107 => 'Сообщение не может быть доставлено: неизвестная причина',
19
        108 => 'Сообщение не может быть доставлено: отклонено',
20
        130 => 'Сообщение не может быть доставлено: превышено количество сообщений на этот номер в день',
21
        131 => 'Сообщение не может быть доставлено: превышено количество одинаковых сообщений на этот номер в минуту',
22
        132 => 'Сообщение не может быть доставлено: превышено количество одинаковых сообщений на этот номер в день',
23
        200 => 'Неправильный api_id',
24
        201 => 'Не хватает средств на лицевом счету',
25
        202 => 'Неправильно указан получатель',
26
        203 => 'Нет текста сообщения',
27
        204 => 'Имя отправителя не согласовано с администрацией',
28
        205 => 'Сообщение слишком длинное (превышает 8 СМС)',
29
        206 => 'Будет превышен или уже превышен дневной лимит на отправку сообщений',
30
        207 => 'На этот номер (или один из номеров) нельзя отправлять сообщения, либо указано более 100 номеров в списке получателей',
31
        208 => 'Параметр time указан неправильно',
32
        209 => 'Вы добавили этот номер (или один из номеров) в стоп-лист',
33
        210 => 'Используется GET, где необходимо использовать POST',
34
        211 => 'Метод не найден',
35
        212 => 'Текст сообщения необходимо передать в кодировке UTF-8 (вы передали в другой кодировке)',
36
        220 => 'Сервис временно недоступен, попробуйте чуть позже',
37
        230 => 'Превышен общий лимит количества сообщений на этот номер в день',
38
        231 => 'Превышен лимит одинаковых сообщений на этот номер в минуту',
39
        232 => 'Превышен лимит одинаковых сообщений на этот номер в день',
40
        300 => 'Неправильный token (возможно истек срок действия, либо ваш IP изменился)',
41
        301 => 'Неправильный пароль, либо пользователь не найден',
42
        302 => 'Пользователь авторизован, но аккаунт не подтвержден (пользователь не ввел код, присланный в регистрационной смс)',
43
    ];
44
45
    /**
46
     * @var string
47
     */
48
    private $status;
49
50
    /**
51
     * @var int
52
     */
53
    private $statusCode;
54
55
    /**
56
     * @var array|null
57
     */
58
    private $sms;
59
60
    /**
61
     * @var int|null
62
     */
63
    private $balance;
64
65
    /**
66
     * @var int|null
67
     */
68
    private $totalCost;
69
70
    /**
71
     * @var int|null
72
     */
73
    private $totalSms;
74
75
    /**
76
     * @var int|null
77
     */
78
    private $totalLimit;
79
80
    /**
81
     * @var int|null
82
     */
83
    private $usedToday;
84
85
    /**
86
     * @var array|null
87
     */
88
    private $senders;
89
90
    public function __construct(array $payload)
91
    {
92
        $this->fillFromParameters($payload);
93
    }
94
95
    /**
96
     * @return string
97
     */
98
    public function getStatus(): string
99
    {
100
        return $this->status;
101
    }
102
103
    /**
104
     * @return int
105
     */
106
    public function getStatusCode(): int
107
    {
108
        return $this->statusCode;
109
    }
110
111
    /**
112
     * @return array|null
113
     */
114
    public function getSms(): ?array
115
    {
116
        return $this->sms;
117
    }
118
119
    /**
120
     * @return int|null
121
     */
122
    public function getBalance(): ?int
123
    {
124
        return $this->balance;
125
    }
126
127
    /**
128
     * @return int|null
129
     */
130
    public function getTotalCost(): ?int
131
    {
132
        return $this->totalCost;
133
    }
134
135
    /**
136
     * @return int|null
137
     */
138
    public function getTotalSms(): ?int
139
    {
140
        return $this->totalSms;
141
    }
142
143
    /**
144
     * @return int|null
145
     */
146
    public function getTotalLimit(): ?int
147
    {
148
        return \is_null($this->totalLimit) ? $this->totalLimit : (int) $this->totalLimit;
149
    }
150
151
    /**
152
     * @return int|null
153
     */
154
    public function getUsedToday(): ?int
155
    {
156
        return $this->usedToday;
157
    }
158
159
    /**
160
     * @return array|null
161
     */
162
    public function getSenders(): ?array
163
    {
164
        return $this->senders;
165
    }
166
167
    /**
168
     * @return bool
169
     */
170
    public function isNonZeroBalance(): bool
171
    {
172
        return 0 < $this->balance;
173
    }
174
175
    public function isOk()
176
    {
177
        return 'OK' === $this->status;
178
    }
179
180
    /**
181
     * @param int $statusCode
182
     *
183
     * @return string|null
184
     */
185
    public static function errorTextFromCode(int $statusCode): ?string
186
    {
187
        return self::ERRORS[$statusCode] ?? null;
188
    }
189
}
190