22 public const ID =
'smslineby';
30 || Option::get(
'messageservice',
'smslineby_enabled',
'N') ===
'Y'
52 return is_array($from) ? $from : [];
69 $result = $this->sendGetRequest(
'balance/packets', $this->makeSignature(
'balancepackets',
$key),
$login);
93 return 'https://mobilemarketing.by/login/';
113 $apiResult = $this->sendPostRequest(
'messages/single/sms',
$message);
114 $result->setServiceRequest($apiResult->getHttpRequest());
115 $result->setServiceResponse($apiResult->getHttpResponse());
117 if (!$apiResult->isSuccess())
119 $result->addErrors($apiResult->getErrors());
123 $resultData = $apiResult->getData();
124 $smsData = $resultData[
'message'];
125 $smsId = $smsData[
'id_message'];
129 $result->addError(
new Error($this->getErrorMessage(-1000)));
133 $result->setExternalId($smsId);
153 $apiResult = $this->sendGetRequest(
'messages/'.
$result->getExternalId());
154 if (!$apiResult->isSuccess())
156 $result->addErrors($apiResult->getErrors());
160 $resultData = $apiResult->getData();
161 $smsData = $resultData[
'message'];
165 $result->addError(
new Error($this->getErrorMessage(-1000)));
168 $result->setStatusText($smsData[
'state'][
'name']);
169 $result->setStatusCode(self::resolveStatus($smsData[
'state'][
'state']));
177 $status = parent::resolveStatus($serviceStatus);
179 switch ($serviceStatus)
193 case 'undeliverable':
200 case 'textblacklist':
216 $this->loadFromList();
221 private function loadFromList()
223 $result = $this->sendGetRequest(
'balance/packets');
228 $resultData =
$result->getData();
229 foreach ($resultData[
'packets'] as $packet)
231 if (isset($packet[
'targets']) && is_array($packet[
'targets']))
233 foreach ($packet[
'targets'] as $target)
247 private function makeSignature(
$text,
$key =
null)
257 private function sendGetRequest(
$path, $signature =
null,
$login =
null)
261 $signature = $this->makeSignature(str_replace(
'/',
'',
$path));
269 return $this->sendHttpRequest(HttpClient::HTTP_GET,
$login, $signature,
$path);
275 $requestBody = Json::encode(
$params);
276 $signature = $this->makeSignature(str_replace(
'/',
'',
$path).$requestBody);
278 return $this->sendHttpRequest(HttpClient::HTTP_POST,
$login, $signature,
$path, $requestBody);
282 private function sendHttpRequest(
$method,
$login, $signature,
$path, $body =
null): Sender\Result\HttpRequestResult
284 $httpClient =
new HttpClient(
array(
285 "socketTimeout" => $this->socketTimeout,
286 "streamTimeout" => $this->streamTimeout,
287 "waitResponse" =>
true,
289 $httpClient->setCharset(
'UTF-8');
290 $httpClient->setHeader(
'User-Agent',
'Bitrix24');
291 $httpClient->setHeader(
'Content-Type',
'application/json');
292 $httpClient->setHeader(
'Authorization-User',
$login);
293 $httpClient->setHeader(
'Authorization',
"Bearer $signature");
295 $result =
new Sender\Result\HttpRequestResult();
296 $answer = [
'error' => -1000];
298 $url = self::JSON_API_URL.$path;
300 $result->setHttpRequest(
new MessageService\DTO\Request([
303 'headers' => method_exists($httpClient,
'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
310 $answer = Json::decode($httpClient->getResult());
312 catch (\Bitrix\Main\ArgumentException $e)
317 if (isset($answer[
'error']))
319 $result->addError(
new Error($this->getErrorMessage($answer[
'error'][
'code'], $answer[
'error'][
'message'])));
322 $result->setHttpResponse(
new MessageService\DTO\Response([
323 'statusCode' => $httpClient->getStatus(),
324 'headers' => $httpClient->getHeaders()->toArray(),
325 'body' => $httpClient->getResult(),
334 private function getErrorMessage($errorCode,
$text =
null)
336 $message = Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSLINE_ERROR_'.$errorCode,
null,
'ru');
337 return $message ?: (
$text ?: Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSLINE_ERROR_OTHER',
null,
'ru'));
static isModuleInstalled($moduleName)