diff --git a/lib/PayPal/Core/PayPalHttpConnection.php b/lib/PayPal/Core/PayPalHttpConnection.php index 970d0d8..3521560 100644 --- a/lib/PayPal/Core/PayPalHttpConnection.php +++ b/lib/PayPal/Core/PayPalHttpConnection.php @@ -18,13 +18,6 @@ class PayPalHttpConnection */ private $httpConfig; - /** - * HTTP status codes for which a retry must be attempted - * retry is currently attempted for Request timeout, Bad Gateway, - * Service Unavailable and Gateway timeout errors. - */ - private static $retryCodes = array('408', '502', '503', '504',); - /** * LoggingManager * @@ -124,17 +117,6 @@ class PayPalHttpConnection $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); } - //Retry if Failing - $retries = 0; - if (in_array($httpStatus, self::$retryCodes) && $this->httpConfig->getHttpRetryCount() != null) { - $this->logger->info("Got $httpStatus response from server. Retrying"); - do { - $result = curl_exec($ch); - //Retrieve Response Status - $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - } while (in_array($httpStatus, self::$retryCodes) && (++$retries < $this->httpConfig->getHttpRetryCount())); - } - //Throw Exception if Retries and Certificates doenst work if (curl_errno($ch)) { $ex = new PayPalConnectionException( @@ -168,18 +150,7 @@ class PayPalHttpConnection curl_close($ch); //More Exceptions based on HttpStatus Code - if (in_array($httpStatus, self::$retryCodes)) { - $ex = new PayPalConnectionException( - $this->httpConfig->getUrl(), - "Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " . - "Retried $retries times." - ); - $ex->setData($result); - $this->logger->error("Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}. " . - "Retried $retries times." . $result); - $this->logger->debug("\n\n" . str_repeat('=', 128) . "\n"); - throw $ex; - } elseif ($httpStatus < 200 || $httpStatus >= 300) { + if ($httpStatus < 200 || $httpStatus >= 300) { $ex = new PayPalConnectionException( $this->httpConfig->getUrl(), "Got Http response code $httpStatus when accessing {$this->httpConfig->getUrl()}.", diff --git a/lib/PayPal/Handler/RestHandler.php b/lib/PayPal/Handler/RestHandler.php index ec5298d..6bc55ae 100644 --- a/lib/PayPal/Handler/RestHandler.php +++ b/lib/PayPal/Handler/RestHandler.php @@ -82,7 +82,7 @@ class RestHandler implements IPayPalHandler $httpConfig->addHeader('Authorization', "Bearer " . $credential->getAccessToken($config), false); } - if ($httpConfig->getMethod() == 'POST' || $httpConfig->getMethod() == 'PUT') { + if (($httpConfig->getMethod() == 'POST' || $httpConfig->getMethod() == 'PUT') && !is_null($this->apiContext->getRequestId())) { $httpConfig->addHeader('PayPal-Request-Id', $this->apiContext->getRequestId()); } // Add any additional Headers that they may have provided diff --git a/lib/PayPal/Rest/ApiContext.php b/lib/PayPal/Rest/ApiContext.php index dd68fe8..bbe3752 100644 --- a/lib/PayPal/Rest/ApiContext.php +++ b/lib/PayPal/Rest/ApiContext.php @@ -85,17 +85,24 @@ class ApiContext */ public function getRequestId() { - if ($this->requestId == null) { - $this->requestId = $this->generateRequestId(); - } - return $this->requestId; } + /** + * Sets the request ID + * + * @param string $requestId the PayPal-Request-Id value to use + */ + public function setRequestId($requestId) + { + $this->requestId = $requestId; + } + /** * Resets the requestId that can be used to set the PayPal-request-id * header used for idempotency. In cases where you need to make multiple create calls * using the same ApiContext object, you need to reset request Id. + * @deprecated Call setRequestId with a unique value. * * @return string */ @@ -140,6 +147,7 @@ class ApiContext * Generates a unique per request id that * can be used to set the PayPal-Request-Id header * that is used for idempotency + * @deprecated * * @return string */ diff --git a/tests/PayPal/Test/Rest/ApiContextTest.php b/tests/PayPal/Test/Rest/ApiContextTest.php index 32c711c..9869b9d 100644 --- a/tests/PayPal/Test/Rest/ApiContextTest.php +++ b/tests/PayPal/Test/Rest/ApiContextTest.php @@ -22,13 +22,27 @@ class ApiContextTest extends PHPUnit_Framework_TestCase public function testGetRequestId() { $requestId = $this->apiContext->getRequestId(); - $this->assertNotNull($requestId); - $this->assertEquals($requestId, $this->apiContext->getRequestId()); + $this->assertNull($requestId); + } + + public function testSetRequestId() + { + $this->assertNull($this->apiContext->getRequestId()); + + $expectedRequestId = 'random-value'; + $this->apiContext->setRequestId($expectedRequestId); + $requestId = $this->apiContext->getRequestId(); + $this->assertEquals($expectedRequestId, $requestId); } public function testResetRequestId() { - $requestId = $this->apiContext->getRequestId(); + $this->assertNull($this->apiContext->getRequestId()); + + $requestId = $this->apiContext->resetRequestId(); + $this->assertNotNull($requestId); + + // Tests that another resetRequestId call will generate a new ID $newRequestId = $this->apiContext->resetRequestId(); $this->assertNotNull($newRequestId); $this->assertNotEquals($newRequestId, $requestId);