Skip to content

Commit

Permalink
Merge pull request #7 from kynx/feature/additional-request-types
Browse files Browse the repository at this point in the history
Implement all standard functions
  • Loading branch information
barryvdh authored Sep 18, 2017
2 parents cc603bd + b68a018 commit 72bd3b9
Show file tree
Hide file tree
Showing 11 changed files with 413 additions and 153 deletions.
80 changes: 58 additions & 22 deletions src/Gateway.php
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
<?php

namespace Omnipay\Dummy;

use Omnipay\Common\AbstractGateway;

/**
* Dummy Gateway
*
* This gateway is useful for testing. It simply authorizes any payment made using a valid
* credit card number and expiry.
* This gateway is useful for testing. It implements all the functions listed in \Omnipay\Common\GatewayInterface
* and allows both successful and failed responses based on the input.
*
* Any card number which passes the Luhn algorithm and ends in an even number is authorized,
* for example: 4242424242424242
* For authorize(), purchase(), and createCard() functions ...
*
* Any card number which passes the Luhn algorithm and ends in an odd number is declined,
* for example: 4111111111111111
* Any card number which passes the Luhn algorithm and ends in an even number is authorized,
* for example: 4242424242424242
*
* ### Example
* Any card number which passes the Luhn algorithm and ends in an odd number is declined,
* for example: 4111111111111111
*
* For capture(), completeAuthorize(), completePurchase(), refund(), and void() functions...
* A transactionReference option is required. If the transactionReference contains 'fail', the
* request fails. For any other values, the request succeeds
*
* For updateCard() and deleteCard() functions...
* A cardReference field is required. If the cardReference contains 'fail', the
* request fails. For all other values, it succeeds.
*
* ### Example
* <code>
* // Create a gateway for the Dummy Gateway
* // (routes to GatewayFactory::create)
Expand Down Expand Up @@ -65,25 +73,53 @@ public function getDefaultParameters()
return array();
}

/**
* Create an authorize request.
*
* @param array $parameters
* @return \Omnipay\Dummy\Message\AuthorizeRequest
*/
public function authorize(array $parameters = array())
{
return $this->createRequest('\Omnipay\Dummy\Message\AuthorizeRequest', $parameters);
return $this->createRequest('\Omnipay\Dummy\Message\CreditCardRequest', $parameters);
}

/**
* Create a purchase request.
*
* @param array $parameters
* @return \Omnipay\Dummy\Message\AuthorizeRequest
*/
public function purchase(array $parameters = array())
{
return $this->authorize($parameters);
return $this->createRequest('\Omnipay\Dummy\Message\CreditCardRequest', $parameters);
}

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

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

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

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

public function void(array $parameters = array())
{
return $this->createRequest('\Omnipay\Dummy\Message\TransactionReferenceRequest', $parameters);
}

public function createCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Dummy\Message\CreditCardRequest', $parameters);
}

public function updateCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Dummy\Message\CardReferenceRequest', $parameters);
}

public function deleteCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Dummy\Message\CardReferenceRequest', $parameters);
}
}
66 changes: 0 additions & 66 deletions src/Message/AuthorizeRequest.php

This file was deleted.

28 changes: 28 additions & 0 deletions src/Message/CardReferenceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
namespace Omnipay\Dummy\Message;

use Omnipay\Common\Message\AbstractRequest;
use Omnipay\Common\Message\ResponseInterface;

/**
* Dummy UpdateCard/DeleteCard Request
*
* This is the request that will be called for any transaction which submits a cardReference.
*/
class CardReferenceRequest extends AbstractRequest
{
public function getData()
{
$this->validate('cardReference');
return array('cardReference' => $this->getCardReference());
}

public function sendData($data)
{
$data['reference'] = $this->getCardReference();
$data['success'] = 0 === substr($this->getCardReference(), -1, 1) % 2;
$data['message'] = $data['success'] ? 'Success' : 'Failure';

return $this->response = new Response($this, $data);
}
}
32 changes: 32 additions & 0 deletions src/Message/CreditCardRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php
namespace Omnipay\Dummy\Message;

use Omnipay\Common\Message\AbstractRequest;
use Omnipay\Common\Message\ResponseInterface;

/**
* Dummy Authorize/Purchase Request
*
* This is the request that will be called for any transaction which submits a credit card,
* including `authorize` and `purchase`
*/
class CreditCardRequest extends AbstractRequest
{
public function getData()
{
$this->validate('amount', 'card');

$this->getCard()->validate();

return array('amount' => $this->getAmount());
}

public function sendData($data)
{
$data['reference'] = uniqid();
$data['success'] = 0 === substr($this->getCard()->getNumber(), -1, 1) % 2;
$data['message'] = $data['success'] ? 'Success' : 'Failure';

return $this->response = new Response($this, $data);
}
}
11 changes: 10 additions & 1 deletion src/Message/Response.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?php

namespace Omnipay\Dummy\Message;

use Omnipay\Common\Message\AbstractResponse;
Expand All @@ -23,6 +22,16 @@ public function getTransactionReference()
return isset($this->data['reference']) ? $this->data['reference'] : null;
}

public function getTransactionId()
{
return isset($this->data['reference']) ? $this->data['reference'] : null;
}

public function getCardReference()
{
return isset($this->data['reference']) ? $this->data['reference'] : null;
}

public function getMessage()
{
return isset($this->data['message']) ? $this->data['message'] : null;
Expand Down
28 changes: 28 additions & 0 deletions src/Message/TransactionReferenceRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
namespace Omnipay\Dummy\Message;

use Omnipay\Common\Message\AbstractRequest;
use Omnipay\Common\Message\ResponseInterface;

/**
* Dummy Complete/Capture/Void/Refund Request
*
* This is the request that will be called for any transaction which submits a transactionReference.
*/
class TransactionReferenceRequest extends AbstractRequest
{
public function getData()
{
$this->validate('transactionReference');
return array('transactionReference' => $this->getTransactionReference());
}

public function sendData($data)
{
$data['reference'] = $this->getTransactionReference();
$data['success'] = strpos($this->getTransactionReference(), 'fail') !== false ? false : true;
$data['message'] = $data['success'] ? 'Success' : 'Failure';

return $this->response = new Response($this, $data);
}
}
Loading

0 comments on commit 72bd3b9

Please sign in to comment.