Skip to content

Commit 577cd78

Browse files
archivelmMilan Latinovic
and
Milan Latinovic
authored
issue#58 - Add configurable Guzzle timeout (#59)
* issue#58 - Add configurable Guzzle timeout - Extend ApiRequest with $apiRequestTimeout - Extend Client with $apiRequestTimeout - Modify existing logic to use $apiRequestTimeout and Config timeout only as a default * issue#58 - Add configurable Guzzle timeout - Extend ApiRequest with $apiRequestTimeout - Extend Client with $apiRequestTimeout - Modify existing logic to use $apiRequestTimeout and Config timeout only as a default * issue#58 - Add configurable Guzzle timeout - Extend ApiRequest with $apiRequestTimeout - Extend Client with $apiRequestTimeout - Modify existing logic to use $apiRequestTimeout and Config timeout only as a default Co-authored-by: Milan Latinovic <[email protected]>
1 parent 983650e commit 577cd78

File tree

4 files changed

+158
-38
lines changed

4 files changed

+158
-38
lines changed

example/config.tmpl.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@
1111
'fieldIdentifier' => 'identifier1_xxx',
1212
'oauth_client_id' => 'xxx',
1313
'oauth_client_secret' => 'xxx',
14+
'api_request_timeout' => 30
1415
);

example/create-document.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@
1818
use Eversign\TextField;
1919
use Eversign\AttachmentField;
2020

21-
$client = new Client($config['accessKey'], $config['businessId']);
21+
// Client with default API request timeout
22+
// $client = new Client($config['accessKey'], $config['businessId']);
2223

24+
// Client with custom API request timeout
25+
$client = new Client($config['accessKey'], $config['businessId'], null, $config['api_request_timeout']);
26+
27+
// Create new Document
2328
$document = new Document();
2429
// $document->setSandbox(true);
2530
$document->setTitle('Form Test');

