diff --git a/.coveralls.yml b/.coveralls.yml new file mode 100644 index 00000000..11dcc7f3 --- /dev/null +++ b/.coveralls.yml @@ -0,0 +1,2 @@ +coverage_clover: ./clover.xml +json_path: ./coveralls-upload.json \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 67753ce6..2618d790 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,12 @@ php: - 5.4 - 5.5 - 5.6 + - 7.0 - hhvm before_script: - composer install -n --dev --prefer-source script: vendor/bin/phpcs --standard=PSR2 src && vendor/bin/phpunit --coverage-text + +after_script: vendor/bin/coveralls -v \ No newline at end of file diff --git a/README.md b/README.md index 203bfced..5c996829 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ **Ecopayz driver for the Omnipay PHP payment processing library** [![Build Status](https://travis-ci.org/dercoder/omnipay-ecopayz.png?branch=master)](https://travis-ci.org/dercoder/omnipay-ecopayz) +[![Coverage Status](https://coveralls.io/repos/dercoder/omnipay-ecopayz/badge.svg?branch=master&service=github)](https://coveralls.io/github/dercoder/omnipay-ecopayz?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/54366b4be993e89c45000137/badge.png)](https://www.versioneye.com/user/projects/54366b4be993e89c45000137) [![Latest Stable Version](https://poser.pugx.org/dercoder/omnipay-ecopayz/v/stable.png)](https://packagist.org/packages/dercoder/omnipay-ecopayz) @@ -21,7 +22,7 @@ to your `composer.json` file: ```json { "require": { - "dercoder/omnipay-ecopayz": "~1.0" + "dercoder/omnipay-ecopayz": "~2.0.x-dev" } } ``` diff --git a/composer.json b/composer.json index e0ee9257..cb73f953 100644 --- a/composer.json +++ b/composer.json @@ -16,14 +16,16 @@ "psr-0": { "Omnipay\\Ecopayz\\" : "src/" } }, "require": { - "omnipay/common": "~2.3" + "omnipay/common": "^3.0" }, "require-dev": { - "omnipay/tests": "~2.0" + "omnipay/tests": "^3.0.0", + "php-coveralls/php-coveralls": "^2.4.0", + "squizlabs/php_codesniffer": "3.*" }, "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } } } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index ad0befd1..da14877a 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -14,9 +14,6 @@ ./tests/ - - - ./src diff --git a/src/Omnipay/Ecopayz/Message/AbstractRequest.php b/src/Omnipay/Ecopayz/Message/AbstractRequest.php index b8ee20fc..dfcaa703 100644 --- a/src/Omnipay/Ecopayz/Message/AbstractRequest.php +++ b/src/Omnipay/Ecopayz/Message/AbstractRequest.php @@ -11,6 +11,20 @@ */ abstract class AbstractRequest extends \Omnipay\Common\Message\AbstractRequest { + /** + * Test Endpoint URL + * + * @var string URL + */ + protected $testEndpoint = 'https://merchantapi.test.payz.com/MerchantAPIService.asmx'; + + /** + * Live Endpoint URL + * + * @var string URL + */ + protected $liveEndpoint = 'https://merchantapi.payz.com/MerchantAPIService.asmx'; + /** * Get the Merchant ID * @@ -96,6 +110,16 @@ public function setMerchantAccountNumber($value) return $this->setParameter('merchantAccountNumber', $value); } + /** + * Get API endpoint URL + * + * @return string + */ + protected function getEndpoint() + { + return $this->getTestMode() ? $this->testEndpoint : $this->liveEndpoint; + } + /** * Get calculated checksum * diff --git a/src/Omnipay/Ecopayz/Message/CompletePurchaseRequest.php b/src/Omnipay/Ecopayz/Message/CompletePurchaseRequest.php index c69c44eb..4e599be3 100644 --- a/src/Omnipay/Ecopayz/Message/CompletePurchaseRequest.php +++ b/src/Omnipay/Ecopayz/Message/CompletePurchaseRequest.php @@ -13,12 +13,6 @@ */ class CompletePurchaseRequest extends FetchTransactionRequest { - private $trustedIps = array( - '213.129.76.104', '213.129.76.105', - '217.21.162.163', '217.21.162.164', - '176.57.42.131', '176.57.42.132' - ); - /** * Get the data for this request. * @@ -32,29 +26,16 @@ public function getData() 'merchantPassword' ); - if (!$this->getTestMode()) { - - if (!in_array($this->httpRequest->getClientIp(), $this->trustedIps)) { - throw new InvalidRequestException('IP Address is invalid to access this function'); - } - - } - if ($xml = $this->httpRequest->request->get('XML')) { - if (!$this->validateChecksum($xml)) { throw new InvalidRequestException('Invalid XML checksum'); } return new \SimpleXMLElement($xml); - } elseif ($xml = $this->httpRequest->getContent()) { return new \SimpleXMLElement($xml); - } else { - throw new InvalidRequestException('Missing XML'); - } } @@ -67,7 +48,6 @@ public function getData() public function sendData($data) { if (isset($data->StatusReport)) { - if (in_array($data->StatusReport->Status, array(1, 2, 3))) { $response = $this->createResponse('OK', 0, 'OK'); } elseif (in_array($data->StatusReport->Status, array(4, 5))) { @@ -79,7 +59,6 @@ public function sendData($data) header('Content-Type: text/xml; charset=utf-8'); echo $response; die(); - } else { return new CompletePurchaseResponse($this, $data); } diff --git a/src/Omnipay/Ecopayz/Message/FetchTransactionRequest.php b/src/Omnipay/Ecopayz/Message/FetchTransactionRequest.php index 20353a6f..53a06df2 100644 --- a/src/Omnipay/Ecopayz/Message/FetchTransactionRequest.php +++ b/src/Omnipay/Ecopayz/Message/FetchTransactionRequest.php @@ -1,4 +1,5 @@ getTransactionReference()) { - $query = $body->appendChild( $document->createElement('q0:QueryBySVSTransactionID') ); @@ -65,9 +63,7 @@ public function getData() $request->appendChild( $document->createElement('q0:SVSTxID', $transactionReference) ); - } elseif ($transactionId = $this->getTransactionId()) { - $query = $body->appendChild( $document->createElement('q0:QueryByCustomerTransactionID') ); @@ -87,11 +83,8 @@ public function getData() $request->appendChild( $document->createElement('q0:TxID', $transactionId) ); - } else { - throw new InvalidRequestException('The transactionId or transactionReference parameter is required'); - } return $document->saveXML(); @@ -100,23 +93,21 @@ public function getData() /** * Send the request with specified data * - * @param mixed $data The data to send - * @throws InvalidResponseException - * @throws InvalidRequestException + * @param mixed $data The data to send * @return FetchTransactionResponse + * @throws InvalidRequestException + * @throws InvalidResponseException */ public function sendData($data) { if (strpos($data, 'QueryBySVSTransactionID') !== false) { - $headers = array( 'Content-Type' => 'text/xml; charset=utf-8', 'SOAPAction' => 'http://www.ecocard.com/merchantAPI/QueryBySVSTransactionID' ); - $httpRequest = $this->httpClient->createRequest('POST', $this->endpoint, $headers, $data); - $httpResponse = $httpRequest->send(); - $xmlResponse = $httpResponse->xml() + $httpResponse = $this->httpClient->request('POST', $this->getEndpoint(), $headers, $data); + $xmlResponse = simplexml_load_string($httpResponse->getBody()->getContents()) ->children('http://schemas.xmlsoap.org/soap/envelope/') ->children('http://www.ecocard.com/merchantAPI/'); @@ -134,17 +125,14 @@ public function sendData($data) ->QueryBySVSTransactionIDResponse ->TransactionResponse ); - } elseif (strpos($data, 'QueryByCustomerTransactionID') !== false) { - $headers = array( 'Content-Type' => 'text/xml; charset=utf-8', 'SOAPAction' => 'http://www.ecocard.com/merchantAPI/QueryByCustomerTransactionID' ); - $httpRequest = $this->httpClient->createRequest('POST', $this->endpoint, $headers, $data); - $httpResponse = $httpRequest->send(); - $xmlResponse = $httpResponse->xml() + $httpResponse = $this->httpClient->request('POST', $this->getEndpoint(), $headers, $data); + $xmlResponse = simplexml_load_string($httpResponse->getBody()->getContents()) ->children('http://schemas.xmlsoap.org/soap/envelope/') ->children('http://www.ecocard.com/merchantAPI/'); @@ -162,11 +150,8 @@ public function sendData($data) ->QueryByCustomerTransactionIDResponse ->TransactionResponse ); - } else { - throw new InvalidRequestException('The transactionId or transactionReference parameter is required'); - } } } diff --git a/src/Omnipay/Ecopayz/Message/PayoutRequest.php b/src/Omnipay/Ecopayz/Message/PayoutRequest.php index 7116676e..41a27783 100644 --- a/src/Omnipay/Ecopayz/Message/PayoutRequest.php +++ b/src/Omnipay/Ecopayz/Message/PayoutRequest.php @@ -13,8 +13,6 @@ */ class PayoutRequest extends AbstractRequest { - protected $endpoint = 'https://secure.ecopayz.com/services/MerchantAPI/MerchantAPIService.asmx'; - /** * Get the Client Account Number * @@ -161,9 +159,8 @@ public function sendData($data) 'SOAPAction' => 'http://www.ecocard.com/merchantAPI/Payout' ); - $httpRequest = $this->httpClient->createRequest('POST', $this->endpoint, $headers, $data); - $httpResponse = $httpRequest->send(); - $xmlResponse = $httpResponse->xml() + $httpResponse = $this->httpClient->request('POST', $this->getEndpoint(), $headers, $data); + $xmlResponse = simplexml_load_string($httpResponse->getBody()->getContents()) ->children('http://schemas.xmlsoap.org/soap/envelope/') ->children('http://www.ecocard.com/merchantAPI/'); diff --git a/src/Omnipay/Ecopayz/Message/PurchaseRequest.php b/src/Omnipay/Ecopayz/Message/PurchaseRequest.php index 07935463..68060389 100644 --- a/src/Omnipay/Ecopayz/Message/PurchaseRequest.php +++ b/src/Omnipay/Ecopayz/Message/PurchaseRequest.php @@ -12,7 +12,7 @@ * @author Alexander Fedra * @copyright 2015 DerCoder * @license http://opensource.org/licenses/mit-license.php MIT - * @version 2.0.3 Ecopayz API Specification + * @version 2.0.6 Ecopayz API Specification */ class PurchaseRequest extends AbstractRequest { @@ -65,8 +65,20 @@ public function getData() $data['Amount'] = $this->getAmount(); $data['Currency'] = $this->getCurrency(); $data['MerchantFreeText'] = $this->getDescription(); - $data['Checksum'] = $this->calculateArrayChecksum($data); + if ($returnUrl = $this->getReturnUrl()) { + $data['OnSuccessUrl'] = $returnUrl; + } + + if ($cancelUrl = $this->getCancelUrl()) { + $data['OnFailureUrl'] = $cancelUrl; + } + + if ($notifyUrl = $this->getNotifyUrl()) { + $data['TransferUrl'] = $notifyUrl; + } + + $data['Checksum'] = $this->calculateArrayChecksum($data); return $data; } diff --git a/src/Omnipay/Ecopayz/Message/PurchaseResponse.php b/src/Omnipay/Ecopayz/Message/PurchaseResponse.php index 34497c4d..9083925c 100644 --- a/src/Omnipay/Ecopayz/Message/PurchaseResponse.php +++ b/src/Omnipay/Ecopayz/Message/PurchaseResponse.php @@ -16,7 +16,10 @@ */ class PurchaseResponse extends AbstractResponse implements RedirectResponseInterface { - protected $endpoint = 'https://secure.ecopayz.com/PrivateArea/WithdrawOnlineTransfer.aspx'; + protected $testEndpoint = 'https://myaccount.test.payz.com/purchase/create'; + protected $liveEndpoint = 'https://myaccount.payz.com/purchase/create'; + protected $testRedirectEndpoint = 'https://myaccount.test.payz.com/purchase/request'; + protected $redirectEndpoint = 'https://myaccount.payz.com/purchase/request'; public function __construct(RequestInterface $request, $data) { @@ -36,7 +39,7 @@ public function isRedirect() public function getRedirectUrl() { - return $this->endpoint . '?' . http_build_query($this->data, '', '&'); + return $this->getRedirectEndpoint() . '?' . http_build_query($this->data, '', '&'); } public function getRedirectMethod() @@ -48,4 +51,14 @@ public function getRedirectData() { return null; } + + protected function getEndpoint() + { + return $this->getRequest()->getTestMode() ? $this->testEndpoint : $this->liveEndpoint; + } + + protected function getRedirectEndpoint() + { + return $this->getRequest()->getTestMode() ? $this->testRedirectEndpoint : $this->redirectEndpoint; + } } diff --git a/tests/Omnipay/Ecopayz/Message/FetchTransactionResponseTest.php b/tests/Omnipay/Ecopayz/Message/FetchTransactionResponseTest.php index e07b2a3d..5ea697bc 100644 --- a/tests/Omnipay/Ecopayz/Message/FetchTransactionResponseTest.php +++ b/tests/Omnipay/Ecopayz/Message/FetchTransactionResponseTest.php @@ -37,6 +37,7 @@ public function testSuccess() $this->assertSame('OK', $response->getMessage()); $this->assertSame('2064', $response->getTransactionId()); $this->assertSame('1865010000008316336', $response->getTransactionReference()); + $this->assertSame('', $response->getTransactionDescription()); $this->assertSame('7.91', $response->getAmount()); $this->assertSame('EUR', $response->getCurrency()); $this->assertSame('110355', $response->getMerchantAccountNumber()); diff --git a/tests/Omnipay/Ecopayz/Message/PurchaseRequestTest.php b/tests/Omnipay/Ecopayz/Message/PurchaseRequestTest.php index 62e78e5a..96fbb84f 100644 --- a/tests/Omnipay/Ecopayz/Message/PurchaseRequestTest.php +++ b/tests/Omnipay/Ecopayz/Message/PurchaseRequestTest.php @@ -18,7 +18,10 @@ public function setUp() 'transactionId' => 'TX4567890', 'description' => 'Free Text Description', 'amount' => '12.34', - 'currency' => 'EUR' + 'currency' => 'EUR', + 'returnUrl' => 'http://example.com/return', + 'cancelUrl' => 'http://example.com/cancel', + 'notifyUrl' => 'http://example.com/notify', )); } @@ -33,6 +36,16 @@ public function testGetData() $this->assertSame('12.34', $data['Amount']); $this->assertSame('EUR', $data['Currency']); $this->assertSame('Free Text Description', $data['MerchantFreeText']); - $this->assertSame('84bbad2a636aa9226c03f17ff813a181', $data['Checksum']); + $this->assertSame('7320d93a3daa1e296f56fa7f40d6fb8b', $data['Checksum']); + $this->assertSame('http://example.com/return', $data['OnSuccessUrl']); + $this->assertSame('http://example.com/cancel', $data['OnFailureUrl']); + $this->assertSame('http://example.com/notify', $data['TransferUrl']); + } + + public function testSendData() + { + $data = $this->request->getData(); + $response = $this->request->sendData($data); + $this->assertSame('Omnipay\Ecopayz\Message\PurchaseResponse', get_class($response)); } } diff --git a/tests/Omnipay/Ecopayz/Message/PurchaseResponseTest.php b/tests/Omnipay/Ecopayz/Message/PurchaseResponseTest.php index 3ebff808..326ab1ea 100644 --- a/tests/Omnipay/Ecopayz/Message/PurchaseResponseTest.php +++ b/tests/Omnipay/Ecopayz/Message/PurchaseResponseTest.php @@ -1,13 +1,16 @@ getMockRequest(), array( + $request = $this->getMockRequest(); + $request->shouldReceive('getTestMode'); + + $response = new PurchaseResponse($request, array( 'PaymentPageID' => '100', 'MerchantAccountNumber' => '100001', 'CustomerIdAtMerchant' => '1123456789', @@ -19,9 +22,10 @@ public function testResult() )); $this->assertFalse($response->isSuccessful()); + $this->assertTrue($response->isRedirect()); $this->assertNull($response->getCode()); $this->assertNull($response->getMessage()); - $this->assertSame('https://secure.ecopayz.com/PrivateArea/WithdrawOnlineTransfer.aspx?PaymentPageID=100&MerchantAccountNumber=100001&CustomerIdAtMerchant=1123456789&TxID=TX4567890&Amount=12.34&Currency=EUR&MerchantFreeText=Free+Text+Description&Checksum=84bbad2a636aa9226c03f17ff813a181', $response->getRedirectUrl()); + $this->assertSame('https://myaccount.payz.com/purchase/request?PaymentPageID=100&MerchantAccountNumber=100001&CustomerIdAtMerchant=1123456789&TxID=TX4567890&Amount=12.34&Currency=EUR&MerchantFreeText=Free+Text+Description&Checksum=84bbad2a636aa9226c03f17ff813a181', $response->getRedirectUrl()); $this->assertSame('GET', $response->getRedirectMethod()); $this->assertNull($response->getRedirectData()); }