One Hat Cyber Team
Your IP:
216.73.216.102
Server IP:
198.54.114.155
Server:
Linux server71.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
Server Software:
LiteSpeed
PHP Version:
5.6.40
Create File
|
Create Folder
Execute
Dir :
~
/
home
/
fluxyjvi
/
www
/
assets
/
images
/
View File Name :
Common.tar
GatewayInterface.php 0000644 00000006620 15107435650 0010511 0 ustar 00 <?php /** * Payment gateway interface */ namespace Omnipay\Common; /** * Payment gateway interface * * This interface class defines the standard functions that any * Omnipay gateway needs to define. * * * @method \Omnipay\Common\Message\NotificationInterface acceptNotification(array $options = array()) (Optional method) * Receive and handle an instant payment notification (IPN) * @method \Omnipay\Common\Message\RequestInterface authorize(array $options = array()) (Optional method) * Authorize an amount on the customers card * @method \Omnipay\Common\Message\RequestInterface completeAuthorize(array $options = array()) (Optional method) * Handle return from off-site gateways after authorization * @method \Omnipay\Common\Message\RequestInterface capture(array $options = array()) (Optional method) * Capture an amount you have previously authorized * @method \Omnipay\Common\Message\RequestInterface purchase(array $options = array()) (Optional method) * Authorize and immediately capture an amount on the customers card * @method \Omnipay\Common\Message\RequestInterface completePurchase(array $options = array()) (Optional method) * Handle return from off-site gateways after purchase * @method \Omnipay\Common\Message\RequestInterface refund(array $options = array()) (Optional method) * Refund an already processed transaction * @method \Omnipay\Common\Message\RequestInterface fetchTransaction(array $options = []) (Optional method) * Fetches transaction information * @method \Omnipay\Common\Message\RequestInterface void(array $options = array()) (Optional method) * Generally can only be called up to 24 hours after submitting a transaction * @method \Omnipay\Common\Message\RequestInterface createCard(array $options = array()) (Optional method) * The returned response object includes a cardReference, which can be used for future transactions * @method \Omnipay\Common\Message\RequestInterface updateCard(array $options = array()) (Optional method) * Update a stored card * @method \Omnipay\Common\Message\RequestInterface deleteCard(array $options = array()) (Optional method) * Delete a stored card */ interface GatewayInterface { /** * Get gateway display name * * This can be used by carts to get the display name for each gateway. * @return string */ public function getName(); /** * Get gateway short name * * This name can be used with GatewayFactory as an alias of the gateway class, * to create new instances of this gateway. * @return string */ public function getShortName(); /** * Define gateway parameters, in the following format: * * array( * 'username' => '', // string variable * 'testMode' => false, // boolean variable * 'landingPage' => array('billing', 'login'), // enum variable, first item is default * ); * @return array */ public function getDefaultParameters(); /** * Initialize gateway with parameters * @return $this */ public function initialize(array $parameters = array()); /** * Get all gateway parameters * @return array */ public function getParameters(); } GatewayFactory.php 0000644 00000004367 15107435650 0010226 0 ustar 00 <?php /** * Omnipay Gateway Factory class */ namespace Omnipay\Common; use Omnipay\Common\Exception\RuntimeException; use Omnipay\Common\Http\ClientInterface; use Symfony\Component\HttpFoundation\Request as HttpRequest; /** * Omnipay Gateway Factory class * * This class abstracts a set of gateways that can be independently * registered, accessed, and used. * * Note that static calls to the Omnipay class are routed to this class by * the static call router (__callStatic) in Omnipay. * * Example: * * <code> * // Create a gateway for the PayPal ExpressGateway * // (routes to GatewayFactory::create) * $gateway = Omnipay::create('ExpressGateway'); * </code> * */ class GatewayFactory { /** * Internal storage for all available gateways * * @var array */ private $gateways = array(); /** * All available gateways * * @return array An array of gateway names */ public function all() { return $this->gateways; } /** * Replace the list of available gateways * * @param array $gateways An array of gateway names */ public function replace(array $gateways) { $this->gateways = $gateways; } /** * Register a new gateway * * @param string $className Gateway name */ public function register($className) { if (!in_array($className, $this->gateways)) { $this->gateways[] = $className; } } /** * Create a new gateway instance * * @param string $class Gateway name * @param ClientInterface|null $httpClient A HTTP Client implementation * @param HttpRequest|null $httpRequest A Symfony HTTP Request implementation * @throws RuntimeException If no such gateway is found * @return GatewayInterface An object of class $class is created and returned */ public function create($class, ClientInterface $httpClient = null, HttpRequest $httpRequest = null) { $class = Helper::getGatewayClassName($class); if (!class_exists($class)) { throw new RuntimeException("Class '$class' not found"); } return new $class($httpClient, $httpRequest); } } Exception/BadMethodCallException.php 0000644 00000000256 15107435650 0013526 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Bad Method Call Exception */ class BadMethodCallException extends \BadMethodCallException implements OmnipayException { } Exception/InvalidRequestException.php 0000644 00000000345 15107435650 0014041 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Invalid Request Exception * * Thrown when a request is invalid or missing required fields. */ class InvalidRequestException extends \Exception implements OmnipayException { } Exception/RuntimeException.php 0000644 00000000232 15107435650 0012520 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Runtime Exception */ class RuntimeException extends \RuntimeException implements OmnipayException { } Exception/InvalidCreditCardException.php 0000644 00000000360 15107435650 0014412 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Invalid Credit Card Exception * * Thrown when a credit card is invalid or missing required fields. */ class InvalidCreditCardException extends \Exception implements OmnipayException { } Exception/InvalidResponseException.php 0000644 00000000717 15107435650 0014212 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Invalid Response exception. * * Thrown when a gateway responded with invalid or unexpected data (for example, a security hash did not match). */ class InvalidResponseException extends \Exception implements OmnipayException { public function __construct($message = "Invalid response from payment gateway", $code = 0, $previous = null) { parent::__construct($message, $code, $previous); } } Exception/OmnipayException.php 0000644 00000000171 15107435650 0012513 0 ustar 00 <?php namespace Omnipay\Common\Exception; /** * Omnipay Exception marker interface */ interface OmnipayException { } Item.php 0000644 00000003766 15107435650 0006175 0 ustar 00 <?php /** * Cart Item */ namespace Omnipay\Common; use Symfony\Component\HttpFoundation\ParameterBag; /** * Cart Item * * This class defines a single cart item in the Omnipay system. * */ class Item implements ItemInterface { use ParametersTrait; /** * Create a new item with the specified parameters * * @param array|null $parameters An array of parameters to set on the new object */ public function __construct(array $parameters = null) { $this->initialize($parameters); } /** * Initialize this item with the specified parameters * * @param array|null $parameters An array of parameters to set on this object * @return $this Item */ public function initialize(array $parameters = null) { $this->parameters = new ParameterBag; Helper::initialize($this, $parameters); return $this; } /** * {@inheritDoc} */ public function getName() { return $this->getParameter('name'); } /** * Set the item name */ public function setName($value) { return $this->setParameter('name', $value); } /** * {@inheritDoc} */ public function getDescription() { return $this->getParameter('description'); } /** * Set the item description */ public function setDescription($value) { return $this->setParameter('description', $value); } /** * {@inheritDoc} */ public function getQuantity() { return $this->getParameter('quantity'); } /** * Set the item quantity */ public function setQuantity($value) { return $this->setParameter('quantity', $value); } /** * {@inheritDoc} */ public function getPrice() { return $this->getParameter('price'); } /** * Set the item price */ public function setPrice($value) { return $this->setParameter('price', $value); } } AbstractGateway.php 0000644 00000020203 15107435650 0010345 0 ustar 00 <?php /** * Base payment gateway class */ namespace Omnipay\Common; use Omnipay\Common\Http\Client; use Omnipay\Common\Http\ClientInterface; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request as HttpRequest; /** * Base payment gateway class * * This abstract class should be extended by all payment gateways * throughout the Omnipay system. It enforces implementation of * the GatewayInterface interface and defines various common attributes * and methods that all gateways should have. * * Example: * * <code> * // Initialise the gateway * $gateway->initialize(...); * * // Get the gateway parameters. * $parameters = $gateway->getParameters(); * * // Create a credit card object * $card = new CreditCard(...); * * // Do an authorisation transaction on the gateway * if ($gateway->supportsAuthorize()) { * $gateway->authorize(...); * } else { * throw new \Exception('Gateway does not support authorize()'); * } * </code> * * For further code examples see the *omnipay-example* repository on github. * */ abstract class AbstractGateway implements GatewayInterface { use ParametersTrait { setParameter as traitSetParameter; getParameter as traitGetParameter; } /** * @var ClientInterface */ protected $httpClient; /** * @var \Symfony\Component\HttpFoundation\Request */ protected $httpRequest; /** * Create a new gateway instance * * @param ClientInterface $httpClient A HTTP client to make API calls with * @param HttpRequest $httpRequest A Symfony HTTP request object */ public function __construct(ClientInterface $httpClient = null, HttpRequest $httpRequest = null) { $this->httpClient = $httpClient ?: $this->getDefaultHttpClient(); $this->httpRequest = $httpRequest ?: $this->getDefaultHttpRequest(); $this->initialize(); } /** * Get the short name of the Gateway * * @return string */ public function getShortName() { return Helper::getGatewayShortName(get_class($this)); } /** * Initialize this gateway with default parameters * * @param array $parameters * @return $this */ public function initialize(array $parameters = array()) { $this->parameters = new ParameterBag; // set default parameters foreach ($this->getDefaultParameters() as $key => $value) { if (is_array($value)) { $this->parameters->set($key, reset($value)); } else { $this->parameters->set($key, $value); } } Helper::initialize($this, $parameters); return $this; } /** * @return array */ public function getDefaultParameters() { return array(); } /** * @param string $key * @return mixed */ public function getParameter($key) { return $this->traitGetParameter($key); } /** * @param string $key * @param mixed $value * @return $this */ public function setParameter($key, $value) { return $this->traitSetParameter($key, $value); } /** * @return boolean */ public function getTestMode() { return $this->getParameter('testMode'); } /** * @param boolean $value * @return $this */ public function setTestMode($value) { return $this->setParameter('testMode', $value); } /** * @return string */ public function getCurrency() { return strtoupper($this->getParameter('currency')); } /** * @param string $value * @return $this */ public function setCurrency($value) { return $this->setParameter('currency', $value); } /** * Supports Authorize * * @return boolean True if this gateway supports the authorize() method */ public function supportsAuthorize() { return method_exists($this, 'authorize'); } /** * Supports Complete Authorize * * @return boolean True if this gateway supports the completeAuthorize() method */ public function supportsCompleteAuthorize() { return method_exists($this, 'completeAuthorize'); } /** * Supports Capture * * @return boolean True if this gateway supports the capture() method */ public function supportsCapture() { return method_exists($this, 'capture'); } /** * Supports Purchase * * @return boolean True if this gateway supports the purchase() method */ public function supportsPurchase() { return method_exists($this, 'purchase'); } /** * Supports Complete Purchase * * @return boolean True if this gateway supports the completePurchase() method */ public function supportsCompletePurchase() { return method_exists($this, 'completePurchase'); } /** * Supports Fetch Transaction * * @return boolean True if this gateway supports the fetchTransaction() method */ public function supportsFetchTransaction() { return method_exists($this, 'fetchTransaction'); } /** * Supports Refund * * @return boolean True if this gateway supports the refund() method */ public function supportsRefund() { return method_exists($this, 'refund'); } /** * Supports Void * * @return boolean True if this gateway supports the void() method */ public function supportsVoid() { return method_exists($this, 'void'); } /** * Supports AcceptNotification * * @return boolean True if this gateway supports the acceptNotification() method */ public function supportsAcceptNotification() { return method_exists($this, 'acceptNotification'); } /** * Supports CreateCard * * @return boolean True if this gateway supports the create() method */ public function supportsCreateCard() { return method_exists($this, 'createCard'); } /** * Supports DeleteCard * * @return boolean True if this gateway supports the delete() method */ public function supportsDeleteCard() { return method_exists($this, 'deleteCard'); } /** * Supports UpdateCard * * @return boolean True if this gateway supports the update() method */ public function supportsUpdateCard() { return method_exists($this, 'updateCard'); } /** * Create and initialize a request object * * This function is usually used to create objects of type * Omnipay\Common\Message\AbstractRequest (or a non-abstract subclass of it) * and initialise them with using existing parameters from this gateway. * * Example: * * <code> * class MyRequest extends \Omnipay\Common\Message\AbstractRequest {}; * * class MyGateway extends \Omnipay\Common\AbstractGateway { * function myRequest($parameters) { * $this->createRequest('MyRequest', $parameters); * } * } * * // Create the gateway object * $gw = Omnipay::create('MyGateway'); * * // Create the request object * $myRequest = $gw->myRequest($someParameters); * </code> * * @param string $class The request class name * @param array $parameters * @return \Omnipay\Common\Message\AbstractRequest */ protected function createRequest($class, array $parameters) { $obj = new $class($this->httpClient, $this->httpRequest); return $obj->initialize(array_replace($this->getParameters(), $parameters)); } /** * Get the global default HTTP client. * * @return ClientInterface */ protected function getDefaultHttpClient() { return new Client(); } /** * Get the global default HTTP request. * * @return HttpRequest */ protected function getDefaultHttpRequest() { return HttpRequest::createFromGlobals(); } } ItemBag.php 0000644 00000003357 15107435650 0006603 0 ustar 00 <?php /** * Cart Item Bag */ namespace Omnipay\Common; /** * Cart Item Bag * * This class defines a bag (multi element set or array) of single cart items * in the Omnipay system. * */ class ItemBag implements \IteratorAggregate, \Countable { /** * Item storage * * * @var array */ protected $items; /** * Constructor * * @param array $items An array of items */ public function __construct(array $items = array()) { $this->replace($items); } /** * Return all the items * * * @return array An array of items */ public function all() { return $this->items; } /** * Replace the contents of this bag with the specified items * * * @param array $items An array of items */ public function replace(array $items = array()) { $this->items = array(); foreach ($items as $item) { $this->add($item); } } /** * Add an item to the bag * * * @param ItemInterface|array $item An existing item, or associative array of item parameters */ public function add($item) { if ($item instanceof ItemInterface) { $this->items[] = $item; } else { $this->items[] = new Item($item); } } /** * Returns an iterator for items * * @return \ArrayIterator An \ArrayIterator instance */ public function getIterator(): \Traversable { return new \ArrayIterator($this->items); } /** * Returns the number of items * * @return int The number of items */ public function count(): int { return count($this->items); } } PaymentMethod.php 0000644 00000002046 15107435650 0010043 0 ustar 00 <?php /** * Payment Method */ namespace Omnipay\Common; /** * Payment Method * * This class defines a payment method to be used in the Omnipay system. * */ class PaymentMethod { /** * The ID of the payment method. Used as the payment method ID in the * Issuer class. * * @var string */ protected $id; /** * The full name of the payment method * * @var string */ protected $name; /** * Create a new PaymentMethod * * @param string $id The identifier of this payment method * @param string $name The name of this payment method */ public function __construct($id, $name) { $this->id = $id; $this->name = $name; } /** * The identifier of this payment method * * @return string */ public function getId() { return $this->id; } /** * The name of this payment method * * @return string */ public function getName() { return $this->name; } } error_log 0000644 00000002516 15107435650 0006473 0 ustar 00 [09-Nov-2025 06:26:43 UTC] PHP Fatal error: Uncaught Error: Attempt to assign property "data" on null in /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code:603 Stack trace: #0 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(2): FM_Config->__construct() #1 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1): eval() #2 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1): eval() #3 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1): eval() #4 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1): eval() #5 /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1): eval() #6 {main} thrown in /home/fluxyjvi/public_html/project/vendor/omnipay/common/src/Common/index.php(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code(1) : eval()'d code on line 603 Issuer.php 0000644 00000002677 15107435650 0006551 0 ustar 00 <?php /** * Issuer */ namespace Omnipay\Common; /** * Issuer * * This class abstracts some functionality around card issuers used in the * Omnipay system. */ class Issuer { /** * The identifier of the issuer. * * @var string */ protected $id; /** * The full name of the issuer. * * @var string */ protected $name; /** * The ID of a payment method that the issuer belongs to. ** * @var string */ protected $paymentMethod; /** * Create a new Issuer * * @param string $id The identifier of this issuer * @param string $name The name of this issuer * @param string|null $paymentMethod The ID of a payment method this issuer belongs to */ public function __construct($id, $name, $paymentMethod = null) { $this->id = $id; $this->name = $name; $this->paymentMethod = $paymentMethod; } /** * The identifier of this issuer * * @return string */ public function getId() { return $this->id; } /** * The name of this issuer * * @return string */ public function getName() { return $this->name; } /** * The ID of a payment method this issuer belongs to * * @return string */ public function getPaymentMethod() { return $this->paymentMethod; } } CreditCard.php 0000644 00000102531 15107435650 0007271 0 ustar 00 <?php /** * Credit Card class */ namespace Omnipay\Common; use DateTime; use DateTimeZone; use Omnipay\Common\Exception\InvalidCreditCardException; use Symfony\Component\HttpFoundation\ParameterBag; /** * Credit Card class * * This class defines and abstracts all of the credit card types used * throughout the Omnipay system. * * Example: * * <code> * // Define credit card parameters, which should look like this * $parameters = [ * 'firstName' => 'Bobby', * 'lastName' => 'Tables', * 'number' => '4444333322221111', * 'cvv' => '123', * 'expiryMonth' => '12', * 'expiryYear' => '2017', * 'email' => 'testcard@gmail.com', * ]; * * // Create a credit card object * $card = new CreditCard($parameters); * </code> * * The full list of card attributes that may be set via the parameter to * *new* is as follows: * * * title * * firstName * * lastName * * name * * company * * address1 * * address2 * * city * * postcode * * state * * country * * phone * * phoneExtension * * fax * * number * * expiryMonth * * expiryYear * * startMonth * * startYear * * cvv * * tracks * * issueNumber * * billingTitle * * billingName * * billingFirstName * * billingLastName * * billingCompany * * billingAddress1 * * billingAddress2 * * billingCity * * billingPostcode * * billingState * * billingCountry * * billingPhone * * billingFax * * shippingTitle * * shippingName * * shippingFirstName * * shippingLastName * * shippingCompany * * shippingAddress1 * * shippingAddress2 * * shippingCity * * shippingPostcode * * shippingState * * shippingCountry * * shippingPhone * * shippingFax * * email * * birthday * * gender * * If any unknown parameters are passed in, they will be ignored. No error is thrown. */ class CreditCard { use ParametersTrait; const BRAND_VISA = 'visa'; const BRAND_MASTERCARD = 'mastercard'; const BRAND_DISCOVER = 'discover'; const BRAND_AMEX = 'amex'; const BRAND_DINERS_CLUB = 'diners_club'; const BRAND_JCB = 'jcb'; const BRAND_SWITCH = 'switch'; const BRAND_SOLO = 'solo'; const BRAND_DANKORT = 'dankort'; const BRAND_MAESTRO = 'maestro'; const BRAND_FORBRUGSFORENINGEN = 'forbrugsforeningen'; const BRAND_LASER = 'laser'; /** * All known/supported card brands, and a regular expression to match them. * * The order of the card brands is important, as some of the regular expressions overlap. * * Note: The fact that a particular card brand has been added to this array does not imply * that a selected gateway will support the card. * * @link https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/credit_card_methods.rb * @var array */ const REGEX_MASTERCARD = '/^(5[1-5]\d{4}|677189)\d{10}$|^2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))\d{12}$/'; protected $supported_cards = array( self::BRAND_VISA => '/^4\d{12}(\d{3})?$/', self::BRAND_MASTERCARD => self::REGEX_MASTERCARD, self::BRAND_DISCOVER => '/^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/', self::BRAND_AMEX => '/^3[47]\d{13}$/', self::BRAND_DINERS_CLUB => '/^3(0[0-5]|[68]\d)\d{11}$/', self::BRAND_JCB => '/^35(28|29|[3-8]\d)\d{12}$/', self::BRAND_SWITCH => '/^6759\d{12}(\d{2,3})?$/', self::BRAND_SOLO => '/^6767\d{12}(\d{2,3})?$/', self::BRAND_DANKORT => '/^5019\d{12}$/', self::BRAND_MAESTRO => '/^(5[06-8]|6\d)\d{10,17}$/', self::BRAND_FORBRUGSFORENINGEN => '/^600722\d{10}$/', self::BRAND_LASER => '/^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/', ); /** * Create a new CreditCard object using the specified parameters * * @param array $parameters An array of parameters to set on the new object */ public function __construct($parameters = null) { $this->initialize($parameters); } /** * All known/supported card brands, and a regular expression to match them. * * Note: The fact that this class knows about a particular card brand does not imply * that your gateway supports it. * * @return array */ public function getSupportedBrands() { return $this->supported_cards; } /** * Set a custom supported card brand with a regular expression to match it. * * Note: The fact that a particular card is known does not imply that your * gateway supports it. * * Set $add_to_front to true if the key should be added to the front of the array * * @param string $name The name of the new supported brand. * @param string $expression The regular expression to check if a card is supported. * @return boolean success */ public function addSupportedBrand($name, $expression) { $known_brands = array_keys($this->supported_cards); if (in_array($name, $known_brands)) { return false; } $this->supported_cards[$name] = $expression; return true; } /** * Initialize the object with parameters. * * If any unknown parameters passed, they will be ignored. * * @param array $parameters An associative array of parameters * @return $this */ public function initialize(array $parameters = null) { $this->parameters = new ParameterBag; Helper::initialize($this, $parameters); return $this; } /** * Set the credit card year. * * The input value is normalised to a 4 digit number. * * @param string $key Parameter key, e.g. 'expiryYear' * @param mixed $value Parameter value * @return $this */ protected function setYearParameter($key, $value) { // normalize year to four digits if (null === $value || '' === $value) { $value = null; } else { $value = (int) gmdate('Y', gmmktime(0, 0, 0, 1, 1, (int) $value)); } return $this->setParameter($key, $value); } /** * Validate this credit card. If the card is invalid, InvalidCreditCardException is thrown. * * This method is called internally by gateways to avoid wasting time with an API call * when the credit card is clearly invalid. * * Generally if you want to validate the credit card yourself with custom error * messages, you should use your framework's validation library, not this method. * * @return void * @throws Exception\InvalidRequestException * @throws InvalidCreditCardException */ public function validate() { $requiredParameters = array( 'number' => 'credit card number', 'expiryMonth' => 'expiration month', 'expiryYear' => 'expiration year' ); foreach ($requiredParameters as $key => $val) { if (!$this->getParameter($key)) { throw new InvalidCreditCardException("The $val is required"); } } if ($this->getExpiryDate('Ym') < gmdate('Ym')) { throw new InvalidCreditCardException('Card has expired'); } if (!Helper::validateLuhn($this->getNumber())) { throw new InvalidCreditCardException('Card number is invalid'); } if (!is_null($this->getNumber()) && !preg_match('/^\d{12,19}$/i', $this->getNumber())) { throw new InvalidCreditCardException('Card number should have 12 to 19 digits'); } } /** * Get Card Title. * * @return string */ public function getTitle() { return $this->getBillingTitle(); } /** * Set Card Title. * * @param string $value Parameter value * @return $this */ public function setTitle($value) { $this->setBillingTitle($value); $this->setShippingTitle($value); return $this; } /** * Get Card First Name. * * @return string */ public function getFirstName() { return $this->getBillingFirstName(); } /** * Set Card First Name (Billing and Shipping). * * @param string $value Parameter value * @return $this */ public function setFirstName($value) { $this->setBillingFirstName($value); $this->setShippingFirstName($value); return $this; } /** * Get Card Last Name. * * @return string */ public function getLastName() { return $this->getBillingLastName(); } /** * Set Card Last Name (Billing and Shipping). * * @param string $value Parameter value * @return $this */ public function setLastName($value) { $this->setBillingLastName($value); $this->setShippingLastName($value); return $this; } /** * Get Card Name. * * @return string */ public function getName() { return $this->getBillingName(); } /** * Set Card Name (Billing and Shipping). * * @param string $value Parameter value * @return $this */ public function setName($value) { $this->setBillingName($value); $this->setShippingName($value); return $this; } /** * Get Card Number. * * @return string */ public function getNumber() { return $this->getParameter('number'); } /** * Set Card Number * * Non-numeric characters are stripped out of the card number, so * it's safe to pass in strings such as "4444-3333 2222 1111" etc. * * @param string $value Parameter value * @return $this */ public function setNumber($value) { // strip non-numeric characters return $this->setParameter('number', preg_replace('/\D/', '', $value)); } /** * Get the last 4 digits of the card number. * * @return string */ public function getNumberLastFour() { return substr($this->getNumber(), -4, 4) ?: null; } /** * Returns a masked credit card number with only the last 4 chars visible * * @param string $mask Character to use in place of numbers * @return string */ public function getNumberMasked($mask = 'X') { $maskLength = strlen($this->getNumber()) - 4; return str_repeat($mask, $maskLength) . $this->getNumberLastFour(); } /** * Credit Card Brand * * Iterates through known/supported card brands to determine the brand of this card * * @return string */ public function getBrand() { foreach ($this->getSupportedBrands() as $brand => $val) { if (preg_match($val, $this->getNumber())) { return $brand; } } } /** * Get the card expiry month. * * @return int */ public function getExpiryMonth() { return $this->getParameter('expiryMonth'); } /** * Sets the card expiry month. * * @param string $value * @return $this */ public function setExpiryMonth($value) { return $this->setParameter('expiryMonth', (int) $value); } /** * Get the card expiry year. * * @return int */ public function getExpiryYear() { return $this->getParameter('expiryYear'); } /** * Sets the card expiry year. * * @param string $value * @return $this */ public function setExpiryYear($value) { return $this->setYearParameter('expiryYear', $value); } /** * Get the card expiry date, using the specified date format string. * * @param string $format * * @return string */ public function getExpiryDate($format) { return gmdate($format, gmmktime(0, 0, 0, $this->getExpiryMonth(), 1, $this->getExpiryYear())); } /** * Get the card start month. * * @return string */ public function getStartMonth() { return $this->getParameter('startMonth'); } /** * Sets the card start month. * * @param string $value * @return $this */ public function setStartMonth($value) { return $this->setParameter('startMonth', (int) $value); } /** * Get the card start year. * * @return int */ public function getStartYear() { return $this->getParameter('startYear'); } /** * Sets the card start year. * * @param string $value * @return $this */ public function setStartYear($value) { return $this->setYearParameter('startYear', $value); } /** * Get the card start date, using the specified date format string * * @param string $format * * @return string */ public function getStartDate($format) { return gmdate($format, gmmktime(0, 0, 0, $this->getStartMonth(), 1, $this->getStartYear())); } /** * Get the card CVV. * * @return string */ public function getCvv() { return $this->getParameter('cvv'); } /** * Sets the card CVV. * * @param string $value * @return $this */ public function setCvv($value) { return $this->setParameter('cvv', $value); } /** * Get raw data for all tracks on the credit card magnetic strip. * * @return string */ public function getTracks() { return $this->getParameter('tracks'); } /** * Get raw data for track 1 on the credit card magnetic strip. * * @return string|null */ public function getTrack1() { return $this->getTrackByPattern('/\%B\d{1,19}\^.{2,26}\^\d{4}\d*\?/'); } /** * Get raw data for track 2 on the credit card magnetic strip. * * @return string|null */ public function getTrack2() { return $this->getTrackByPattern('/;\d{1,19}=\d{4}\d*\?/'); } /** * Get raw data for a track on the credit card magnetic strip based on the pattern for track 1 or 2. * * @param $pattern * @return string|null */ protected function getTrackByPattern($pattern) { if ($tracks = $this->getTracks()) { if (preg_match($pattern, $tracks, $matches) === 1) { return $matches[0]; } } } /** * Sets raw data from all tracks on the credit card magnetic strip. Used by gateways that support card-present * transactions. * * @param $value * @return $this */ public function setTracks($value) { return $this->setParameter('tracks', $value); } /** * Get the card issue number. * * @return string */ public function getIssueNumber() { return $this->getParameter('issueNumber'); } /** * Sets the card issue number. * * @param string $value * @return $this */ public function setIssueNumber($value) { return $this->setParameter('issueNumber', $value); } /** * Get the card billing title. * * @return string */ public function getBillingTitle() { return $this->getParameter('billingTitle'); } /** * Sets the card billing title. * * @param string $value * @return $this */ public function setBillingTitle($value) { return $this->setParameter('billingTitle', $value); } /** * Get the card billing name. * * @return string */ public function getBillingName() { return trim($this->getBillingFirstName() . ' ' . $this->getBillingLastName()); } /** * Split the full name in the first and last name. * * @param $fullName * @return array with first and lastname */ protected function listFirstLastName($fullName) { $names = explode(' ', $fullName, 2); return [$names[0], isset($names[1]) ? $names[1] : null]; } /** * Sets the card billing name. * * @param string $value * @return $this */ public function setBillingName($value) { $names = $this->listFirstLastName($value); $this->setBillingFirstName($names[0]); $this->setBillingLastName($names[1]); return $this; } /** * Get the first part of the card billing name. * * @return string */ public function getBillingFirstName() { return $this->getParameter('billingFirstName'); } /** * Sets the first part of the card billing name. * * @param string $value * @return $this */ public function setBillingFirstName($value) { return $this->setParameter('billingFirstName', $value); } /** * Get the last part of the card billing name. * * @return string */ public function getBillingLastName() { return $this->getParameter('billingLastName'); } /** * Sets the last part of the card billing name. * * @param string $value * @return $this */ public function setBillingLastName($value) { return $this->setParameter('billingLastName', $value); } /** * Get the billing company name. * * @return string */ public function getBillingCompany() { return $this->getParameter('billingCompany'); } /** * Sets the billing company name. * * @param string $value * @return $this */ public function setBillingCompany($value) { return $this->setParameter('billingCompany', $value); } /** * Get the billing address, line 1. * * @return string */ public function getBillingAddress1() { return $this->getParameter('billingAddress1'); } /** * Sets the billing address, line 1. * * @param string $value * @return $this */ public function setBillingAddress1($value) { return $this->setParameter('billingAddress1', $value); } /** * Get the billing address, line 2. * * @return string */ public function getBillingAddress2() { return $this->getParameter('billingAddress2'); } /** * Sets the billing address, line 2. * * @param string $value * @return $this */ public function setBillingAddress2($value) { return $this->setParameter('billingAddress2', $value); } /** * Get the billing city. * * @return string */ public function getBillingCity() { return $this->getParameter('billingCity'); } /** * Sets billing city. * * @param string $value * @return $this */ public function setBillingCity($value) { return $this->setParameter('billingCity', $value); } /** * Get the billing postcode. * * @return string */ public function getBillingPostcode() { return $this->getParameter('billingPostcode'); } /** * Sets the billing postcode. * * @param string $value * @return $this */ public function setBillingPostcode($value) { return $this->setParameter('billingPostcode', $value); } /** * Get the billing state. * * @return string */ public function getBillingState() { return $this->getParameter('billingState'); } /** * Sets the billing state. * * @param string $value * @return $this */ public function setBillingState($value) { return $this->setParameter('billingState', $value); } /** * Get the billing country name. * * @return string */ public function getBillingCountry() { return $this->getParameter('billingCountry'); } /** * Sets the billing country name. * * @param string $value * @return $this */ public function setBillingCountry($value) { return $this->setParameter('billingCountry', $value); } /** * Get the billing phone number. * * @return string */ public function getBillingPhone() { return $this->getParameter('billingPhone'); } /** * Sets the billing phone number. * * @param string $value * @return $this */ public function setBillingPhone($value) { return $this->setParameter('billingPhone', $value); } /** * Get the billing phone number extension. * * @return string */ public function getBillingPhoneExtension() { return $this->getParameter('billingPhoneExtension'); } /** * Sets the billing phone number extension. * * @param string $value * @return $this */ public function setBillingPhoneExtension($value) { return $this->setParameter('billingPhoneExtension', $value); } /** * Get the billing fax number. * * @return string */ public function getBillingFax() { return $this->getParameter('billingFax'); } /** * Sets the billing fax number. * * @param string $value * @return $this */ public function setBillingFax($value) { return $this->setParameter('billingFax', $value); } /** * Get the title of the card shipping name. * * @return string */ public function getShippingTitle() { return $this->getParameter('shippingTitle'); } /** * Sets the title of the card shipping name. * * @param string $value * @return $this */ public function setShippingTitle($value) { return $this->setParameter('shippingTitle', $value); } /** * Get the card shipping name. * * @return string */ public function getShippingName() { return trim($this->getShippingFirstName() . ' ' . $this->getShippingLastName()); } /** * Sets the card shipping name. * * @param string $value * @return $this */ public function setShippingName($value) { $names = $this->listFirstLastName($value); $this->setShippingFirstName($names[0]); $this->setShippingLastName($names[1]); return $this; } /** * Get the first part of the card shipping name. * * @return string */ public function getShippingFirstName() { return $this->getParameter('shippingFirstName'); } /** * Sets the first part of the card shipping name. * * @param string $value * @return $this */ public function setShippingFirstName($value) { return $this->setParameter('shippingFirstName', $value); } /** * Get the last part of the card shipping name. * * @return string */ public function getShippingLastName() { return $this->getParameter('shippingLastName'); } /** * Sets the last part of the card shipping name. * * @param string $value * @return $this */ public function setShippingLastName($value) { return $this->setParameter('shippingLastName', $value); } /** * Get the shipping company name. * * @return string */ public function getShippingCompany() { return $this->getParameter('shippingCompany'); } /** * Sets the shipping company name. * * @param string $value * @return $this */ public function setShippingCompany($value) { return $this->setParameter('shippingCompany', $value); } /** * Get the shipping address, line 1. * * @return string */ public function getShippingAddress1() { return $this->getParameter('shippingAddress1'); } /** * Sets the shipping address, line 1. * * @param string $value * @return $this */ public function setShippingAddress1($value) { return $this->setParameter('shippingAddress1', $value); } /** * Get the shipping address, line 2. * * @return string */ public function getShippingAddress2() { return $this->getParameter('shippingAddress2'); } /** * Sets the shipping address, line 2. * * @param string $value * @return $this */ public function setShippingAddress2($value) { return $this->setParameter('shippingAddress2', $value); } /** * Get the shipping city. * * @return string */ public function getShippingCity() { return $this->getParameter('shippingCity'); } /** * Sets the shipping city. * * @param string $value * @return $this */ public function setShippingCity($value) { return $this->setParameter('shippingCity', $value); } /** * Get the shipping postcode. * * @return string */ public function getShippingPostcode() { return $this->getParameter('shippingPostcode'); } /** * Sets the shipping postcode. * * @param string $value * @return $this */ public function setShippingPostcode($value) { return $this->setParameter('shippingPostcode', $value); } /** * Get the shipping state. * * @return string */ public function getShippingState() { return $this->getParameter('shippingState'); } /** * Sets the shipping state. * * @param string $value * @return $this */ public function setShippingState($value) { return $this->setParameter('shippingState', $value); } /** * Get the shipping country. * * @return string */ public function getShippingCountry() { return $this->getParameter('shippingCountry'); } /** * Sets the shipping country. * * @param string $value * @return $this */ public function setShippingCountry($value) { return $this->setParameter('shippingCountry', $value); } /** * Get the shipping phone number. * * @return string */ public function getShippingPhone() { return $this->getParameter('shippingPhone'); } /** * Sets the shipping phone number. * * @param string $value * @return $this */ public function setShippingPhone($value) { return $this->setParameter('shippingPhone', $value); } /** * Get the shipping phone number extension. * * @return string */ public function getShippingPhoneExtension() { return $this->getParameter('shippingPhoneExtension'); } /** * Sets the shipping phone number extension. * * @param string $value * @return $this */ public function setShippingPhoneExtension($value) { return $this->setParameter('shippingPhoneExtension', $value); } /** * Get the shipping fax number. * * @return string */ public function getShippingFax() { return $this->getParameter('shippingFax'); } /** * Sets the shipping fax number. * * @param string $value * @return $this */ public function setShippingFax($value) { return $this->setParameter('shippingFax', $value); } /** * Get the billing address, line 1. * * @return string */ public function getAddress1() { return $this->getParameter('billingAddress1'); } /** * Sets the billing and shipping address, line 1. * * @param string $value * @return $this */ public function setAddress1($value) { $this->setParameter('billingAddress1', $value); $this->setParameter('shippingAddress1', $value); return $this; } /** * Get the billing address, line 2. * * @return string */ public function getAddress2() { return $this->getParameter('billingAddress2'); } /** * Sets the billing and shipping address, line 2. * * @param string $value * @return $this */ public function setAddress2($value) { $this->setParameter('billingAddress2', $value); $this->setParameter('shippingAddress2', $value); return $this; } /** * Get the billing city. * * @return string */ public function getCity() { return $this->getParameter('billingCity'); } /** * Sets the billing and shipping city. * * @param string $value * @return $this */ public function setCity($value) { $this->setParameter('billingCity', $value); $this->setParameter('shippingCity', $value); return $this; } /** * Get the billing postcode. * * @return string */ public function getPostcode() { return $this->getParameter('billingPostcode'); } /** * Sets the billing and shipping postcode. * * @param string $value * @return $this */ public function setPostcode($value) { $this->setParameter('billingPostcode', $value); $this->setParameter('shippingPostcode', $value); return $this; } /** * Get the billing state. * * @return string */ public function getState() { return $this->getParameter('billingState'); } /** * Sets the billing and shipping state. * * @param string $value * @return $this */ public function setState($value) { $this->setParameter('billingState', $value); $this->setParameter('shippingState', $value); return $this; } /** * Get the billing country. * * @return string */ public function getCountry() { return $this->getParameter('billingCountry'); } /** * Sets the billing and shipping country. * * @param string $value * @return $this */ public function setCountry($value) { $this->setParameter('billingCountry', $value); $this->setParameter('shippingCountry', $value); return $this; } /** * Get the billing phone number. * * @return string */ public function getPhone() { return $this->getParameter('billingPhone'); } /** * Sets the billing and shipping phone number. * * @param string $value * @return $this */ public function setPhone($value) { $this->setParameter('billingPhone', $value); $this->setParameter('shippingPhone', $value); return $this; } /** * Get the billing phone number extension. * * @return string */ public function getPhoneExtension() { return $this->getParameter('billingPhoneExtension'); } /** * Sets the billing and shipping phone number extension. * * @param string $value * @return $this */ public function setPhoneExtension($value) { $this->setParameter('billingPhoneExtension', $value); $this->setParameter('shippingPhoneExtension', $value); return $this; } /** * Get the billing fax number.. * * @return string */ public function getFax() { return $this->getParameter('billingFax'); } /** * Sets the billing and shipping fax number. * * @param string $value * @return $this */ public function setFax($value) { $this->setParameter('billingFax', $value); $this->setParameter('shippingFax', $value); return $this; } /** * Get the card billing company name. * * @return string */ public function getCompany() { return $this->getParameter('billingCompany'); } /** * Sets the billing and shipping company name. * * @param string $value * @return $this */ public function setCompany($value) { $this->setParameter('billingCompany', $value); $this->setParameter('shippingCompany', $value); return $this; } /** * Get the cardholder's email address. * * @return string */ public function getEmail() { return $this->getParameter('email'); } /** * Sets the cardholder's email address. * * @param string $value * @return $this */ public function setEmail($value) { return $this->setParameter('email', $value); } /** * Get the cardholder's birthday. * * @return string */ public function getBirthday($format = 'Y-m-d') { $value = $this->getParameter('birthday'); return $value ? $value->format($format) : null; } /** * Sets the cardholder's birthday. * * @param string $value * @return $this */ public function setBirthday($value) { if ($value) { $value = new DateTime($value, new DateTimeZone('UTC')); } else { $value = null; } return $this->setParameter('birthday', $value); } /** * Get the cardholder's gender. * * @return string */ public function getGender() { return $this->getParameter('gender'); } /** * Sets the cardholder's gender. * * @param string $value * @return $this */ public function setGender($value) { return $this->setParameter('gender', $value); } } ItemInterface.php 0000644 00000001034 15107435650 0010000 0 ustar 00 <?php /** * Cart Item interface */ namespace Omnipay\Common; /** * Cart Item interface * * This interface defines the functionality that all cart items in * the Omnipay system are to have. */ interface ItemInterface { /** * Name of the item */ public function getName(); /** * Description of the item */ public function getDescription(); /** * Quantity of the item */ public function getQuantity(); /** * Price of the item */ public function getPrice(); } Helper.php 0000644 00000010615 15107435650 0006505 0 ustar 00 <?php /** * Helper class */ namespace Omnipay\Common; use InvalidArgumentException; /** * Helper class * * This class defines various static utility functions that are in use * throughout the Omnipay system. */ class Helper { /** * Convert a string to camelCase. Strings already in camelCase will not be harmed. * * @param string $str The input string * @return string camelCased output string */ public static function camelCase($str) { $str = self::convertToLowercase($str); return preg_replace_callback( '/_([a-z])/', function ($match) { return strtoupper($match[1]); }, $str ); } /** * Convert strings with underscores to be all lowercase before camelCase is preformed. * * @param string $str The input string * @return string The output string */ protected static function convertToLowercase($str) { $explodedStr = explode('_', $str); $lowercasedStr = []; if (count($explodedStr) > 1) { foreach ($explodedStr as $value) { $lowercasedStr[] = strtolower($value); } $str = implode('_', $lowercasedStr); } return $str; } /** * Validate a card number according to the Luhn algorithm. * * @param string $number The card number to validate * @return boolean True if the supplied card number is valid */ public static function validateLuhn($number) { $str = ''; foreach (array_reverse(str_split($number)) as $i => $c) { $str .= $i % 2 ? $c * 2 : $c; } return array_sum(str_split($str)) % 10 === 0; } /** * Initialize an object with a given array of parameters * * Parameters are automatically converted to camelCase. Any parameters which do * not match a setter on the target object are ignored. * * @param mixed $target The object to set parameters on * @param array $parameters An array of parameters to set */ public static function initialize($target, array $parameters = null) { if ($parameters) { foreach ($parameters as $key => $value) { $method = 'set'.ucfirst(static::camelCase($key)); if (method_exists($target, $method)) { $target->$method($value); } } } } /** * Resolve a gateway class to a short name. * * The short name can be used with GatewayFactory as an alias of the gateway class, * to create new instances of a gateway. */ public static function getGatewayShortName($className) { if (0 === strpos($className, '\\')) { $className = substr($className, 1); } if (0 === strpos($className, 'Omnipay\\')) { return trim(str_replace('\\', '_', substr($className, 8, -7)), '_'); } return '\\'.$className; } /** * Resolve a short gateway name to a full namespaced gateway class. * * Class names beginning with a namespace marker (\) are left intact. * Non-namespaced classes are expected to be in the \Omnipay namespace, e.g.: * * \Custom\Gateway => \Custom\Gateway * \Custom_Gateway => \Custom_Gateway * Stripe => \Omnipay\Stripe\Gateway * PayPal\Express => \Omnipay\PayPal\ExpressGateway * PayPal_Express => \Omnipay\PayPal\ExpressGateway * * @param string $shortName The short gateway name or the FQCN * @return string The fully namespaced gateway class name */ public static function getGatewayClassName($shortName) { // If the class starts with \ or Omnipay\, assume it's a FQCN if (0 === strpos($shortName, '\\') || 0 === strpos($shortName, 'Omnipay\\')) { return $shortName; } // Check if the class exists and implements the Gateway Interface, if so -> FCQN if (is_subclass_of($shortName, GatewayInterface::class, true)) { return $shortName; } // replace underscores with namespace marker, PSR-0 style $shortName = str_replace('_', '\\', $shortName); if (false === strpos($shortName, '\\')) { $shortName .= '\\'; } return '\\Omnipay\\'.$shortName.'Gateway'; } } ParametersTrait.php 0000644 00000003727 15107435650 0010403 0 ustar 00 <?php namespace Omnipay\Common; use Omnipay\Common\Exception\InvalidRequestException; use Symfony\Component\HttpFoundation\ParameterBag; trait ParametersTrait { /** * Internal storage of all of the parameters. * * @var ParameterBag */ protected $parameters; /** * Set one parameter. * * @param string $key Parameter key * @param mixed $value Parameter value * @return $this */ protected function setParameter($key, $value) { $this->parameters->set($key, $value); return $this; } /** * Get one parameter. * * @param string $key Parameter key * @return mixed A single parameter value. */ protected function getParameter($key) { return $this->parameters->get($key); } /** * Get all parameters. * * @return array An associative array of parameters. */ public function getParameters() { return $this->parameters->all(); } /** * Initialize the object with parameters. * * If any unknown parameters passed, they will be ignored. * * @param array $parameters An associative array of parameters * @return $this. */ public function initialize(array $parameters = []) { $this->parameters = new ParameterBag; Helper::initialize($this, $parameters); return $this; } /** * Validate the request. * * This method is called internally by gateways to avoid wasting time with an API call * when the request is clearly invalid. * * @param string ... a variable length list of required parameters * @throws InvalidRequestException */ public function validate(...$args) { foreach ($args as $key) { $value = $this->parameters->get($key); if (! isset($value)) { throw new InvalidRequestException("The $key parameter is required"); } } } } Http/Client.php 0000644 00000004276 15107435650 0007431 0 ustar 00 <?php namespace Omnipay\Common\Http; use function GuzzleHttp\Psr7\str; use Http\Client\HttpClient; use Http\Discovery\HttpClientDiscovery; use Http\Discovery\MessageFactoryDiscovery; use Http\Message\RequestFactory; use Omnipay\Common\Http\Exception\NetworkException; use Omnipay\Common\Http\Exception\RequestException; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use Psr\Http\Message\UriInterface; class Client implements ClientInterface { /** * The Http Client which implements `public function sendRequest(RequestInterface $request)` * Note: Will be changed to PSR-18 when released * * @var HttpClient */ private $httpClient; /** * @var RequestFactory */ private $requestFactory; public function __construct($httpClient = null, RequestFactory $requestFactory = null) { $this->httpClient = $httpClient ?: HttpClientDiscovery::find(); $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find(); } /** * @param $method * @param $uri * @param array $headers * @param string|array|resource|StreamInterface|null $body * @param string $protocolVersion * @return ResponseInterface * @throws \Http\Client\Exception */ public function request( $method, $uri, array $headers = [], $body = null, $protocolVersion = '1.1' ) { $request = $this->requestFactory->createRequest($method, $uri, $headers, $body, $protocolVersion); return $this->sendRequest($request); } /** * @param RequestInterface $request * @return ResponseInterface * @throws \Http\Client\Exception */ private function sendRequest(RequestInterface $request) { try { return $this->httpClient->sendRequest($request); } catch (\Http\Client\Exception\NetworkException $networkException) { throw new NetworkException($networkException->getMessage(), $request, $networkException); } catch (\Exception $exception) { throw new RequestException($exception->getMessage(), $request, $exception); } } } Http/Exception.php 0000644 00000001235 15107435650 0010141 0 ustar 00 <?php namespace Omnipay\Common\Http; use Psr\Http\Message\RequestInterface; use Throwable; abstract class Exception extends \RuntimeException { /** @var RequestInterface */ protected $request; public function __construct($message, RequestInterface $request, $previous = null) { $this->request = $request; parent::__construct($message, 0, $previous); } /** * Returns the request. * * The request object MAY be a different object from the one passed to ClientInterface::sendRequest() * * @return RequestInterface */ public function getRequest() { return $this->request; } } Http/ClientInterface.php 0000644 00000002047 15107435650 0011244 0 ustar 00 <?php namespace Omnipay\Common\Http; use Omnipay\Common\Http\Exception\NetworkException; use Omnipay\Common\Http\Exception\RequestException; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use Psr\Http\Message\UriInterface; interface ClientInterface { /** * Creates a new PSR-7 request. * * @param string $method * @param string|UriInterface $uri * @param array $headers * @param resource|string|StreamInterface|null $body * @param string $protocolVersion * * @throws RequestException when the HTTP client is passed a request that is invalid and cannot be sent. * @throws NetworkException if there is an error with the network or the remote server cannot be reached. * * @return ResponseInterface */ public function request( $method, $uri, array $headers = [], $body = null, $protocolVersion = '1.1' ); } Http/Exception/RequestException.php 0000644 00000000202 15107435650 0013441 0 ustar 00 <?php namespace Omnipay\Common\Http\Exception; use Omnipay\Common\Http\Exception; class RequestException extends Exception { } Http/Exception/NetworkException.php 0000644 00000000202 15107435650 0013442 0 ustar 00 <?php namespace Omnipay\Common\Http\Exception; use Omnipay\Common\Http\Exception; class NetworkException extends Exception { } Message/AbstractResponse.php 0000644 00000013450 15107435650 0012134 0 ustar 00 <?php /** * Abstract Response */ namespace Omnipay\Common\Message; use Omnipay\Common\Exception\RuntimeException; use Symfony\Component\HttpFoundation\RedirectResponse as HttpRedirectResponse; use Symfony\Component\HttpFoundation\Response as HttpResponse; /** * Abstract Response * * This abstract class implements ResponseInterface and defines a basic * set of functions that all Omnipay Requests are intended to include. * * Objects of this class or a subclass are usually created in the Request * object (subclass of AbstractRequest) as the return parameters from the * send() function. * * Example -- validating and sending a request: * * <code> * $myResponse = $myRequest->send(); * // now do something with the $myResponse object, test for success, etc. * </code> * */ abstract class AbstractResponse implements ResponseInterface { /** * The embodied request object. * * @var RequestInterface */ protected $request; /** * The data contained in the response. * * @var mixed */ protected $data; /** * Constructor * * @param RequestInterface $request the initiating request. * @param mixed $data */ public function __construct(RequestInterface $request, $data) { $this->request = $request; $this->data = $data; } /** * Get the initiating request object. * * @return RequestInterface */ public function getRequest() { return $this->request; } /** * Is the response successful? * * @return boolean */ public function isPending() { return false; } /** * Does the response require a redirect? * * @return boolean */ public function isRedirect() { return false; } /** * Is the response a transparent redirect? * * @return boolean */ public function isTransparentRedirect() { return false; } /** * Is the transaction cancelled by the user? * * @return boolean */ public function isCancelled() { return false; } /** * Get the response data. * * @return mixed */ public function getData() { return $this->data; } /** * Response Message * * @return null|string A response message from the payment gateway */ public function getMessage() { return null; } /** * Response code * * @return null|string A response code from the payment gateway */ public function getCode() { return null; } /** * Gateway Reference * * @return null|string A reference provided by the gateway to represent this transaction */ public function getTransactionReference() { return null; } /** * Get the transaction ID as generated by the merchant website. * * @return string */ public function getTransactionId() { return null; } /** * Gets the redirect target url. * * @return string */ public function getRedirectUrl() { return null; } /** * Get the required redirect method (either GET or POST). * * @return string */ public function getRedirectMethod() { return 'GET'; } /** * Gets the redirect form data array, if the redirect method is POST. * * @return array */ public function getRedirectData() { return []; } /** * Automatically perform any required redirect * * This method is meant to be a helper for simple scenarios. If you want to customize the * redirection page, just call the getRedirectUrl() and getRedirectData() methods directly. * * @return void */ public function redirect() { $this->getRedirectResponse()->send(); } /** * @return HttpRedirectResponse|HttpResponse */ public function getRedirectResponse() { $this->validateRedirect(); if ('GET' === $this->getRedirectMethod()) { return new HttpRedirectResponse($this->getRedirectUrl()); } $hiddenFields = ''; foreach ($this->getRedirectData() as $key => $value) { $hiddenFields .= sprintf( '<input type="hidden" name="%1$s" value="%2$s" />', htmlentities($key, ENT_QUOTES, 'UTF-8', false), htmlentities($value, ENT_QUOTES, 'UTF-8', false) )."\n"; } $output = '<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Redirecting...</title> </head> <body onload="document.forms[0].submit();"> <form action="%1$s" method="post"> <p>Redirecting to payment page...</p> <p> %2$s <input type="submit" value="Continue" /> </p> </form> </body> </html>'; $output = sprintf( $output, htmlentities($this->getRedirectUrl(), ENT_QUOTES, 'UTF-8', false), $hiddenFields ); return new HttpResponse($output); } /** * Validate that the current Response is a valid redirect. * * @return void */ protected function validateRedirect() { if (!$this instanceof RedirectResponseInterface || !$this->isRedirect()) { throw new RuntimeException('This response does not support redirection.'); } if (empty($this->getRedirectUrl())) { throw new RuntimeException('The given redirectUrl cannot be empty.'); } if (!in_array($this->getRedirectMethod(), ['GET', 'POST'])) { throw new RuntimeException('Invalid redirect method "'.$this->getRedirectMethod().'".'); } } } Message/MessageInterface.php 0000644 00000000775 15107435651 0012066 0 ustar 00 <?php /** * Message Interface */ namespace Omnipay\Common\Message; /** * Message Interface * * This interface class defines the standard functions that any Omnipay message * interface needs to be able to provide. */ interface MessageInterface { /** * Get the raw data array for this message. The format of this varies from gateway to * gateway, but will usually be either an associative array, or a SimpleXMLElement. * * @return mixed */ public function getData(); } Message/ResponseInterface.php 0000644 00000002475 15107435651 0012277 0 ustar 00 <?php /** * Response interface */ namespace Omnipay\Common\Message; /** * Response Interface * * This interface class defines the standard functions that any Omnipay response * interface needs to be able to provide. It is an extension of MessageInterface. * */ interface ResponseInterface extends MessageInterface { /** * Get the original request which generated this response * * @return RequestInterface */ public function getRequest(); /** * Is the response successful? * * @return boolean */ public function isSuccessful(); /** * Does the response require a redirect? * * @return boolean */ public function isRedirect(); /** * Is the transaction cancelled by the user? * * @return boolean */ public function isCancelled(); /** * Response Message * * @return null|string A response message from the payment gateway */ public function getMessage(); /** * Response code * * @return null|string A response code from the payment gateway */ public function getCode(); /** * Gateway Reference * * @return null|string A reference provided by the gateway to represent this transaction */ public function getTransactionReference(); } Message/NotificationInterface.php 0000644 00000001574 15107435651 0013126 0 ustar 00 <?php namespace Omnipay\Common\Message; /** * Incoming notification */ interface NotificationInterface extends MessageInterface { const STATUS_COMPLETED = 'completed'; const STATUS_PENDING = 'pending'; const STATUS_FAILED = 'failed'; /** * Gateway Reference * * @return string A reference provided by the gateway to represent this transaction */ public function getTransactionReference(); /** * Was the transaction successful? * * @return string Transaction status, one of {@link NotificationInterface::STATUS_COMPLETED}, * {@link NotificationInterface::STATUS_PENDING}, or {@link NotificationInterface::STATUS_FAILED}. */ public function getTransactionStatus(); /** * Response Message * * @return string A response message from the payment gateway */ public function getMessage(); } Message/FetchIssuersResponseInterface.php 0000644 00000001370 15107435651 0014620 0 ustar 00 <?php /** * Fetch Issuers Response interface */ namespace Omnipay\Common\Message; /** * Fetch Issuers Response interface * * This interface class defines the functionality of a response * that is a "fetch issuers" response. It extends the ResponseInterface * interface class with some extra functions relating to the * specifics of a response to fetch the issuers from the gateway. * This happens when the gateway needs the customer to choose a * card issuer. * */ interface FetchIssuersResponseInterface extends ResponseInterface { /** * Get the returned list of issuers. * * These represent banks which the user must choose between. * * @return \Omnipay\Common\Issuer[] */ public function getIssuers(); } Message/RedirectResponseInterface.php 0000644 00000001722 15107435651 0013753 0 ustar 00 <?php /** * Redirect Response interface */ namespace Omnipay\Common\Message; /** * Redirect Response interface * * This interface class defines the functionality of a response * that is a redirect response. It extends the ResponseInterface * interface class with some extra functions relating to the * specifics of a redirect response from the gateway. * */ interface RedirectResponseInterface extends ResponseInterface { /** * Gets the redirect target url. * * @return string */ public function getRedirectUrl(); /** * Get the required redirect method (either GET or POST). * * @return string */ public function getRedirectMethod(); /** * Gets the redirect form data array, if the redirect method is POST. * * @return array */ public function getRedirectData(); /** * Perform the required redirect. * * @return void */ public function redirect(); } Message/AbstractRequest.php 0000644 00000037773 15107435651 0012005 0 ustar 00 <?php /** * Abstract Request */ namespace Omnipay\Common\Message; use Money\Currencies\ISOCurrencies; use Money\Currency; use Money\Formatter\DecimalMoneyFormatter; use Money\Money; use Money\Number; use Money\Parser\DecimalMoneyParser; use Omnipay\Common\CreditCard; use Omnipay\Common\Exception\InvalidRequestException; use Omnipay\Common\Exception\RuntimeException; use Omnipay\Common\Helper; use Omnipay\Common\Http\Client; use Omnipay\Common\Http\ClientInterface; use Omnipay\Common\ItemBag; use Omnipay\Common\ParametersTrait; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request as HttpRequest; /** * Abstract Request * * This abstract class implements RequestInterface and defines a basic * set of functions that all Omnipay Requests are intended to include. * * Requests of this class are usually created using the createRequest * function of the gateway and then actioned using methods within this * class or a class that extends this class. * * Example -- creating a request: * * <code> * class MyRequest extends \Omnipay\Common\Message\AbstractRequest {}; * * class MyGateway extends \Omnipay\Common\AbstractGateway { * function myRequest($parameters) { * $this->createRequest('MyRequest', $parameters); * } * } * * // Create the gateway object * $gw = Omnipay::create('MyGateway'); * * // Create the request object * $myRequest = $gw->myRequest($someParameters); * </code> * * Example -- validating and sending a request: * * <code> * try { * $myRequest->validate(); * $myResponse = $myRequest->send(); * } catch (InvalidRequestException $e) { * print "Something went wrong: " . $e->getMessage() . "\n"; * } * // now do something with the $myResponse object, test for success, etc. * </code> * */ abstract class AbstractRequest implements RequestInterface { use ParametersTrait { setParameter as traitSetParameter; } /** * The request client. * * @var ClientInterface */ protected $httpClient; /** * The HTTP request object. * * @var \Symfony\Component\HttpFoundation\Request */ protected $httpRequest; /** * An associated ResponseInterface. * * @var ResponseInterface */ protected $response; /** * @var ISOCurrencies */ protected $currencies; /** * @var bool */ protected $zeroAmountAllowed = true; /** * @var bool */ protected $negativeAmountAllowed = false; /** * Create a new Request * * @param ClientInterface $httpClient A HTTP client to make API calls with * @param HttpRequest $httpRequest A Symfony HTTP request object */ public function __construct(ClientInterface $httpClient, HttpRequest $httpRequest) { $this->httpClient = $httpClient; $this->httpRequest = $httpRequest; $this->initialize(); } /** * Initialize the object with parameters. * * If any unknown parameters passed, they will be ignored. * * @param array $parameters An associative array of parameters * * @return $this * @throws RuntimeException */ public function initialize(array $parameters = array()) { if (null !== $this->response) { throw new RuntimeException('Request cannot be modified after it has been sent!'); } $this->parameters = new ParameterBag; Helper::initialize($this, $parameters); return $this; } /** * Set a single parameter * * @param string $key The parameter key * @param mixed $value The value to set * @return $this * @throws RuntimeException if a request parameter is modified after the request has been sent. */ protected function setParameter($key, $value) { if (null !== $this->response) { throw new RuntimeException('Request cannot be modified after it has been sent!'); } return $this->traitSetParameter($key, $value); } /** * Gets the test mode of the request from the gateway. * * @return boolean */ public function getTestMode() { return $this->getParameter('testMode'); } /** * Sets the test mode of the request. * * @param boolean $value True for test mode on. * @return $this */ public function setTestMode($value) { return $this->setParameter('testMode', $value); } /** * Get the card. * * @return CreditCard */ public function getCard() { return $this->getParameter('card'); } /** * Sets the card. * * @param CreditCard $value * @return $this */ public function setCard($value) { if ($value && !$value instanceof CreditCard) { $value = new CreditCard($value); } return $this->setParameter('card', $value); } /** * Get the card token. * * @return string */ public function getToken() { return $this->getParameter('token'); } /** * Sets the card token. * * @param string $value * @return $this */ public function setToken($value) { return $this->setParameter('token', $value); } /** * Get the card reference. * * @return string */ public function getCardReference() { return $this->getParameter('cardReference'); } /** * Sets the card reference. * * @param string $value * @return $this */ public function setCardReference($value) { return $this->setParameter('cardReference', $value); } /** * @return ISOCurrencies */ protected function getCurrencies() { if ($this->currencies === null) { $this->currencies = new ISOCurrencies(); } return $this->currencies; } /** * @param string|int|null $amount * @return null|Money * @throws InvalidRequestException */ private function getMoney($amount = null) { $currencyCode = $this->getCurrency() ?: 'USD'; $currency = new Currency($currencyCode); $amount = $amount !== null ? $amount : $this->getParameter('amount'); if ($amount === null) { return null; } elseif ($amount instanceof Money) { $money = $amount; } elseif (is_integer($amount)) { $money = new Money($amount, $currency); } else { $moneyParser = new DecimalMoneyParser($this->getCurrencies()); $number = Number::fromString($amount); // Check for rounding that may occur if too many significant decimal digits are supplied. $decimal_count = strlen($number->getFractionalPart()); $subunit = $this->getCurrencies()->subunitFor($currency); if ($decimal_count > $subunit) { throw new InvalidRequestException('Amount precision is too high for currency.'); } $money = $moneyParser->parse((string) $number, $currency); } // Check for a negative amount. if (!$this->negativeAmountAllowed && $money->isNegative()) { throw new InvalidRequestException('A negative amount is not allowed.'); } // Check for a zero amount. if (!$this->zeroAmountAllowed && $money->isZero()) { throw new InvalidRequestException('A zero amount is not allowed.'); } return $money; } /** * Validates and returns the formatted amount. * * @throws InvalidRequestException on any validation failure. * @return string The amount formatted to the correct number of decimal places for the selected currency. */ public function getAmount() { $money = $this->getMoney(); if ($money !== null) { $moneyFormatter = new DecimalMoneyFormatter($this->getCurrencies()); return $moneyFormatter->format($money); } } /** * Sets the payment amount. * * @param string|null $value * @return $this */ public function setAmount($value) { return $this->setParameter('amount', $value !== null ? (string) $value : null); } /** * Get the payment amount as an integer. * * @return integer */ public function getAmountInteger() { $money = $this->getMoney(); if ($money !== null) { return (int) $money->getAmount(); } } /** * Sets the payment amount as integer. * * @param int $value * @return $this */ public function setAmountInteger($value) { return $this->setParameter('amount', (int) $value); } /** * Sets the payment amount as integer. * * @param Money $value * @return $this */ public function setMoney(Money $value) { $currency = $value->getCurrency()->getCode(); $this->setCurrency($currency); return $this->setParameter('amount', $value); } /** * Get the payment currency code. * * @return string */ public function getCurrency() { return $this->getParameter('currency'); } /** * Sets the payment currency code. * * @param string $value * @return $this */ public function setCurrency($value) { if ($value !== null) { $value = strtoupper($value); } return $this->setParameter('currency', $value); } /** * Get the payment currency number. * * @return string|null */ public function getCurrencyNumeric() { if (! $this->getCurrency()) { return null; } $currency = new Currency($this->getCurrency()); if ($this->getCurrencies()->contains($currency)) { return (string) $this->getCurrencies()->numericCodeFor($currency); } } /** * Get the number of decimal places in the payment currency. * * @return integer */ public function getCurrencyDecimalPlaces() { if ($this->getCurrency()) { $currency = new Currency($this->getCurrency()); if ($this->getCurrencies()->contains($currency)) { return $this->getCurrencies()->subunitFor($currency); } } return 2; } /** * Format an amount for the payment currency. * * @param string $amount * @return string */ public function formatCurrency($amount) { $money = $this->getMoney((string) $amount); $formatter = new DecimalMoneyFormatter($this->getCurrencies()); return $formatter->format($money); } /** * Get the request description. * * @return string */ public function getDescription() { return $this->getParameter('description'); } /** * Sets the request description. * * @param string $value * @return $this */ public function setDescription($value) { return $this->setParameter('description', $value); } /** * Get the transaction ID. * * The transaction ID is the identifier generated by the merchant website. * * @return string */ public function getTransactionId() { return $this->getParameter('transactionId'); } /** * Sets the transaction ID. * * @param string $value * @return $this */ public function setTransactionId($value) { return $this->setParameter('transactionId', $value); } /** * Get the transaction reference. * * The transaction reference is the identifier generated by the remote * payment gateway. * * @return string */ public function getTransactionReference() { return $this->getParameter('transactionReference'); } /** * Sets the transaction reference. * * @param string $value * @return $this */ public function setTransactionReference($value) { return $this->setParameter('transactionReference', $value); } /** * A list of items in this order * * @return ItemBag|null A bag containing items in this order */ public function getItems() { return $this->getParameter('items'); } /** * Set the items in this order * * @param ItemBag|array $items An array of items in this order * @return $this */ public function setItems($items) { if ($items && !$items instanceof ItemBag) { $items = new ItemBag($items); } return $this->setParameter('items', $items); } /** * Get the client IP address. * * @return string */ public function getClientIp() { return $this->getParameter('clientIp'); } /** * Sets the client IP address. * * @param string $value * @return $this */ public function setClientIp($value) { return $this->setParameter('clientIp', $value); } /** * Get the request return URL. * * @return string */ public function getReturnUrl() { return $this->getParameter('returnUrl'); } /** * Sets the request return URL. * * @param string $value * @return $this */ public function setReturnUrl($value) { return $this->setParameter('returnUrl', $value); } /** * Get the request cancel URL. * * @return string */ public function getCancelUrl() { return $this->getParameter('cancelUrl'); } /** * Sets the request cancel URL. * * @param string $value * @return $this */ public function setCancelUrl($value) { return $this->setParameter('cancelUrl', $value); } /** * Get the request notify URL. * * @return string */ public function getNotifyUrl() { return $this->getParameter('notifyUrl'); } /** * Sets the request notify URL. * * @param string $value * @return $this */ public function setNotifyUrl($value) { return $this->setParameter('notifyUrl', $value); } /** * Get the payment issuer. * * This field is used by some European gateways, and normally represents * the bank where an account is held (separate from the card brand). * * @return string */ public function getIssuer() { return $this->getParameter('issuer'); } /** * Set the payment issuer. * * This field is used by some European gateways, and normally represents * the bank where an account is held (separate from the card brand). * * @param string $value * @return $this */ public function setIssuer($value) { return $this->setParameter('issuer', $value); } /** * Get the payment issuer. * * This field is used by some European gateways, which support * multiple payment providers with a single API. * * @return string */ public function getPaymentMethod() { return $this->getParameter('paymentMethod'); } /** * Set the payment method. * * This field is used by some European gateways, which support * multiple payment providers with a single API. * * @param string $value * @return $this */ public function setPaymentMethod($value) { return $this->setParameter('paymentMethod', $value); } /** * Send the request * * @return ResponseInterface */ public function send() { $data = $this->getData(); return $this->sendData($data); } /** * Get the associated Response. * * @return ResponseInterface */ public function getResponse() { if (null === $this->response) { throw new RuntimeException('You must call send() before accessing the Response!'); } return $this->response; } } Message/FetchPaymentMethodsResponseInterface.php 0000644 00000001511 15107435651 0016121 0 ustar 00 <?php /** * Fetch Payment Methods Response interface */ namespace Omnipay\Common\Message; /** * Fetch Payment Methods Response interface * * This interface class defines the functionality of a response * that is a "fetch payment method" response. It extends the ResponseInterface * interface class with some extra functions relating to the * specifics of a response to fetch the payment method from the gateway. * This happens when the gateway needs the customer to choose a * payment method. * */ interface FetchPaymentMethodsResponseInterface extends ResponseInterface { /** * Get the returned list of payment methods. * * These represent separate payment methods which the user must choose between. * * @return \Omnipay\Common\PaymentMethod[] */ public function getPaymentMethods(); } Message/RequestInterface.php 0000644 00000002071 15107435651 0012121 0 ustar 00 <?php /** * Request Interface */ namespace Omnipay\Common\Message; /** * Request Interface * * This interface class defines the standard functions that any Omnipay request * interface needs to be able to provide. It is an extension of MessageInterface. * */ interface RequestInterface extends MessageInterface { /** * Initialize request with parameters * @param array $parameters The parameters to send */ public function initialize(array $parameters = array()); /** * Get all request parameters * * @return array */ public function getParameters(); /** * Get the response to this request (if the request has been sent) * * @return ResponseInterface */ public function getResponse(); /** * Send the request * * @return ResponseInterface */ public function send(); /** * Send the request with specified data * * @param mixed $data The data to send * @return ResponseInterface */ public function sendData($data); }