sdk/Eversign/ApiRequest.php

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class ApiRequest {
4848

4949
private $guzzleClient;
5050

51+
private $guzzleRequestTimeout;
52+
5153
/**
5254
* Creating a blank Request with the Access Key and specific Endpoint
5355
*
@@ -59,7 +61,16 @@ class ApiRequest {
5961
* @param [] $payLoad
6062
*/
6163

62-
public function __construct($httpType, $accessKey, $endPoint, $serializeClass = "", $parameters = NULL, $payLoad = NULL, $apiBaseUrl = null) {
64+
public function __construct(
65+
$httpType,
66+
$accessKey,
67+
$endPoint,
68+
$serializeClass = "",
69+
$parameters = null,
70+
$payLoad = null,
71+
$apiBaseUrl = null,
72+
$apiRequestTimeout = Config::GUZZLE_TIMEOUT
73+
) {
6374
$headers = ['User-Agent' => 'Eversign_PHP_SDK'];
6475

6576
if(substr($accessKey, 0, strlen('Bearer ')) === 'Bearer ') {
@@ -84,6 +95,8 @@ public function __construct($httpType, $accessKey, $endPoint, $serializeClass =
8495
$this->parameters = $parameters;
8596
$this->payLoad = $payLoad;
8697
$this->apiB = $apiBaseUrl;
98+
99+
$this->guzzleRequestTimeout = $apiRequestTimeout;
87100
}
88101

89102
public function requestOAuthToken($token_request) {
@@ -98,7 +111,7 @@ public function requestOAuthToken($token_request) {
98111
]);
99112

100113
$response = $guzzleClient->request('POST', 'token', [
101-
'timeout' => Config::GUZZLE_TIMEOUT,
114+
'timeout' => $this->guzzleRequestTimeout,
102115
'form_params' => $token_request->toArray(),
103116
]);
104117

@@ -143,7 +156,7 @@ private function createQuery() {
143156
public function startMultipartUpload() {
144157
$effectiveUrl = null;
145158
$response = $this->guzzleClient->request($this->httpType, $this->endPoint, [
146-
'timeout' => Config::GUZZLE_TIMEOUT,
159+
'timeout' => $this->guzzleRequestTimeout,
147160
'query' => $this->createQuery(),
148161
'multipart' => [
149162
[
@@ -181,7 +194,7 @@ public function startRequest() {
181194
$effectiveUrl = null;
182195
if($this->payLoad && is_array($this->payLoad) && array_key_exists("sink", $this->payLoad)) {
183196
$response = $this->guzzleClient->request($this->httpType, $this->endPoint, [
184-
'timeout' => Config::GUZZLE_TIMEOUT,
197+
'timeout' => $this->guzzleRequestTimeout,
185198
'query' => $this->createQuery(),
186199
'sink' => $this->payLoad["sink"],
187200
'on_stats' => function (TransferStats $stats) use (&$effectiveUrl) {
@@ -191,7 +204,7 @@ public function startRequest() {
191204
}
192205
else {
193206
$requestOptions = [
194-
'timeout' => Config::GUZZLE_TIMEOUT,
207+
'timeout' => $this->guzzleRequestTimeout,
195208
'query' => $this->createQuery(),
196209
'on_stats' => function (TransferStats $stats) use (&$effectiveUrl) {
197210
$effectiveUrl = $stats->getEffectiveUri();
@@ -242,10 +255,5 @@ public function startRequest() {
242255
throw new \Exception('Webservice Error No 999 - Type: parsing_exception: ' . $body);
243256
}
244257
}
245-
246-
247258
}
248-
249-
250-
251259
}

sdk/Eversign/Client.php

Lines changed: 133 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ class Client {
6363
*/
6464
private $selectedBusiness;
6565

66+
private $apiRequestTimeout;
67+
6668
/**
6769
* Constructor
6870
*
6971
* @param string $accessKey
7072
*/
71-
public function __construct($accessKey = null, $businessId = 0, $apiBaseUrl = null)
73+
public function __construct($accessKey = null, $businessId = 0, $apiBaseUrl = null, int $apiRequestTimeout = Config::GUZZLE_TIMEOUT)
7274
{
7375
if (!class_exists('Doctrine\Common\Annotations\AnnotationRegistry', false) && class_exists('Doctrine\Common\Annotations\AnnotationRegistry')) {
7476
AnnotationRegistry::registerLoader('class_exists');
@@ -81,7 +83,7 @@ public function __construct($accessKey = null, $businessId = 0, $apiBaseUrl = nu
8183
$this->apiBaseUrl = $apiBaseUrl;
8284
$this->fetchBusinesses();
8385

84-
86+
$this->apiRequestTimeout = $apiRequestTimeout;
8587
}
8688

8789
/**
@@ -139,9 +141,18 @@ public function generateOAuthAuthorizationUrl($obj) {
139141
* @return $oauthAccessToken
140142
*/
141143
public function requestOAuthToken(OAuthTokenRequest $token_request) {
142-
$request = new ApiRequest('POST', 'oauth', 'oauth', null, null, null, $this->apiBaseUrl);
143-
$oauthToken = $request->requestOAuthToken($token_request);
144-
return $oauthToken;
144+
$request = new ApiRequest(
145+
'POST',
146+
'oauth',
147+
'oauth',
148+
null,
149+
null,
150+
null,
151+
$this->apiBaseUrl,
152+
$this->apiRequestTimeout
153+
);
154+
155+
return $request->requestOAuthToken($token_request);
145156
}
146157

147158
/**
@@ -161,7 +172,16 @@ public function setOAuthAccessToken($oauthToken) {
161172
*/
162173
public function fetchBusinesses($setDefault = true) {
163174
if($this->accessKey) {
164-
$request = new ApiRequest("GET", $this->accessKey, Config::BUSINESS_URL, "array<Eversign\Business>", null, null, $this->apiBaseUrl);
175+
$request = new ApiRequest(
176+
"GET",
177+
$this->accessKey,
178+
Config::BUSINESS_URL,
179+
"array<Eversign\Business>",
180+
null,
181+
null,
182+
$this->apiBaseUrl,
183+
$this->apiRequestTimeout
184+
);
165185
$this->businesses = $request->startRequest();
166186

167187
if ($setDefault && count($this->businesses) > 0) {
@@ -191,11 +211,8 @@ function ($e) {
191211
$this->selectedBusiness = array_values($filteredBusinesses)[0];
192212
}
193213
}
194-
195214
}
196215
}
197-
198-
199216
}
200217

201218
public function getInfo() {
@@ -204,7 +221,17 @@ public function getInfo() {
204221
"business_id" => $this->selectedBusiness->getBusinessId(),
205222
];
206223

207-
$request = new ApiRequest('GET', $this->accessKey, 'info', "Eversign\Info", $parameters, null, $this->apiBaseUrl);
224+
$request = new ApiRequest(
225+
'GET',
226+
$this->accessKey,
227+
'info',
228+
"Eversign\Info",
229+
$parameters,
230+
null,
231+
$this->apiBaseUrl,
232+
$this->apiRequestTimeout
233+
);
234+
208235
return $request->startRequest();
209236
}
210237
}
@@ -216,9 +243,18 @@ private function getDocuments($type = "all") {
216243
"type" => $type
217244
];
218245

219-
$request = new ApiRequest("GET", $this->accessKey, Config::DOCUMENT_URL, "array<Eversign\Document>", $parameters, null, $this->apiBaseUrl);
220-
return $request->startRequest();
246+
$request = new ApiRequest(
247+
"GET",
248+
$this->accessKey,
249+
Config::DOCUMENT_URL,
250+
"array<Eversign\Document>",
251+
$parameters,
252+
null,
253+
$this->apiBaseUrl,
254+
$this->apiRequestTimeout
255+
);
221256

257+
return $request->startRequest();
222258
}
223259

224260
/**
@@ -322,9 +358,18 @@ public function sendReminderForDocument(Document $document, Signer $signer) {
322358
];
323359

324360
$payLoad = json_encode($payLoad);
325-
$request = new ApiRequest("POST", $this->accessKey, Config::REMINDER_URL, "Eversign\Result", $parameters, $payLoad, $this->apiBaseUrl);
326-
return $request->startRequest()->success;
361+
$request = new ApiRequest(
362+
"POST",
363+
$this->accessKey,
364+
Config::REMINDER_URL,
365+
"Eversign\Result",
366+
$parameters,
367+
$payLoad,
368+
$this->apiBaseUrl,
369+
$this->apiRequestTimeout
370+
);
327371

372+
return $request->startRequest()->success;
328373
}
329374

330375
/**
@@ -338,10 +383,18 @@ public function getDocumentByHash($documentHash) {
338383
"document_hash" => $documentHash
339384
];
340385

341-
$request = new ApiRequest("GET", $this->accessKey, Config::DOCUMENT_URL, "Eversign\Document", $parameters, null, $this->apiBaseUrl);
342-
return $request->startRequest();
343-
386+
$request = new ApiRequest(
387+
"GET",
388+
$this->accessKey,
389+
Config::DOCUMENT_URL,
390+
"Eversign\Document",
391+
$parameters,
392+
null,
393+
$this->apiBaseUrl,
394+
$this->apiRequestTimeout
395+
);
344396

397+
return $request->startRequest();
345398
}
346399

347400
public function createDocumentFromTemplate(DocumentTemplate $template) {
@@ -359,7 +412,16 @@ public function createDocumentFromTemplate(DocumentTemplate $template) {
359412
$serializer = SerializerBuilder::create()->build();
360413
$payLoad = $serializer->serialize($template, 'json');
361414

362-
$request = new ApiRequest("POST", $this->accessKey, Config::DOCUMENT_URL, "Eversign\Document", $parameters, $payLoad, $this->apiBaseUrl);
415+
$request = new ApiRequest("POST",
416+
$this->accessKey,
417+
Config::DOCUMENT_URL,
418+
"Eversign\Document",
419+
$parameters,
420+
$payLoad,
421+
$this->apiBaseUrl,
422+
$this->apiRequestTimeout
423+
);
424+
363425
return $request->startRequest();
364426
}
365427

@@ -388,9 +450,18 @@ public function createDocument(Document $document) {
388450
$serializer = SerializerBuilder::create()->build();
389451
$payLoad = $serializer->serialize($document, 'json');
390452

391-
$request = new ApiRequest("POST", $this->accessKey, Config::DOCUMENT_URL, "Eversign\Document", $parameters, $payLoad, $this->apiBaseUrl);
392-
return $request->startRequest();
453+
$request = new ApiRequest(
454+
"POST",
455+
$this->accessKey,
456+
Config::DOCUMENT_URL,
457+
"Eversign\Document",
458+
$parameters,
459+
$payLoad,
460+
$this->apiBaseUrl,
461+
$this->apiRequestTimeout
462+
);
393463

464+
return $request->startRequest();
394465
}
395466

396467
/**
@@ -409,7 +480,17 @@ public function uploadFile(File $file) {
409480
];
410481

411482

412-
$request = new ApiRequest("POST", $this->accessKey, Config::FILE_URL, NULL, $parameters, $file->getFilePath(), $this->apiBaseUrl);
483+
$request = new ApiRequest(
484+
"POST",
485+
$this->accessKey,
486+
Config::FILE_URL,
487+
NULL,
488+
$parameters,
489+
$file->getFilePath(),
490+
$this->apiBaseUrl,
491+
$this->apiRequestTimeout
492+
);
493+
413494
$response = $request->startMultipartUpload();
414495

415496
if(isset($response->file_id)) {
@@ -476,10 +557,18 @@ public function downloadDocumentToPath(Document $document, $path, $auditTrail =
476557
"sink" => $path
477558
];
478559

479-
$request = new ApiRequest("GET", $this->accessKey, $type, "Eversign\Document", $parameters, $payLoad, $this->apiBaseUrl);
480-
return $request->startRequest();
481-
560+
$request = new ApiRequest(
561+
"GET",
562+
$this->accessKey,
563+
$type,
564+
"Eversign\Document",
565+
$parameters,
566+
$payLoad,
567+
$this->apiBaseUrl,
568+
$this->apiRequestTimeout
569+
);
482570

571+
return $request->startRequest();
483572
}
484573

485574
/**
@@ -509,9 +598,17 @@ public function deleteDocument(Document $document, $type=NULL) {
509598
$parameters[$type] = 1;
510599
}
511600

512-
$request = new ApiRequest("DELETE", $this->accessKey, Config::DOCUMENT_URL, "Eversign\Result", $parameters, $this->apiBaseUrl);
513-
return $request->startRequest()->success;
601+
$request = new ApiRequest(
602+
"DELETE",
603+
$this->accessKey,
604+
Config::DOCUMENT_URL,
605+
"Eversign\Result",
606+
$parameters,
607+
$this->apiBaseUrl,
608+
$this->apiRequestTimeout
609+
);
514610

611+
return $request->startRequest()->success;
515612
}
516613

517614
/**
@@ -550,7 +647,16 @@ public function updateDocument(Document $document)
550647
$serializer = SerializerBuilder::create()->build();
551648
$payLoad = $serializer->serialize($document, 'json');
552649

553-
$request = new ApiRequest("PUT", $this->accessKey, Config::DOCUMENT_URL, "Eversign\Document", $parameters, $payLoad, $this->apiBaseUrl);
650+
$request = new ApiRequest(
651+
"PUT",
652+
$this->accessKey,
653+
Config::DOCUMENT_URL,
654+
"Eversign\Document",
655+
$parameters,
656+
$payLoad,
657+
$this->apiBaseUrl,
658+
$this->apiRequestTimeout
659+
);
554660

555661
return $request->startRequest();
556662
}

0 commit comments

Comments
 (0)