Skip to content
9 changes: 9 additions & 0 deletions .idea/codeStyleSettings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

784 changes: 784 additions & 0 deletions .idea/workspace.xml

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
bootstrap="tests/bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
Expand All @@ -11,7 +11,7 @@
syntaxCheck="false">
<testsuites>
<testsuite name="Omnipay Test Suite">
<directory>./tests/</directory>
<directory suffix="Test.php">./tests/</directory>
</testsuite>
</testsuites>
<listeners>
Expand Down
76 changes: 76 additions & 0 deletions src/HostedGateway.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php

namespace Omnipay\NetBanx;

use Omnipay\Common\AbstractGateway;

/**
* NetBanx Hosted Payment Class
*
*/
class HostedGateway extends AbstractGateway
{
public function getName()
{
return 'NetBanx Hosted Payments';
}

public function getDefaultParameters()
{
return array(
'keyId' => '',
'keyPassword' => '',
'testMode' => false
);
}

public function authorize(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedAuthorizeRequest', $parameters);
}

public function purchase(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedPurchaseRequest', $parameters);
}

public function completeAuthorize(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedCompleteAuthorizeRequest', $parameters);
}

public function completePurchase(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedCompletePurchaseRequest', $parameters);
}

public function capture(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedCaptureRequest', $parameters);
}

public function refund(array $parameters = array())
{
return $this->createRequest('\Omnipay\NetBanx\Message\HostedRefundRequest', $parameters);
}

public function setKeyId($value)
{
return $this->setParameter('keyId', $value);
}

public function getKeyId()
{
return $this->getParameter('keyId');
}

public function setKeyPassword($value)
{
return $this->setParameter('keyPassword', $value);
}

public function getKeyPassword()
{
return $this->getParameter('keyPassword');
}
}
74 changes: 74 additions & 0 deletions src/Message/HostedAbstractRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?php

namespace Omnipay\NetBanx\Message;

use Guzzle\Http\Message\RequestInterface;

abstract class HostedAbstractRequest extends \Omnipay\Common\Message\AbstractRequest
{
protected $liveEndpoint = 'https://api.netbanx.com/hosted/v1';
protected $testEndpoint = 'https://api.test.netbanx.com/hosted/v1';

public function setKeyId($value)
{
return $this->setParameter('keyId', $value);
}

public function getKeyId()
{
return $this->getParameter('keyId');
}

public function setKeyPassword($value)
{
return $this->setParameter('keyPassword', $value);
}

public function getKeyPassword()
{
return $this->getParameter('keyPassword');
}

public function sendRequest($action, $data = null, $method = RequestInterface::POST)
{
// don't throw exceptions for 4xx errors, need the data for error messages
$this->httpClient->getEventDispatcher()->addListener(
'request.error',
function ($event) {
if ($event['response']->isClientError()) {
$event->stopPropagation();
}
}
);

$username = $this->getKeyId();
$password = $this->getKeyPassword();
$base64 = base64_encode($username.':'.$password);

$url = $this->getEndpoint().$action;

$headers = array(
'Authorization' => 'Basic '.$base64,
'Content-Type' => 'application/json'
);

// For some reason the native json encoder built into Guzzle 3 is not encoding the nested data correctly,
// breaking the http request. We need to do it manually.
$data = json_encode($data);

// Return the response we get back
return $this->httpClient->createRequest($method, $url, $headers, $data)->send();
}

public function getEndpoint()
{
return $this->getTestMode() ? $this->testEndpoint : $this->liveEndpoint;
}

protected function getBaseData()
{
$data = array();

return $data;
}
}
58 changes: 58 additions & 0 deletions src/Message/HostedAbstractResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php

namespace Omnipay\NetBanx\Message;

