1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
rest.php
См. документацию.
1<?php
2namespace Bitrix\MessageService\Sender\Sms;
3
4use Bitrix\Main\Error;
5use Bitrix\Main\Loader;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\ModuleManager;
8use Bitrix\MessageService;
9use Bitrix\MessageService\Internal\Entity\RestAppLangTable;
10use Bitrix\MessageService\Internal\Entity\RestAppTable;
11use Bitrix\MessageService\Sender;
12use Bitrix\MessageService\Sender\Result;
13use Bitrix\Rest\Sqs;
14
15Loc::loadMessages(__FILE__);
16
17class Rest extends Sender\Base
18{
19 public const ID = 'rest';
20
21 public static $langFields;
22
23 public static function isSupported(): bool
24 {
26 }
27
28 public function getId(): string
29 {
30 return static::ID;
31 }
32
33 public function getName(): ?string
34 {
35 return Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_NAME');
36 }
37
38 public function getShortName(): string
39 {
40 return 'REST';
41 }
42
43 public function canUse(): bool
44 {
45 if (Loader::includeModule('rest') && \Bitrix\Rest\OAuthService::getEngine()->isRegistered())
46 {
47 $firstRecord = RestAppTable::getList([
48 'select' => ['ID'],
49 'limit' => 1,
50 'cache' => [
51 'ttl' => 3600,
52 ],
53 ])->fetchObject();
54
55 return $firstRecord !== null;
56 }
57
58 return false;
59 }
60
61 public function getFromList(): array
62 {
63 $list = [];
64 if (!$this->canUse())
65 {
66 return $list;
67 }
68
70 while ($row = $result->fetch())
71 {
72 $list[] = [
73 'id' => $row['APP_ID'].'|'.$row['CODE'],
74 'name' => sprintf('[%s] %s',
75 $this->getLangField($row['ID'], 'APP_NAME'),
76 $this->getLangField($row['ID'], 'NAME')
77 ),
78 'description' => $this->getLangField($row['ID'], 'DESCRIPTION')
79 ];
80 }
81 return $list;
82 }
83
84 public function isCorrectFrom($from): bool
85 {
86 [$appId, $code] = explode('|', $from);
87 $restSender = RestAppTable::getList(
88 [
89 'filter' => [
90 '=APP_ID' => $appId,
91 '=CODE' => $code
92 ],
93 'select' => ['ID']
94 ]
95 )->fetch();
96
97 return $restSender !== false;
98 }
99
101 {
102 $sendResult = new Result\SendMessage();
103
104 if (!$this->canUse())
105 {
106 $sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
107 return $sendResult;
108 }
109
110 [$appId, $code] = explode('|', $messageFields['MESSAGE_FROM']);
111 $restSender = null;
112
113 if ($appId && $code)
114 {
115 $restSender = RestAppTable::getList(
116 ['filter' =>
117 [
118 '=APP_ID' => $appId,
119 '=CODE' => $code
120 ]
121 ]
122 )->fetch();
123 }
124
125 if (!$restSender)
126 {
127 $sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
128 return $sendResult;
129 }
130 /*
131 $session = \Bitrix\Rest\Event\Session::get();
132 if(!$session)
133 {
134 $sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_SESSION')));
135 return $sendResult;
136 }
137 */
138 $dbRes = \Bitrix\Rest\AppTable::getList([
139 'filter' => [
140 '=CLIENT_ID' => $restSender['APP_ID'],
141 ]
142 ]);
143 $application = $dbRes->fetch();
144
145 if (!$application)
146 {
147 $sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
148 return $sendResult;
149 }
150
152 if($appStatus['PAYMENT_ALLOW'] === 'N')
153 {
154 $sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_PAYMENT_ALLOW')));
155 return $sendResult;
156 }
157
158 $auth = $messageFields['AUTHOR_ID'] > 0 ? [
159 'CODE' => $restSender['CODE'],
162 "application_token" => \CRestUtil::getApplicationToken($application),
163 ] : [];
164
165 $messageId = $messageFields['EXTERNAL_ID'] ?? 0;
166 if (!$messageId)
167 {
168 $messageId = md5(($messageFields['ID'] ?? 0).'|'.uniqid());
169 $this->setExternalMessageId((int)$messageFields['ID'], $messageId);
170 }
171
172 $restData = is_array($messageFields['MESSAGE_HEADERS']) ? $messageFields['MESSAGE_HEADERS'] : array();
173 //compatible parameters
174 $restData['properties'] = [
175 'phone_number' => $messageFields['MESSAGE_TO'],
176 'message_text' => $this->prepareMessageBodyForSend($messageFields['MESSAGE_BODY']),
177 ];
178 $restData['type'] = $restSender['TYPE'];
179 $restData['code'] = $restSender['CODE'];
180 $restData['message_id'] = $messageId;
181 $restData['message_to'] = $messageFields['MESSAGE_TO'];
182 $restData['message_body'] = $this->prepareMessageBodyForSend($messageFields['MESSAGE_BODY']);
183 $restData['ts'] = time();
184
185 $queryItems = [
187 $restSender['APP_ID'],
188 $restSender['HANDLER'],
189 $restData,
190 $auth,
191 [
192 "sendAuth" => (bool)$auth,
193 "sendRefreshToken" => false,
194 "category" => Sqs::CATEGORY_DEFAULT,
195 ]
196 ),
197 ];
198
199 \Bitrix\Rest\OAuthService::getEngine()->getClient()->sendEvent($queryItems);
200 $sendResult->setExternalId($messageId);
201 $sendResult->setStatus(MessageService\MessageStatus::SENT);
202
203 if ($application['CODE'])
204 {
206 'messageservice',
207 'sendRest' . $restSender['TYPE'],
208 uniqid($application['CODE'], true),
209 $application['CODE']
210 );
211 }
212
213 if (is_callable(['\Bitrix\Rest\UsageStatTable', 'logMessage']))
214 {
215 \Bitrix\Rest\UsageStatTable::logMessage($application['CLIENT_ID'], $restSender['TYPE']);
217 }
218
219 return $sendResult;
220 }
221
222 public static function resolveStatus($serviceStatus): int
223 {
224 $status = parent::resolveStatus($serviceStatus);
225
226 switch ((string)$serviceStatus)
227 {
228 case 'queued':
230 break;
231 case 'sent':
233 break;
234 case 'delivered':
236 break;
237 case 'undelivered':
239 break;
240 case 'failed':
242 break;
243 }
244
245 return $status;
246 }
247
248 private function getLangField($appId, $fieldName)
249 {
250 $fields = $this->getAppLangFields($appId);
251 if (!$fields)
252 {
253 return '';
254 }
255
256 $fieldLangs = $fields[$fieldName];
257 if (isset($fieldLangs[LANGUAGE_ID]))
258 {
259 return $fieldLangs[LANGUAGE_ID];
260 }
261 else
262 {
263 $defaultLang = Loc::getDefaultLang(LANGUAGE_ID);
264 if (isset($fieldLangs[$defaultLang]))
265 {
266 return $fieldLangs[$defaultLang];
267 }
268 }
269 return $fieldLangs['**'];
270 }
271
272 private function getAppLangFields($appId)
273 {
274 if (static::$langFields === null)
275 {
276 $orm = RestAppLangTable::getList();
277 while ($row = $orm->fetch())
278 {
279 static::$langFields[$row['APP_ID']]['NAME'][$row['LANGUAGE_ID']] = $row['NAME'];
280 static::$langFields[$row['APP_ID']]['APP_NAME'][$row['LANGUAGE_ID']] = $row['APP_NAME'];
281 static::$langFields[$row['APP_ID']]['DESCRIPTION'][$row['LANGUAGE_ID']] = $row['DESCRIPTION'];
282 }
283 }
284
285 return static::$langFields[$appId] ?? null;
286 }
287
288 private function setExternalMessageId(int $internalId, string $externalId): void
289 {
290 MessageService\Internal\Entity\MessageTable::update($internalId, [
291 'EXTERNAL_ID' => $externalId
292 ]);
293 }
294}
$messageFields
Определения callback_ednaru.php:22
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
Определения error.php:15
static includeModule($moduleName)
Определения loader.php:67
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static getList(array $parameters=array())
Определения datamanager.php:431
prepareMessageBodyForSend(string $text)
Определения base.php:177
static $langFields
Определения rest.php:21
isCorrectFrom($from)
Определения rest.php:84
sendMessage(array $messageFields)
Определения rest.php:100
static resolveStatus($serviceStatus)
Определения rest.php:222
static isSupported()
Определения rest.php:23
static getAppStatusInfo($app, $detailUrl)
Определения app.php:713
static get()
Определения session.php:20
const PARAM_SESSION
Определения session.php:13
const PARAM_LOCAL_USER
Определения auth.php:30
static getEngine()
Определения oauthservice.php:49
static queryItem($clientId, $url, $data, array $authData=array(), array $additional=array())
Определения sqs.php:18
const CATEGORY_DEFAULT
Определения sqs.php:11
static finalize()
Определения usagestat.php:374
static logMessage($clientId, $messageType)
Определения usagestat.php:270
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$auth
Определения get_user.php:29
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$application
Определения bitrix.php:23
$status
Определения session.php:10
AddEventToStatFile($module, $action, $tag, $label, $action_type='', $user_id=null)
Определения tools.php:3976
Определения handlers.php:8
$dbRes
Определения yandex_detail.php:168
$fields
Определения yandex_run.php:501