20 use Sender\Traits\RussianProvider;
22 public const ID =
'smsastby';
24 const JSON_API_URL =
'https://userarea.sms-assistent.by/api/v1/json';
25 const PLAIN_API_URL =
'https://userarea.sms-assistent.by/api/v1/%s/plain';
34 return Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_NAME');
39 return 'sms-assistent.by';
45 return is_array($from) ? $from : [];
60 'user' =>
$fields[
'account_user'],
61 'password' =>
$fields[
'account_password'],
80 'user_uuid' =>
'wsTKC5KdazmEjBNU8i5fqacddtOeqQBtRc45lcvO6WA=',
81 "diler_uuid" =>
'obUrbkWuyW0nYL9D2rR6s3EPMm1QHg9h/KWtO8jFIug=',
83 'tel' =>
'+'.\NormalizePhone(
$fields[
'tel']),
93 $this->
setOption(
'demo_email', $fields[
'email']);
95 $this->
setOption(
'demo_unp', $fields[
'unp']);
119 'email' => $this->
getOption(
'demo_email'),
127 return 'https://userarea.sms-assistent.by/';
135 $result->addError(
new Error(Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_CAN_USE_ERROR')));
142 'validity_period' => 24,
157 $apiResult = $this->callPlainApi(
'send_sms',
$message);
158 $result->setServiceRequest($apiResult->getHttpRequest());
159 $result->setServiceResponse($apiResult->getHttpResponse());
160 $resultData = $apiResult->getData();
162 if (!$apiResult->isSuccess())
164 $result->addErrors($apiResult->getErrors());
168 $smsId = $resultData[
'response'];
172 $result->addError(
new Error($this->getErrorMessage(-1000)));
176 $result->setExternalId($smsId);
190 $result->addError(
new Error(Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_CAN_USE_ERROR')));
205 $apiResult = $this->callJsonApi(
'sms_send', [
208 'validity_period' => 24
215 $resultData = $apiResult->getData();
217 if (!$apiResult->isSuccess())
219 $result->addErrors($apiResult->getErrors());
223 $smsData = current($resultData[
'message'][
'msg']);
227 $result->addError(
new Error($this->getErrorMessage(-1000)));
231 if (isset($smsData[
'sms_id']))
233 $result->setExternalId($smsData[
'sms_id']);
236 if ($smsData[
'error_code'] > 0)
238 $result->addError(
new Error($this->getErrorMessage($smsData[
'error_code'])));
258 $result->addError(
new Error(Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_CAN_USE_ERROR')));
266 'sms_id' =>
$result->getExternalId()
272 $apiResult = $this->callJsonApi(
'statuses',
$params);
273 if (!$apiResult->isSuccess())
275 $result->addErrors($apiResult->getErrors());
279 $resultData = $apiResult->getData();
280 $smsData = current($resultData[
'status'][
'msg']);
284 $result->addError(
new Error($this->getErrorMessage(-1000)));
287 $result->setStatusText($smsData[
'sms_status']);
288 $result->setStatusCode(self::resolveStatus($smsData[
'sms_status']));
296 $status = parent::resolveStatus($serviceStatus);
298 switch ($serviceStatus)
324 $this->loadFromList();
331 $url = sprintf(self::PLAIN_API_URL, $command);
334 "socketTimeout" => $this->socketTimeout,
335 "streamTimeout" => $this->streamTimeout,
336 "waitResponse" =>
true,
338 $httpClient->setHeader(
'User-Agent',
'Bitrix24');
339 $httpClient->setCharset(
'UTF-8');
346 if (!isset(
$params[
'password']))
353 'method' => HttpClient::HTTP_POST,
355 'headers' => method_exists($httpClient,
'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
360 if ($httpClient->query(HttpClient::HTTP_POST,
$url,
$params) && $httpClient->getStatus() ==
'200')
362 $answer = $httpClient->getResult();
365 if (is_numeric($answer) && $answer < 0)
367 $result->addError(
new Error($this->getErrorMessage($answer)));
369 $result->setHttpResponse(
new MessageService\DTO\Response([
370 'statusCode' => $httpClient->getStatus(),
371 'headers' => $httpClient->getHeaders()->toArray(),
372 'body' => $httpClient->getResult(),
376 $result->setData([
'response' => $answer]);
381 private function callJsonApi($command,
array $params = []): Sender\Result\HttpRequestResult
383 $httpClient =
new HttpClient(
array(
384 "socketTimeout" => $this->socketTimeout,
385 "streamTimeout" => $this->streamTimeout,
386 "waitResponse" =>
true,
388 $httpClient->setHeader(
'User-Agent',
'Bitrix24');
389 $httpClient->setCharset(
'UTF-8');
390 $httpClient->setHeader(
'Content-Type',
'application/json');
406 $result =
new Sender\Result\HttpRequestResult();
407 $result->setHttpRequest(
new MessageService\DTO\Request([
408 'method' => HttpClient::HTTP_POST,
409 'uri' => self::JSON_API_URL,
410 'headers' => method_exists($httpClient,
'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
415 if ($httpClient->query(HttpClient::HTTP_POST, self::JSON_API_URL,
$params) && $httpClient->getStatus() ==
'200')
419 $answer = Json::decode($httpClient->getResult());
421 catch (\Bitrix\Main\ArgumentException $e)
423 $answer = [
'error' => -1000];
427 if (isset($answer[
'error']))
429 $result->addError(
new Error($this->getErrorMessage($answer[
'error'], $answer)));
432 if (isset($answer[
'status']) && $answer[
'status'] === -1)
434 $msg = !empty($answer[
'message']) ? $answer[
'message'] : $this->getErrorMessage($answer[
'error'], 1000);
438 $result->setHttpResponse(
new MessageService\DTO\Response([
439 'statusCode' => $httpClient->getStatus(),
440 'headers' => $httpClient->getHeaders()->toArray(),
441 'body' => $httpClient->getResult(),
449 private function getErrorMessage($errorCode)
451 $errorCode = abs($errorCode);
452 $message = Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_ERROR_'.$errorCode);
453 return $message ?: Loc::getMessage(
'MESSAGESERVICE_SENDER_SMS_SMSASTBY_ERROR_OTHER');
456 private function loadFromList()
458 $result = $this->callJsonApi(
'get_senders');
463 $resultData =
$result->getData();
464 foreach ($resultData[
'senders'] as
$sender)
static isModuleInstalled($moduleName)