/
SessionProvider.php
71 lines (55 loc) · 2.28 KB
/
SessionProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/**
* Copyright 2021 Sage Intacct, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "LICENSE" file accompanying this file. This file is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
namespace Intacct;
use Intacct\Credentials\SenderCredentials;
use Intacct\Credentials\SessionCredentials;
use Intacct\Functions\Company\ApiSessionCreate;
class SessionProvider
{
/**
* @param ClientConfig $config
* @return ClientConfig
*/
public static function factory(ClientConfig $config = null): ClientConfig
{
if (!$config) {
$config = new ClientConfig();
}
$requestConfig = new RequestConfig();
$requestConfig->setControlId('sessionProvider');
$requestConfig->setNoRetryServerErrorCodes([]); // Retry all 500 level errors
$apiFunction = new ApiSessionCreate();
if ($config->getSessionId() && $config->getEntityId() !== null) {
$apiFunction->setEntityId($config->getEntityId());
}
$client = new OnlineClient($config);
$response = $client->execute($apiFunction, $requestConfig);
$authentication = $response->getAuthentication();
$result = $response->getResult();
$result->ensureStatusSuccess(); // throw any result errors
$data = $result->getData();
$api = $data[0];
$config->setSessionId((string)$api->{'sessionid'});
$config->setEndpointUrl((string)$api->{'endpoint'});
$config->setEntityId((string)$api->{'locationid'});
$config->setCompanyId((string)$authentication->getCompanyId());
$config->setUserId((string)$authentication->getUserId());
$config->setSessionTimeout((string)$authentication->getSessionTimeout());
$config->setSessionTimestamp((string)$authentication->getSessionTimestamp());
$config->setCredentials(new SessionCredentials($config, new SenderCredentials($config)));
return $config;
}
}