Server IP : 66.29.132.124 / Your IP : 18.188.92.6 Web Server : LiteSpeed System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : wavevlvu ( 1524) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/wavevlvu/book24.ng/vendor/omnipay/common/src/Common/ |
Upload File : |
<?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); } }