1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
client.php
См. документацию.
1<?php
8
9
10namespace Bitrix\Rest\OAuth;
11
12use Bitrix\Main\ArgumentException;
13use Bitrix\Main\SystemException;
14use Bitrix\Main\Text\Encoding;
15use Bitrix\Main\Web\HttpClient;
16use Bitrix\Main\Web\Json;
17use Bitrix\Rest\OAuthService;
18use Bitrix\Rest\Public\Provider;
19
20if(!defined("BITRIX_OAUTH_URL"))
21{
22// replaced \Bitrix\Main\Config\Option::get('rest', 'oauth_server', 'https://oauth.bitrix.info');
23 $defaultValue = (new Provider\OAuth\AuthorizationServerProvider())->getCurrentAuthorizationUrl();
24 define("BITRIX_OAUTH_URL", $defaultValue);
25}
26
27if(!defined('BITRIXREST_URL'))
28{
29 define('BITRIXREST_URL', BITRIX_OAUTH_URL);
30}
31
32class Client
33{
34 const SERVICE_URL = BITRIXREST_URL;
35 const SERVICE_PATH = "/rest/";
36
37 const METHOD_METHODS = 'methods';
38 const METHOD_BATCH = 'batch';
39
40 const METHOD_APPLICATION_ADD = 'application.add';
41 const METHOD_APPLICATION_UPDATE = 'application.update';
42 const METHOD_APPLICATION_DELETE = 'application.delete';
43 const METHOD_APPLICATION_INSTALL = 'application.install';
44 const METHOD_APPLICATION_INSTALL_SUBSCRIPTION = 'application.install.subscription';
45 const METHOD_APPLICATION_UNINSTALL = 'application.uninstall';
46 const METHOD_APPLICATION_STAT = 'application.stat';
47 const METHOD_APPLICATION_LIST = 'application.list';
48 const METHOD_APPLICATION_USAGE = 'application.usage.add';
49
50 const METHOD_APPLICATION_VERSION_UPDATE = 'application.version.update';
51 const METHOD_APPLICATION_VERSION_DELETE = 'application.version.delete';
52
53 const METHOD_REST_AUTHORIZE = 'rest.authorize';
54 const METHOD_REST_CHECK = 'rest.check';
55 const METHOD_REST_CODE = 'rest.code';
56 const METHOD_REST_EVENT_CALL = 'rest.event.call';
57
60
61 private const NAME_IDENTIFIER_REQUEST = 'bx24_request_id';
62
63 protected $clientId;
64 protected $clientSecret;
65 protected $licenseKey;
66
68 {
69 $this->clientId = $clientId;
70 $this->clientSecret = $clientSecret;
71 $this->licenseKey = $licenseKey;
72 }
73
74 protected function prepareRequestData($additionalParams)
75 {
76 if(!is_array($additionalParams))
77 {
78 $additionalParams = array();
79 }
80
81 return $additionalParams;
82 }
83
84 protected function prepareRequest($additionalParams, $licenseCheck = false)
85 {
86 $additionalParams = $this->prepareRequestData($additionalParams);
87
88 $additionalParams['client_id'] = $this->clientId;
89 $additionalParams['client_secret'] = $this->clientSecret;
90 $additionalParams['client_redirect_uri'] = OAuthService::getRedirectUri();
91 $additionalParams['member_id'] = \CRestUtil::getMemberId();
92
93 if($licenseCheck)
94 {
95 $additionalParams = \CRestUtil::signLicenseRequest($additionalParams, $this->licenseKey);
96 }
97
98 return $additionalParams;
99 }
100
101 protected function prepareResponse($result)
102 {
103 try
104 {
105 return Json::decode($result);
106 }
107 catch(ArgumentException $e)
108 {
109 return false;
110 }
111 }
112
113 protected function getHttpClient()
114 {
115 return new HttpClient(array(
116 'socketTimeout' => static::HTTP_SOCKET_TIMEOUT,
117 'streamTimeout' => static::HTTP_STREAM_TIMEOUT,
118 ));
119 }
120
121 protected function getRequestId(string $methodName): string
122 {
123 $requestId = '';
124 if (isset($_SERVER['BX24_REQUEST_ID']))
125 {
126 if (str_contains($methodName, '?'))
127 {
128 $separator = '&';
129 }
130 else
131 {
132 $separator = '/?';
133 }
134
135 $requestId = $separator . http_build_query([
136 static::NAME_IDENTIFIER_REQUEST => urlencode($_SERVER['BX24_REQUEST_ID'])
137 ]);
138 }
139
140 return $requestId;
141 }
142
143 protected function getRequestUrl($methodName): string
144 {
145 return static::SERVICE_URL . static::SERVICE_PATH . $methodName . $this->getRequestId($methodName);
146 }
147
159 public function call($methodName, $additionalParams = null, $licenseCheck = false)
160 {
161 if ($this->clientId && $this->clientSecret)
162 {
163 $additionalParams = $this->prepareRequest($additionalParams, $licenseCheck);
164
165 $httpClient = $this->getHttpClient();
166 $httpResult = $httpClient->post(
167 $this->getRequestUrl($methodName),
168 $additionalParams
169 );
170
171 $response = $this->prepareResponse($httpResult);
172
173 if ($response)
174 {
175 if (!$licenseCheck && is_array($response) && isset($response['error']) && $response['error'] === 'verification_needed')
176 {
177 return $this->call($methodName, $additionalParams, true);
178 }
179 }
180 else
181 {
182 addMessage2Log(
183 'Strange answer from Bitrix Service! '
184 . static::SERVICE_URL
185 . static::SERVICE_PATH
186 . $methodName . ": "
187 . $httpClient->getStatus() . ' '
188 . implode(" ", $httpClient->getError())
189 . $httpResult
190 );
191 }
192
193 return $response;
194 }
195 else
196 {
197 throw new SystemException("No client credentials");
198 }
199 }
200
201 public function batch($actions)
202 {
203 $batch = array();
204
205 if(is_array($actions))
206 {
207 foreach($actions as $queryKey => $cmdData)
208 {
209 list($cmd, $cmdParams) = array_values($cmdData);
210 $batch['cmd'][$queryKey] = $cmd.(is_array($cmdParams) ? '?'.http_build_query($this->prepareRequestData($cmdParams)) : '');
211 }
212 }
213
214 return $this->call(static::METHOD_BATCH, $batch);
215 }
216
217 public function addApplication(array $applicationSettings)
218 {
219 return $this->call(static::METHOD_APPLICATION_ADD, array(
220 "TITLE" => $applicationSettings["TITLE"],
221 "REDIRECT_URI" => $applicationSettings["REDIRECT_URI"],
222 "SCOPE" => $applicationSettings["SCOPE"],
223 ));
224 }
225
226 public function updateApplication(array $applicationSettings)
227 {
228 return $this->call(static::METHOD_APPLICATION_UPDATE, array(
229 "CLIENT_ID" => $applicationSettings["CLIENT_ID"],
230 "TITLE" => $applicationSettings["TITLE"],
231 "REDIRECT_URI" => $applicationSettings["REDIRECT_URI"],
232 "SCOPE" => $applicationSettings["SCOPE"],
233 ));
234 }
235
236 public function deleteApplication(array $applicationSettings)
237 {
238 return $this->call(static::METHOD_APPLICATION_DELETE, array(
239 "CLIENT_ID" => $applicationSettings["CLIENT_ID"],
240 ));
241 }
242
243 public function installApplication(array $applicationSettings)
244 {
245 $queryFields = array(
246 "CLIENT_ID" => $applicationSettings["CLIENT_ID"],
247 "VERSION" => $applicationSettings["VERSION"],
248 );
249
250 if(isset($applicationSettings["CHECK_HASH"]) && isset($applicationSettings["INSTALL_HASH"]))
251 {
252 $queryFields['CHECK_HASH'] = $applicationSettings["CHECK_HASH"];
253 $queryFields['INSTALL_HASH'] = $applicationSettings["INSTALL_HASH"];
254 }
255
256 if ($applicationSettings['BY_SUBSCRIPTION'] === 'Y')
257 {
258 $method = static::METHOD_APPLICATION_INSTALL_SUBSCRIPTION;
259 }
260 else
261 {
262 $method = static::METHOD_APPLICATION_INSTALL;
263 }
264
265 return $this->call($method, $queryFields);
266 }
267
268 public function unInstallApplication(array $applicationSettings)
269 {
270 return $this->call(static::METHOD_APPLICATION_UNINSTALL, array(
271 "CLIENT_ID" => $applicationSettings["CLIENT_ID"],
272 ));
273 }
274
275 public function getAuth($clientId, $scope, array $additionalParams = array())
276 {
277 return $this->call(static::METHOD_REST_AUTHORIZE, array(
278 "CLIENT_ID" => $clientId,
279 "SCOPE" => $scope,
280 "PARAMS" => $additionalParams,
281 ));
282 }
283
284 public function checkAuth($accessToken)
285 {
286 return $this->call(static::METHOD_REST_CHECK, array(
287 "TOKEN" => $accessToken,
288 ));
289 }
290
291 public function getCode($clientId, $state, $additionalParams)
292 {
293 return $this->call(static::METHOD_REST_CODE, array(
294 "CLIENT_ID" => $clientId,
295 "STATE" => $state,
296 "PARAMS" => $additionalParams,
297 ));
298 }
299
300 public function getApplicationList()
301 {
302 return $this->call(static::METHOD_APPLICATION_LIST);
303 }
304
305 public function sendApplicationUsage(array $usage)
306 {
307 return $this->call(static::METHOD_APPLICATION_USAGE, array(
308 "USAGE" => $usage,
309 ));
310 }
311
312 public function sendEvent(array $eventItems)
313 {
314 return $this->call(static::METHOD_REST_EVENT_CALL, array(
315 "QUERY" => $eventItems,
316 ));
317 }
318}
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
Определения options.php:32
updateApplication(array $applicationSettings)
Определения client.php:226
sendApplicationUsage(array $usage)
Определения client.php:305
getRequestId(string $methodName)
Определения client.php:121
installApplication(array $applicationSettings)
Определения client.php:243
const METHOD_REST_CODE
Определения client.php:55
getHttpClient()
Определения client.php:113
checkAuth($accessToken)
Определения client.php:284
$clientSecret
Определения client.php:64
__construct($clientId, $clientSecret, $licenseKey)
Определения client.php:67
getAuth($clientId, $scope, array $additionalParams=array())
Определения client.php:275
$licenseKey
Определения client.php:65
const METHOD_APPLICATION_LIST
Определения client.php:47
const METHOD_APPLICATION_ADD
Определения client.php:40
prepareRequest($additionalParams, $licenseCheck=false)
Определения client.php:84
const METHOD_REST_EVENT_CALL
Определения client.php:56
const METHOD_APPLICATION_UNINSTALL
Определения client.php:45
prepareResponse($result)
Определения client.php:101
const METHOD_APPLICATION_STAT
Определения client.php:46
const METHOD_APPLICATION_INSTALL
Определения client.php:43
const METHOD_REST_CHECK
Определения client.php:54
const HTTP_SOCKET_TIMEOUT
Определения client.php:58
prepareRequestData($additionalParams)
Определения client.php:74
const METHOD_METHODS
Определения client.php:37
$clientId
Определения client.php:63
call($methodName, $additionalParams=null, $licenseCheck=false)
Определения client.php:159
const HTTP_STREAM_TIMEOUT
Определения client.php:59
getApplicationList()
Определения client.php:300
const METHOD_BATCH
Определения client.php:38
const METHOD_APPLICATION_USAGE
Определения client.php:48
const METHOD_APPLICATION_INSTALL_SUBSCRIPTION
Определения client.php:44
const METHOD_APPLICATION_VERSION_UPDATE
Определения client.php:50
addApplication(array $applicationSettings)
Определения client.php:217
const SERVICE_URL
Определения client.php:34
getRequestUrl($methodName)
Определения client.php:143
batch($actions)
Определения client.php:201
const METHOD_APPLICATION_VERSION_DELETE
Определения client.php:51
getCode($clientId, $state, $additionalParams)
Определения client.php:291
unInstallApplication(array $applicationSettings)
Определения client.php:268
const METHOD_APPLICATION_DELETE
Определения client.php:42
const METHOD_REST_AUTHORIZE
Определения client.php:53
sendEvent(array $eventItems)
Определения client.php:312
deleteApplication(array $applicationSettings)
Определения client.php:236
const SERVICE_PATH
Определения client.php:35
const METHOD_APPLICATION_UPDATE
Определения client.php:41
static getRedirectUri()
Определения oauthservice.php:119
</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
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
$response
Определения result.php:21
$method
Определения index.php:27