diff --git a/src/DirectGateway.php b/src/DirectGateway.php new file mode 100644 index 0000000..cbb8eaf --- /dev/null +++ b/src/DirectGateway.php @@ -0,0 +1,59 @@ + '', + 'testMode' => false, + ); + } + + public function getCustomerId() + { + return $this->getParameter('customerId'); + } + + public function setCustomerId($value) + { + return $this->setParameter('customerId', $value); + } + + public function authorize(array $parameters = array()) + { + return $this->createRequest('\Omnipay\Eway\Message\DirectAuthorizeRequest', $parameters); + } + + public function capture(array $parameters = array()) + { + return $this->createRequest('\Omnipay\Eway\Message\DirectCaptureRequest', $parameters); + } + + public function purchase(array $parameters = array()) + { + return $this->createRequest('\Omnipay\Eway\Message\DirectPurchaseRequest', $parameters); + } + + public function refund(array $parameters = array()) + { + return $this->createRequest('\Omnipay\Eway\Message\DirectRefundRequest', $parameters); + } + + public function void(array $parameters = array()) + { + return $this->createRequest('\Omnipay\Eway\Message\DirectVoidRequest', $parameters); + } +} diff --git a/src/Message/DirectAbstractRequest.php b/src/Message/DirectAbstractRequest.php new file mode 100644 index 0000000..f65ea71 --- /dev/null +++ b/src/Message/DirectAbstractRequest.php @@ -0,0 +1,71 @@ +httpClient->post($this->getEndpoint(), null, $data->asXML())->send(); + + return $this->response = new DirectResponse($this, $httpResponse->xml()); + } + + public function getCustomerId() + { + return $this->getParameter('customerId'); + } + + public function setCustomerId($value) + { + return $this->setParameter('customerId', $value); + } + + public function setOption1($value) + { + return $this->setParameter('option1', $value); + } + + public function getOption1() + { + return $this->getParameter('option1'); + } + + public function setOption2($value) + { + return $this->setParameter('option2', $value); + } + + public function getOption2() + { + return $this->getParameter('option2'); + } + + public function setOption3($value) + { + return $this->setParameter('option3', $value); + } + + public function getOption3() + { + return $this->getParameter('option3'); + } + + /** + * Get End Point + * + * Depends on Test or Live environment + * + * @return string + */ + public function getEndpoint() + { + return $this->getTestMode() ? $this->testEndpoint : $this->liveEndpoint; + } +} diff --git a/src/Message/DirectAuthorizeRequest.php b/src/Message/DirectAuthorizeRequest.php new file mode 100644 index 0000000..8d59fd7 --- /dev/null +++ b/src/Message/DirectAuthorizeRequest.php @@ -0,0 +1,53 @@ +validate('card'); + + $xml = ''; + $sxml = new \SimpleXMLElement($xml); + + /* eWAY Customer Id */ + $sxml->addChild('ewayCustomerID', $this->getCustomerId()); + + /* eWAY Transaction Details */ + $sxml->addChild('ewayTotalAmount', $this->getAmountInteger()); + $sxml->addChild('ewayTrxnNumber', $this->getTransactionId()); + + /* Card Holder Details */ + $card = $this->getCard(); + $sxml->addChild('ewayCardHoldersName', $card->getName()); + $sxml->addChild('ewayCardNumber', $card->getNumber()); + $sxml->addChild('ewayCardExpiryMonth', $card->getExpiryDate('m')); + $sxml->addChild('ewayCardExpiryYear', $card->getExpiryDate('y')); + $sxml->addChild('ewayCVN', $card->getCVV()); + + /* Customer Details */ + $sxml->addChild('ewayCustomerFirstName', $card->getFirstName()); + $sxml->addChild('ewayCustomerLastName', $card->getLastName()); + $sxml->addChild('ewayCustomerEmail', $card->getEmail()); + $sxml->addChild('ewayCustomerAddress', $card->getAddress1().' '.$card->getAddress2()); + $sxml->addChild('ewayCustomerPostcode', $card->getPostCode()); + + $sxml->addChild('ewayOption1', $this->getOption1()); + $sxml->addChild('ewayOption2', $this->getOption2()); + $sxml->addChild('ewayOption3', $this->getOption3()); + + $sxml->addChild('ewayCustomerInvoiceDescription', $this->getDescription()); + $sxml->addChild('ewayCustomerInvoiceRef', $this->getTransactionReference()); + + return $sxml; + } +} diff --git a/src/Message/DirectCaptureRequest.php b/src/Message/DirectCaptureRequest.php new file mode 100644 index 0000000..bb89323 --- /dev/null +++ b/src/Message/DirectCaptureRequest.php @@ -0,0 +1,38 @@ +validate('transactionId'); + + $xml = ''; + $sxml = new \SimpleXMLElement($xml); + + /* eWAY Customer Id */ + $sxml->addChild('ewayCustomerID', $this->getCustomerId()); + + /* eWAY Transaction Details */ + $sxml->addChild('ewayTotalAmount', $this->getAmountInteger()); + $sxml->addChild('ewayAuthTrxnNumber', $this->getTransactionId()); + + $sxml->addChild('ewayCardExpiryMonth', null); // optional field + $sxml->addChild('ewayCardExpiryYear', null); // optional field + + $sxml->addChild('ewayOption1', $this->getOption1()); + $sxml->addChild('ewayOption2', $this->getOption2()); + $sxml->addChild('ewayOption3', $this->getOption3()); + + return $sxml; + } +} diff --git a/src/Message/DirectPurchaseRequest.php b/src/Message/DirectPurchaseRequest.php new file mode 100644 index 0000000..0001156 --- /dev/null +++ b/src/Message/DirectPurchaseRequest.php @@ -0,0 +1,53 @@ +validate('card'); + + $xml = ''; + $sxml = new \SimpleXMLElement($xml); + + /* eWAY Customer Id */ + $sxml->addChild('ewayCustomerID', $this->getCustomerId()); + + /* eWAY Transaction Details */ + $sxml->addChild('ewayTotalAmount', $this->getAmountInteger()); + $sxml->addChild('ewayTrxnNumber', $this->getTransactionId()); + + /* Card Holder Details */ + $card = $this->getCard(); + $sxml->addChild('ewayCardHoldersName', $card->getName()); + $sxml->addChild('ewayCardNumber', $card->getNumber()); + $sxml->addChild('ewayCardExpiryMonth', $card->getExpiryDate('m')); + $sxml->addChild('ewayCardExpiryYear', $card->getExpiryDate('y')); + $sxml->addChild('ewayCVN', $card->getCVV()); + + /* Customer Details */ + $sxml->addChild('ewayCustomerFirstName', $card->getFirstName()); + $sxml->addChild('ewayCustomerLastName', $card->getLastName()); + $sxml->addChild('ewayCustomerEmail', $card->getEmail()); + $sxml->addChild('ewayCustomerAddress', $card->getAddress1().' '.$card->getAddress2()); + $sxml->addChild('ewayCustomerPostcode', $card->getPostCode()); + + $sxml->addChild('ewayOption1', $this->getOption1()); + $sxml->addChild('ewayOption2', $this->getOption2()); + $sxml->addChild('ewayOption3', $this->getOption3()); + + $sxml->addChild('ewayCustomerInvoiceDescription', $this->getDescription()); + $sxml->addChild('ewayCustomerInvoiceRef', $this->getTransactionReference()); + + return $sxml; + } +} diff --git a/src/Message/DirectRefundRequest.php b/src/Message/DirectRefundRequest.php new file mode 100644 index 0000000..e6c511a --- /dev/null +++ b/src/Message/DirectRefundRequest.php @@ -0,0 +1,53 @@ +setParameter('refundPassword', $value); + } + + public function getRefundPassword() + { + return $this->getParameter('refundPassword'); + } + + public function getData() + { + $this->validate('refundPassword', 'transactionId'); + + $xml = ''; + $sxml = new \SimpleXMLElement($xml); + + /* eWAY Customer Id */ + $sxml->addChild('ewayCustomerID', $this->getCustomerId()); + + /* eWAY Transaction Details */ + $sxml->addChild('ewayTotalAmount', $this->getAmountInteger()); + $sxml->addChild('ewayOriginalTrxnNumber', $this->getTransactionId()); + + /* Card Holder Details */ + $card = $this->getCard(); + $sxml->addChild('ewayCardExpiryMonth', $card->getExpiryDate('m')); + $sxml->addChild('ewayCardExpiryYear', $card->getExpiryDate('y')); + + $sxml->addChild('ewayOption1', $this->getOption1()); + $sxml->addChild('ewayOption2', $this->getOption2()); + $sxml->addChild('ewayOption3', $this->getOption3()); + + $sxml->addChild('ewayRefundPassword', $this->getRefundPassword()); + $sxml->addChild('ewayCustomerInvoiceRef', $this->getTransactionReference()); + + return $sxml; + } +} diff --git a/src/Message/DirectResponse.php b/src/Message/DirectResponse.php new file mode 100644 index 0000000..5dbb81c --- /dev/null +++ b/src/Message/DirectResponse.php @@ -0,0 +1,37 @@ +data->ewayTrxnStatus; + } + + public function isRedirect() + { + return false; + } + + public function getTransactionReference() + { + if (empty($this->data->ewayTrxnNumber)) { + return null; + } + + return (int) $this->data->ewayTrxnNumber; + } + + public function getMessage() + { + return (string) $this->data->ewayTrxnError; + } +} diff --git a/src/Message/DirectVoidRequest.php b/src/Message/DirectVoidRequest.php new file mode 100644 index 0000000..d806f0c --- /dev/null +++ b/src/Message/DirectVoidRequest.php @@ -0,0 +1,35 @@ +validate('transactionId'); + + $xml = ''; + $sxml = new \SimpleXMLElement($xml); + + /* eWAY Customer Id */ + $sxml->addChild('ewayCustomerID', $this->getCustomerId()); + + /* eWAY Transaction Details */ + $sxml->addChild('ewayTotalAmount', $this->getAmountInteger()); + $sxml->addChild('ewayAuthTrxnNumber', $this->getTransactionId()); + + $sxml->addChild('ewayOption1', $this->getOption1()); + $sxml->addChild('ewayOption2', $this->getOption2()); + $sxml->addChild('ewayOption3', $this->getOption3()); + + return $sxml; + } +} diff --git a/tests/DirectGatewayTest.php b/tests/DirectGatewayTest.php new file mode 100644 index 0000000..838fb3b --- /dev/null +++ b/tests/DirectGatewayTest.php @@ -0,0 +1,204 @@ +gateway = new DirectGateway($this->getHttpClient(), $this->getHttpRequest()); + + $this->gateway->setCustomerId('999999999'); + $this->gateway->setTestMode(true); + + $card = new CreditCard($this->getValidCard()); + + $this->purchaseOptions = array( + 'amount' => '10.00', + 'card' => $card + ); + + $this->captureOptions = array( + 'amount' => '10.00', + 'transactionId' => '10451614' + ); + + $this->refundOptions = array( + 'card' => $card, + 'amount' => '10.00', + 'transactionId' => '10451628', + 'refundPassword' => 'Refund123' + ); + + $this->voidOptions = array( + 'transactionId' => '10451636' + ); + } + + public function testAuthorizeSuccess() + { + $this->setMockHttpResponse('DirectAuthorizeSuccess.txt'); + + $request = $this->gateway->authorize($this->purchaseOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectAuthorizeRequest', $request); + + $this->assertTrue($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame(10451615, $response->getTransactionReference()); + $this->assertSame('00, Transaction Approved (Sandbox)', $response->getMessage()); + } + + public function testAuthorizeFailure() + { + $this->purchaseOptions['amount'] = '10.63'; + + $this->setMockHttpResponse('DirectAuthorizeFailure.txt'); + + $request = $this->gateway->authorize($this->purchaseOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectAuthorizeRequest', $request); + + $this->assertFalse($response->isSuccessful()); + $this->assertSame('10.63', $request->getAmount()); + $this->assertSame(10451614, $response->getTransactionReference()); + $this->assertSame('63, Security Violation (Sandbox)', $response->getMessage()); + } + + public function testCaptureSuccess() + { + $this->setMockHttpResponse('DirectCaptureSuccess.txt'); + + $request = $this->gateway->capture($this->captureOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectCaptureRequest', $request); + + $this->assertTrue($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame(10451626, $response->getTransactionReference()); + $this->assertSame('00, Transaction Approved (Sandbox)', $response->getMessage()); + } + + public function testCaptureFailure() + { + $this->setMockHttpResponse('DirectCaptureFailure.txt'); + + $request = $this->gateway->capture($this->captureOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectCaptureRequest', $request); + + $this->assertFalse($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame('Error: This authorisation has already been completed. Your transaction could not be processed.', $response->getMessage()); + } + + public function testPurchaseSuccess() + { + $this->setMockHttpResponse('DirectPurchaseSuccess.txt'); + + $request = $this->gateway->purchase($this->purchaseOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectPurchaseRequest', $request); + + $this->assertTrue($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame(10451628, $response->getTransactionReference()); + $this->assertSame('00, Transaction Approved (Sandbox)', $response->getMessage()); + } + + public function testPurchaseFailure() + { + $this->purchaseOptions['amount'] = '10.63'; + + $this->setMockHttpResponse('DirectPurchaseFailure.txt'); + + $request = $this->gateway->purchase($this->purchaseOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectPurchaseRequest', $request); + + $this->assertFalse($response->isSuccessful()); + $this->assertSame('10.63', $request->getAmount()); + $this->assertSame(10451629, $response->getTransactionReference()); + $this->assertSame('63, Security Violation (Sandbox)', $response->getMessage()); + } + + public function testRefundSuccess() + { + $this->setMockHttpResponse('DirectRefundSuccess.txt'); + + $request = $this->gateway->refund($this->refundOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectRefundRequest', $request); + + $this->assertTrue($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame(10451632, $response->getTransactionReference()); + $this->assertSame('00,Transaction Approved (Sandbox)', $response->getMessage()); + } + + public function testRefundFailure() + { + $this->setMockHttpResponse('DirectRefundFailure.txt'); + + $request = $this->gateway->refund($this->refundOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectRefundRequest', $request); + + $this->assertFalse($response->isSuccessful()); + $this->assertSame('10.00', $request->getAmount()); + $this->assertSame('Error: This transaction has already been refunded for its total amount. Your refund could not be processed.', $response->getMessage()); + } + + public function testVoidSuccess() + { + $this->setMockHttpResponse('DirectVoidSuccess.txt'); + + $request = $this->gateway->void($this->voidOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectVoidRequest', $request); + + $this->assertTrue($response->isSuccessful()); + $this->assertNull($request->getAmount()); + $this->assertSame(10451638, $response->getTransactionReference()); + $this->assertSame('00, Transaction Approved (Sandbox)', $response->getMessage()); + } + + public function testVoidFailure() + { + $this->setMockHttpResponse('DirectVoidFailure.txt'); + + $request = $this->gateway->void($this->voidOptions); + + $response = $request->send(); + + $this->assertInstanceOf('Omnipay\Eway\Message\DirectVoidRequest', $request); + + $this->assertFalse($response->isSuccessful()); + $this->assertNull($request->getAmount()); + $this->assertSame('Error: This authorisation has already been voided. Your transaction could not be processed.', $response->getMessage()); + } + +} diff --git a/tests/Mock/DirectAuthorizeFailure.txt b/tests/Mock/DirectAuthorizeFailure.txt new file mode 100644 index 0000000..9776336 --- /dev/null +++ b/tests/Mock/DirectAuthorizeFailure.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 303 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:38:36 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDQGBTRCAQ=JPCMEJKCMNEMLPNABCDAFFCM; secure; path=/, BIGipServerVirtServerPool-001-SSL=16976650.47873.0000; path=/ + +False10451614956363, Security Violation (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectAuthorizeSuccess.txt b/tests/Mock/DirectAuthorizeSuccess.txt new file mode 100644 index 0000000..7ae6df0 --- /dev/null +++ b/tests/Mock/DirectAuthorizeSuccess.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 324 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:39:18 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDCWTCADRB=FBDJPIICLAMAOPABHKLFGNIP; secure; path=/, BIGipServerVirtServerPool-001-SSL=855837450.47873.0000; path=/ + +True10451615198238100000, Transaction Approved (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectCaptureFailure.txt b/tests/Mock/DirectCaptureFailure.txt new file mode 100644 index 0000000..60ae20e --- /dev/null +++ b/tests/Mock/DirectCaptureFailure.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 321 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:47:47 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDCUCBTQTR=KBLMKEKCGDBLNKOGPDGPPIND; secure; path=/, BIGipServerVirtServerPool-001-SSL=1694698250.47873.0000; path=/ + +False1000Error: This authorisation has already been completed. Your transaction could not be processed. \ No newline at end of file diff --git a/tests/Mock/DirectCaptureSuccess.txt b/tests/Mock/DirectCaptureSuccess.txt new file mode 100644 index 0000000..aedcdb4 --- /dev/null +++ b/tests/Mock/DirectCaptureSuccess.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 304 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:47:37 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDCUCBTQTR=JBLMKEKCJPMCLDHOIHGLFNFA; secure; path=/, BIGipServerVirtServerPool-001-SSL=1694698250.47873.0000; path=/ + +True10451626453711100000, Transaction Approved (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectPurchaseFailure.txt b/tests/Mock/DirectPurchaseFailure.txt new file mode 100644 index 0000000..93bf663 --- /dev/null +++ b/tests/Mock/DirectPurchaseFailure.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 303 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:52:49 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDAUABRRQT=GPIIKEKCLJCKBMGFHHMDEENF; secure; path=/, BIGipServerVirtServerPool-001-SSL=1694698250.47873.0000; path=/ + +False10451629106363, Security Violation (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectPurchaseSuccess.txt b/tests/Mock/DirectPurchaseSuccess.txt new file mode 100644 index 0000000..5e0182d --- /dev/null +++ b/tests/Mock/DirectPurchaseSuccess.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 324 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:52:16 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDQGBTRCAQ=GODMEJKCMFEANBDKFHNHOLFF; secure; path=/, BIGipServerVirtServerPool-001-SSL=16976650.47873.0000; path=/ + +True10451628865732100000, Transaction Approved (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectRefundFailure.txt b/tests/Mock/DirectRefundFailure.txt new file mode 100644 index 0000000..faf7a06 --- /dev/null +++ b/tests/Mock/DirectRefundFailure.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 334 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:57:19 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDAWTADDQB=CCKABEICHPIBLDIMHCCGIKEM; secure; path=/, BIGipServerVirtServerPool-001-SSL=855837450.47873.0000; path=/ + +False1000Error: This transaction has already been refunded for its total amount. Your refund could not be processed. \ No newline at end of file diff --git a/tests/Mock/DirectRefundSuccess.txt b/tests/Mock/DirectRefundSuccess.txt new file mode 100644 index 0000000..d6a7ef8 --- /dev/null +++ b/tests/Mock/DirectRefundSuccess.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 303 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 07:56:51 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDCUCBTQTR=ODLMKEKCNOIBGDDCBGCCINPK; secure; path=/, BIGipServerVirtServerPool-001-SSL=1694698250.47873.0000; path=/ + +True10451632665971100000,Transaction Approved (Sandbox) \ No newline at end of file diff --git a/tests/Mock/DirectVoidFailure.txt b/tests/Mock/DirectVoidFailure.txt new file mode 100644 index 0000000..4955006 --- /dev/null +++ b/tests/Mock/DirectVoidFailure.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 315 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 08:00:39 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDSEASQAAR=DLHMDJKCFPHAPDBFONGNEHHO; secure; path=/, BIGipServerVirtServerPool-001-SSL=16976650.47873.0000; path=/ + +False0Error: This authorisation has already been voided. Your transaction could not be processed. \ No newline at end of file diff --git a/tests/Mock/DirectVoidSuccess.txt b/tests/Mock/DirectVoidSuccess.txt new file mode 100644 index 0000000..5db157a --- /dev/null +++ b/tests/Mock/DirectVoidSuccess.txt @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Cache-Control: private +Content-Length: 301 +Content-Type: text/xml +Server: Microsoft-IIS/7.5 +X-Powered-By: ASP.NET +Date: Thu, 21 Nov 2013 08:00:23 GMT +Connection: keep-alive +Set-Cookie: ASPSESSIONIDAWTADDQB=OCKABEICOAFLANJGKOLFMIKD; secure; path=/, BIGipServerVirtServerPool-001-SSL=855837450.47873.0000; path=/ + +True10451638164555000, Transaction Approved (Sandbox) \ No newline at end of file