abstract class HostedAbstractResponse extends \Omnipay\Common\Message\AbstractResponse
{
public function getRedirectMethod()
{
return "GET";

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use singlequotes here and in other files

}

public function isSuccessful()
{
$successful = (isset($this->data['transaction']['status'])
&& $this->data['transaction']['status'] == 'success');

return !$this->isRedirect() && !isset($this->data['error']) && $successful;
}

public function getMessage()
{
$message = null;

if (isset($this->data['transaction']['confirmationNumber'])) {
$message = $this->data['transaction']['confirmationNumber'];
}

if (isset($this->data['transaction']['errorMessage'])) {
$message = $this->data['transaction']['errorMessage'];
}

if (isset($this->data['error']['message'])) {
$message = $this->data['error']['message'];
}

return $message;
}

public function getCode()
{
$code = null;

if (isset($this->data['transaction']['errorCode'])) {
$code = $this->data['transaction']['errorCode'];
}

if (isset($this->data['error']['code'])) {
$code = $this->data['error']['code'];
}

return $code;
}

public function getTransactionReference()
{
return isset($this->data['id']) ? $this->data['id'] : null;
}
}
16 changes: 16 additions & 0 deletions src/Message/HostedAuthorizeRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace Omnipay\NetBanx\Message;

class HostedAuthorizeRequest extends HostedPurchaseRequest
{

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove extra empty line

public function getData()
{
$data = parent::getData();

$data['extendedOptions'][] = array('key' => 'authType', 'value' => 'auth');

return $data;
}
}
32 changes: 32 additions & 0 deletions src/Message/HostedCaptureRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace Omnipay\NetBanx\Message;

class HostedCaptureRequest extends HostedAbstractRequest
{

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove extra empty line

public function getData()
{
$this->validate('amount', 'transactionReference', 'transactionId');

$data = parent::getBaseData();

$data['amount'] = $this->getAmountInteger();
$data['merchantRefNum'] = $this->getTransactionId();

return $data;
}

public function sendData($data)
{
$httpResponse = $this->sendRequest($this->getEndpointAction(), null, 'POST');
$responseData = json_decode($httpResponse->getBody(true), true);

return $this->response = new HostedCaptureResponse($this, $responseData);
}

public function getEndpointAction()
{
return "/orders/".$this->getTransactionReference()."/settlement";
}
}
38 changes: 38 additions & 0 deletions src/Message/HostedCaptureResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace Omnipay\NetBanx\Message;

class HostedCaptureResponse extends HostedAbstractResponse
{
public function isSuccessful()
{
$successfulTransaction = (isset($this->data['authType']) && $this->data['authType'] == 'settlement');

return !$this->isRedirect() && !isset($this->data['error']) && $successfulTransaction;
}

public function isRedirect()
{
return false;
}

public function getMessage()
{
$message = null;

if (isset($this->data['confirmationNumber'])) {
$message = $this->data['confirmationNumber'];
}

if (isset($this->data['error']['message'])) {
$message = $this->data['error']['message'];
}

return $message;
}

public function getRedirectData()
{
return null;
}
}
7 changes: 7 additions & 0 deletions src/Message/HostedCompleteAuthorizeRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace Omnipay\NetBanx\Message;

class HostedCompleteAuthorizeRequest extends HostedCompletePurchaseRequest
{
}
31 changes: 31 additions & 0 deletions src/Message/HostedCompletePurchaseRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace Omnipay\NetBanx\Message;

class HostedCompletePurchaseRequest extends HostedAbstractRequest
{

public function getData()
{
$this->validate('transactionReference');

$data = parent::getBaseData();

$data['transactionReference'] = $this->getTransactionReference();

return $data;
}

public function sendData($data)
{
$httpResponse = $this->sendRequest($this->getEndpointAction(), null, 'GET');
$responseData = json_decode($httpResponse->getBody(true), true);

return $this->response = new HostedPurchaseResponse($this, $responseData);
}

public function getEndpointAction()
{
return "/orders/".$this->getTransactionReference();
}
}
Loading