PK       ! ¦…s£$  £$    src/DirectPostGateway.phpnu „[µü¤        <?php
namespace Omnipay\NMI;

use Omnipay\Common\AbstractGateway;

/**
 * NMI Direct Post Gateway
 *
 * @link https://www.nmi.com/
 * @link https://gateway.perpetualpayments.com/merchants/resources/integration/integration_portal.php
 */
class DirectPostGateway extends AbstractGateway
{
    /**
     * @return string
     */
    public function getName()
    {
        return 'NMI Direct Post';
    }

    /**
     * @return array
     */
    public function getDefaultParameters()
    {
        return array(
            'username' => '',
            'password' => ''
        );
    }

    /**
     * @return string
     */
    public function getUsername()
    {
        return $this->getParameter('username');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setUsername($value)
    {
        return $this->setParameter('username', $value);
    }

    /**
     * @return string
     */
    public function getPassword()
    {
        return $this->getParameter('password');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setPassword($value)
    {
        return $this->setParameter('password', $value);
    }

    /**
     * @return string
     */
    public function getProcessorId()
    {
        return $this->getParameter('processor_id');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setProcessorId($value)
    {
        return $this->setParameter('processor_id', $value);
    }

    /**
     * @return string
     */
    public function getAuthorizationCode()
    {
        return $this->getParameter('authorization_code');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setAuthorizationCode($value)
    {
        return $this->setParameter('authorization_code', $value);
    }

    /**
     * @return string
     */
    public function getDescriptor()
    {
        return $this->getParameter('descriptor');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptor($value)
    {
        return $this->setParameter('descriptor', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorPhone()
    {
        return $this->getParameter('descriptor_phone');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorPhone($value)
    {
        return $this->setParameter('descriptor_phone', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorAddress()
    {
        return $this->getParameter('descriptor_address');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorAddress($value)
    {
        return $this->setParameter('descriptor_address', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorCity()
    {
        return $this->getParameter('descriptor_city');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorCity($value)
    {
        return $this->setParameter('descriptor_city', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorState()
    {
        return $this->getParameter('descriptor_state');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorState($value)
    {
        return $this->setParameter('descriptor_state', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorPostal()
    {
        return $this->getParameter('descriptor_postal');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorPostal($value)
    {
        return $this->setParameter('descriptor_postal', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorCountry()
    {
        return $this->getParameter('descriptor_country');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorCountry($value)
    {
        return $this->setParameter('descriptor_country', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorMcc()
    {
        return $this->getParameter('descriptor_mcc');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorMcc($value)
    {
        return $this->setParameter('descriptor_mcc', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorMerchantId()
    {
        return $this->getParameter('descriptor_merchant_id');
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setDescriptorMerchantId($value)
    {
        return $this->setParameter('descriptor_merchant_id', $value);
    }

    /**
     * @return string
     */
    public function getDescriptorUrl()
    {
        return $this->getParameter('descriptor_url');
    }

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

    /**
     * @return string
     */
    public function getEndpoint()
    {
        return $this->endpoint;
    }

    /**
     * @param  string $value
     * @return $this
     */
    public function setEndpoint($value)
    {
        return $this->setParameter('endpoint', $value);
    }

    public function purchase(array $parameters = array())
    {
        return $this->sale($parameters);
    }

    public function authorize(array $parameters = array())
    {
        return $this->auth($parameters);
    }

    /**
     * Transaction sales are submitted and immediately flagged for settlement.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostSaleRequest
     */
    public function sale(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostSaleRequest', $parameters);
    }

    /**
     * Transaction authorizations are authorized immediately but are not flagged
     * for settlement. These transactions must be flagged for settlement using
     * the capture transaction type. Authorizations typically remain active for
     * three to seven business days.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostAuthRequest
     */
    public function auth(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostAuthRequest', $parameters);
    }

    /**
     * Transaction captures flag existing authorizations for settlement.
     * Only authorizations can be captured. Captures can be submitted for an
     * amount equal to or less than the original authorization.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostCaptureRequest
     */
    public function capture(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostCaptureRequest', $parameters);
    }

    /**
     * Transaction voids will cancel an existing sale or captured authorization.
     * In addition, non-captured authorizations can be voided to prevent any
     * future capture. Voids can only occur if the transaction has not been settled.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostVoidRequest
     */
    public function void(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostVoidRequest', $parameters);
    }

    /**
     * Transaction refunds will reverse a previously settled transaction. If the
     * transaction has not been settled, it must be voided instead of refunded.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostRefundRequest
     */
    public function refund(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostRefundRequest', $parameters);
    }

    /**
     * Transaction credits apply an amount to the cardholder's card that was not
     * originally processed through the Gateway. In most situations credits are
     * disabled as transaction refunds should be used instead.
     * @param  array  $parameters
     * @return \Omnipay\NMI\Message\DirectPostCreditRequest
     */
    public function credit(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostCreditRequest', $parameters);
    }

    /**
     * @param array $parameters
     * @return \Omnipay\NMI\Message\CreateCardRequest
     */
    public function createCard(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostCreateCardRequest', $parameters);
    }

    /**
     * @param array $parameters
     * @return \Omnipay\NMI\Message\UpdateCardRequest
     */
    public function updateCard(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostUpdateCardRequest', $parameters);
    }

    /**
     * @param array $parameters
     * @return \Omnipay\NMI\Message\DeleteCardRequest
     */
    public function deleteCard(array $parameters = array())
    {
        return $this->createRequest('\Omnipay\NMI\Message\DirectPostDeleteCardRequest', $parameters);
    }
}
PK       ! ©Ú¾ª•  •  %  src/Message/DirectPostAuthRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
 * NMI Direct Post Authorize Request
 */
class DirectPostAuthRequest extends AbstractRequest
{
    protected $type = 'auth';

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

        $data = $this->getBaseData();
        $data['amount'] = $this->getAmount();

        if ($this->getCardReference()) {
            $data['customer_vault_id'] = $this->getCardReference();

            return $data;
        } else {
            $this->getCard()->validate();

            $data['ccnumber'] = $this->getCard()->getNumber();
            $data['ccexp'] = $this->getCard()->getExpiryDate('my');
            $data['cvv'] = $this->getCard()->getCvv();

            return array_merge(
                $data,
                $this->getOrderData(),
                $this->getBillingData(),
                $this->getShippingData()
            );
        }
    }
}
PK       ! ZVwë  ë  (  src/Message/DirectPostCaptureRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Capture Request
*/
class DirectPostCaptureRequest extends AbstractRequest
{
    protected $type = 'capture';

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

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

        if ($this->getAmount() > 0) {
            $data['amount'] = $this->getAmount();
        }

        return $data;
    }
}
PK       ! Nõ­	#  	#    src/Message/AbstractRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Abstract Request
*/
abstract class AbstractRequest extends \Omnipay\Common\Message\AbstractRequest
{
    protected $endpoint = 'https://secure.nmi.com/api/transact.php';

    public function getUsername()
    {
        return $this->getParameter('username');
    }

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

    public function getPassword()
    {
        return $this->getParameter('password');
    }

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

    public function getProcessorId()
    {
        return $this->getParameter('processor_id');
    }

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

    public function getAuthorizationCode()
    {
        return $this->getParameter('authorization_code');
    }

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

    public function getDescriptor()
    {
        return $this->getParameter('descriptor');
    }

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

    public function getDescriptorPhone()
    {
        return $this->getParameter('descriptor_phone');
    }

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

    public function getDescriptorAddress()
    {
        return $this->getParameter('descriptor_address');
    }

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

    public function getDescriptorCity()
    {
        return $this->getParameter('descriptor_city');
    }

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

    public function getDescriptorState()
    {
        return $this->getParameter('descriptor_state');
    }

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

    public function getDescriptorPostal()
    {
        return $this->getParameter('descriptor_postal');
    }

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

    public function getDescriptorCountry()
    {
        return $this->getParameter('descriptor_country');
    }

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

    public function getDescriptorMcc()
    {
        return $this->getParameter('descriptor_mcc');
    }

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

    public function getDescriptorMerchantId()
    {
        return $this->getParameter('descriptor_merchant_id');
    }

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

    public function getDescriptorUrl()
    {
        return $this->getParameter('descriptor_url');
    }

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

    public function getOrderId()
    {
        return $this->getParameter('orderid');
    }

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

    public function getOrderDescription()
    {
        return $this->getParameter('orderdescription');
    }

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

    public function getTax()
    {
        return $this->getParameter('tax');
    }

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

    public function getShipping()
    {
        return $this->getParameter('shipping');
    }

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

    public function getPONumber()
    {
        return $this->getParameter('ponumber');
    }

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

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

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

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

        $data['username'] = $this->getUsername();
        $data['password'] = $this->getPassword();

        if ($this->getProcessorId()) {
            $data['processor_id'] = $this->getProcessorId();
        }

        if ($this->getAuthorizationCode()) {
            $data['authorization_code'] = $this->getAuthorizationCode();
        }

        if ($this->getDescriptor()) {
            $data['descriptor'] = $this->getDescriptor();
        }

        if ($this->getDescriptorPhone()) {
            $data['descriptor_phone'] = $this->getDescriptorPhone();
        }

        if ($this->getDescriptorAddress()) {
            $data['descriptor_address'] = $this->getDescriptorAddress();
        }

        if ($this->getDescriptorCity()) {
            $data['descriptor_city'] = $this->getDescriptorCity();
        }

        if ($this->getDescriptorState()) {
            $data['descriptor_state'] = $this->getDescriptorState();
        }

        if ($this->getDescriptorPostal()) {
            $data['descriptor_postal'] = $this->getDescriptorPostal();
        }

        if ($this->getDescriptorCountry()) {
            $data['descriptor_country'] = $this->getDescriptorCountry();
        }

        if ($this->getDescriptorMcc()) {
            $data['descriptor_mcc'] = $this->getDescriptorMcc();
        }

        if ($this->getDescriptorMerchantId()) {
            $data['descriptor_merchant_id'] = $this->getDescriptorMerchantId();
        }

        if ($this->getDescriptorUrl()) {
            $data['descriptor_url'] = $this->getDescriptorUrl();
        }

        return $data;
    }

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

        $data['orderid'] = $this->getOrderId();
        $data['orderdescription'] = $this->getOrderDescription();
        $data['tax'] = $this->getTax();
        $data['shipping'] = $this->getShipping();
        $data['ponumber'] = $this->getPONumber();
        $data['ipaddress'] = $this->getClientIp();
        if ($this->getCurrency()) {
            $data['currency'] = $this->getCurrency();
        }

        return $data;
    }

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

        if ($card = $this->getCard()) {
            $data['firstname'] = $card->getBillingFirstName();
            $data['lastname'] = $card->getBillingLastName();
            $data['company'] = $card->getBillingCompany();
            $data['address1'] = $card->getBillingAddress1();
            $data['address2'] = $card->getBillingAddress2();
            $data['city'] = $card->getBillingCity();
            $data['state'] = $card->getBillingState();
            $data['zip'] = $card->getBillingPostcode();
            $data['country'] = $card->getBillingCountry();
            $data['phone'] = $card->getBillingPhone();
            $data['fax'] = $card->getBillingFax();
            $data['email'] = $card->getEmail();
            // $data['website'] = $card->getWebsite();
        }

        return $data;
    }

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

        if ($card = $this->getCard()) {
            $data['shipping_firstname'] = $card->getShippingFirstName();
            $data['shipping_lastname'] = $card->getShippingLastName();
            $data['shipping_company'] = $card->getShippingCompany();
            $data['shipping_address1'] = $card->getShippingAddress1();
            $data['shipping_address2'] = $card->getShippingAddress2();
            $data['shipping_city'] = $card->getShippingCity();
            $data['shipping_state'] = $card->getShippingState();
            $data['shipping_zip'] = $card->getShippingPostcode();
            $data['shipping_country'] = $card->getShippingCountry();
            $data['shipping_email'] = $card->getEmail();
        }

        return $data;
    }

    public function sendData($data)
    {
        $httpResponse = $this->httpClient->post($this->getEndpoint(), null, $data)->send();

        return $this->response = new DirectPostResponse($this, $httpResponse->getBody());
    }

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

    public function getEndpoint()
    {
        return $this->endpoint;
    }
}
PK       ! µtq­Ñ   Ñ   +  src/Message/DirectPostUpdateCardRequest.phpnu „[µü¤        <?php

namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Update Card Request
*/
class DirectPostUpdateCardRequest extends DirectPostCreateCardRequest
{
    protected $customer_vault = 'update_customer';
}
PK       ! 1Ñ=J¨   ¨   %  src/Message/DirectPostSaleRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Sale Request
*/
class DirectPostSaleRequest extends DirectPostAuthRequest
{
    protected $type = 'sale';
}
PK       ! EÝEºÛ  Û  "  src/Message/DirectPostResponse.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

use Omnipay\Common\Message\AbstractResponse;
use Omnipay\Common\Message\RequestInterface;
use Omnipay\Common\Exception\InvalidResponseException;

/**
* NMI Direct Post Response
*/
class DirectPostResponse extends AbstractResponse
{
    public function __construct(RequestInterface $request, $data)
    {
        $this->request = $request;
        parse_str($data, $this->data);
    }

    public function isSuccessful()
    {
        return '1' === $this->getCode();
    }

    public function getCode()
    {
        return trim($this->data['response']);
    }

    public function getResponseCode()
    {
        return trim($this->data['response_code']);
    }

    public function getMessage()
    {
        return trim($this->data['responsetext']);
    }

    public function getAuthorizationCode()
    {
        return trim($this->data['authcode']);
    }

    public function getAVSResponse()
    {
        return trim($this->data['avsresponse']);
    }

    public function getCVVResponse()
    {
        return trim($this->data['cvvresponse']);
    }

    public function getOrderId()
    {
        return trim($this->data['orderid']);
    }

    public function getTransactionReference()
    {
        return trim($this->data['transactionid']);
    }

    public function getCardReference()
    {
        if (isset($this->data['customer_vault_id'])) {
            return trim($this->data['customer_vault_id']);
        }

        return null;
    }
}
PK       ! ­z/á    +  src/Message/DirectPostCreateCardRequest.phpnu „[µü¤        <?php

namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Create Card Request
*/
class DirectPostCreateCardRequest extends AbstractRequest
{
    protected $customer_vault = 'add_customer';

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

        $data = $this->getBaseData();

        $data['ccnumber'] = $this->getCard()->getNumber();
        $data['ccexp'] = $this->getCard()->getExpiryDate('my');
        $data['payment'] = 'creditcard';

        if ('update_customer' === $this->customer_vault) {
            $data['customer_vault_id'] = $this->getCardReference();
        }

        return array_merge(
            $data,
            $this->getBillingData(),
            $this->getShippingData()
        );
    }
}
PK       ! 9êÍ5    %  src/Message/DirectPostVoidRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Void Request
*/
class DirectPostVoidRequest extends AbstractRequest
{
    protected $type = 'void';

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

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

        return $data;
    }
}
PK       ! ¾ÿY™  ™  +  src/Message/DirectPostDeleteCardRequest.phpnu „[µü¤        <?php

namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Delete Card Request
*/
class DirectPostDeleteCardRequest extends AbstractRequest
{
    protected $customer_vault = 'delete_customer';

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

        $data = $this->getBaseData();

        $data['customer_vault_id'] = $this->getCardReference();

        return $data;
    }
}
PK       ! L¥}ó±   ±   '  src/Message/DirectPostRefundRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Refund Request
*/
class DirectPostRefundRequest extends DirectPostCaptureRequest
{
    protected $type = 'refund';
}
PK       ! piw®   ®   '  src/Message/DirectPostCreditRequest.phpnu „[µü¤        <?php
namespace Omnipay\NMI\Message;

/**
* NMI Direct Post Credit Request
*/
class DirectPostCreditRequest extends DirectPostAuthRequest
{
    protected $type = 'credit';
}
PK       ! ÎU_  _    composer.jsonnu „[µü¤        {
    "name": "mfauveau/omnipay-nmi",
    "type": "library",
    "description": "NMI (Network Merchants Inc.) driver for the Omnipay PHP payment processing library",
    "keywords": [
        "gateway",
        "merchant",
        "omnipay",
        "pay",
        "payment",
        "purchase",
        "nmi",
        "durango",
        "network",
        "inc"
    ],
    "homepage": "https://github.com/mfauveau/omnipay-nmi",
    "license": "MIT",
    "authors": [
        {
            "name": "Matthieu Fauveau",
            "email": "mfauveau@gmail.com"
        }
    ],
    "autoload": {
        "psr-4": { "Omnipay\\NMI\\" : "src/" }
    },
    "require": {
        "omnipay/common": "~2.0"
    },
    "require-dev": {
        "omnipay/tests": "~2.0"
    },
    "extra": {
        "branch-alias": {
            "dev-master": "2.0.x-dev"
        }
    }
}
PK         ! ¦…s£$  £$                  src/DirectPostGateway.phpnu „[µü¤        PK         ! ©Ú¾ª•  •  %            ì$  src/Message/DirectPostAuthRequest.phpnu „[µü¤        PK         ! ZVwë  ë  (            Ö(  src/Message/DirectPostCaptureRequest.phpnu „[µü¤        PK         ! Nõ­	#  	#              +  src/Message/AbstractRequest.phpnu „[µü¤        PK         ! µtq­Ñ   Ñ   +            qN  src/Message/DirectPostUpdateCardRequest.phpnu „[µü¤        PK         ! 1Ñ=J¨   ¨   %            O  src/Message/DirectPostSaleRequest.phpnu „[µü¤        PK         ! EÝEºÛ  Û  "            šP  src/Message/DirectPostResponse.phpnu „[µü¤        PK         ! ­z/á    +            ÇV  src/Message/DirectPostCreateCardRequest.phpnu „[µü¤        PK         ! 9êÍ5    %            1Z  src/Message/DirectPostVoidRequest.phpnu „[µü¤        PK         ! ¾ÿY™  ™  +            \  src/Message/DirectPostDeleteCardRequest.phpnu „[µü¤        PK         ! L¥}ó±   ±   '            ù]  src/Message/DirectPostRefundRequest.phpnu „[µü¤        PK         ! piw®   ®   '            _  src/Message/DirectPostCreditRequest.phpnu „[µü¤        PK         ! ÎU_  _              `  composer.jsonnu „[µü¤        PK        ¢c    