123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <?php
- namespace Braintree;
- /**
- * Braintree CreditCard module
- * Creates and manages Braintree CreditCards
- *
- * <b>== More information ==</b>
- *
- * For more detailed information on CreditCards, see {@link https://developers.braintreepayments.com/reference/response/credit-card/php https://developers.braintreepayments.com/reference/response/credit-card/php}<br />
- * For more detailed information on CreditCard verifications, see {@link https://developers.braintreepayments.com/reference/response/credit-card-verification/php https://developers.braintreepayments.com/reference/response/credit-card-verification/php}
- *
- * @package Braintree
- * @category Resources
- *
- * @property-read string $billingAddress
- * @property-read string $bin
- * @property-read string $cardType
- * @property-read string $cardholderName
- * @property-read string $createdAt
- * @property-read string $customerId
- * @property-read string $expirationDate
- * @property-read string $expirationMonth
- * @property-read string $expirationYear
- * @property-read string $imageUrl
- * @property-read string $last4
- * @property-read string $maskedNumber
- * @property-read string $token
- * @property-read string $updatedAt
- */
- class CreditCard extends Base
- {
- // Card Type
- const AMEX = 'American Express';
- const CARTE_BLANCHE = 'Carte Blanche';
- const CHINA_UNION_PAY = 'China UnionPay';
- const DINERS_CLUB_INTERNATIONAL = 'Diners Club';
- const DISCOVER = 'Discover';
- const JCB = 'JCB';
- const LASER = 'Laser';
- const MAESTRO = 'Maestro';
- const UK_MAESTRO = 'UK Maestro';
- const MASTER_CARD = 'MasterCard';
- const SOLO = 'Solo';
- const SWITCH_TYPE = 'Switch';
- const VISA = 'Visa';
- const UNKNOWN = 'Unknown';
- // Credit card origination location
- const INTERNATIONAL = "international";
- const US = "us";
- const PREPAID_YES = 'Yes';
- const PREPAID_NO = 'No';
- const PREPAID_UNKNOWN = 'Unknown';
- const PAYROLL_YES = 'Yes';
- const PAYROLL_NO = 'No';
- const PAYROLL_UNKNOWN = 'Unknown';
- const HEALTHCARE_YES = 'Yes';
- const HEALTHCARE_NO = 'No';
- const HEALTHCARE_UNKNOWN = 'Unknown';
- const DURBIN_REGULATED_YES = 'Yes';
- const DURBIN_REGULATED_NO = 'No';
- const DURBIN_REGULATED_UNKNOWN = 'Unknown';
- const DEBIT_YES = 'Yes';
- const DEBIT_NO = 'No';
- const DEBIT_UNKNOWN = 'Unknown';
- const COMMERCIAL_YES = 'Yes';
- const COMMERCIAL_NO = 'No';
- const COMMERCIAL_UNKNOWN = 'Unknown';
- const COUNTRY_OF_ISSUANCE_UNKNOWN = "Unknown";
- const ISSUING_BANK_UNKNOWN = "Unknown";
- const PRODUCT_ID_UNKNOWN = "Unknown";
- /* instance methods */
- /**
- * returns false if default is null or false
- *
- * @return boolean
- */
- public function isDefault()
- {
- return $this->default;
- }
- /**
- * checks whether the card is expired based on the current date
- *
- * @return boolean
- */
- public function isExpired()
- {
- return $this->expired;
- }
- /**
- * checks whether the card is associated with venmo sdk
- *
- * @return boolean
- */
- public function isVenmoSdk()
- {
- return $this->venmoSdk;
- }
- /**
- * sets instance properties from an array of values
- *
- * @access protected
- * @param array $creditCardAttribs array of creditcard data
- * @return void
- */
- protected function _initialize($creditCardAttribs)
- {
- // set the attributes
- $this->_attributes = $creditCardAttribs;
- // map each address into its own object
- $billingAddress = isset($creditCardAttribs['billingAddress']) ?
- Address::factory($creditCardAttribs['billingAddress']) :
- null;
- $subscriptionArray = [];
- if (isset($creditCardAttribs['subscriptions'])) {
- foreach ($creditCardAttribs['subscriptions'] AS $subscription) {
- $subscriptionArray[] = Subscription::factory($subscription);
- }
- }
- $this->_set('subscriptions', $subscriptionArray);
- $this->_set('billingAddress', $billingAddress);
- $this->_set('expirationDate', $this->expirationMonth . '/' . $this->expirationYear);
- $this->_set('maskedNumber', $this->bin . '******' . $this->last4);
- if(isset($creditCardAttribs['verifications']) && count($creditCardAttribs['verifications']) > 0) {
- $verifications = $creditCardAttribs['verifications'];
- usort($verifications, [$this, '_compareCreatedAtOnVerifications']);
- $this->_set('verification', CreditCardVerification::factory($verifications[0]));
- }
- }
- private function _compareCreatedAtOnVerifications($verificationAttrib1, $verificationAttrib2)
- {
- return ($verificationAttrib2['createdAt'] < $verificationAttrib1['createdAt']) ? -1 : 1;
- }
- /**
- * returns false if comparing object is not a CreditCard,
- * or is a CreditCard with a different id
- *
- * @param object $otherCreditCard customer to compare against
- * @return boolean
- */
- public function isEqual($otherCreditCard)
- {
- return !($otherCreditCard instanceof self) ? false : $this->token === $otherCreditCard->token;
- }
- /**
- * create a printable representation of the object as:
- * ClassName[property=value, property=value]
- * @return string
- */
- public function __toString()
- {
- return __CLASS__ . '[' .
- Util::attributesToString($this->_attributes) .']';
- }
- /**
- * factory method: returns an instance of CreditCard
- * to the requesting method, with populated properties
- *
- * @ignore
- * @return CreditCard
- */
- public static function factory($attributes)
- {
- $defaultAttributes = [
- 'bin' => '',
- 'expirationMonth' => '',
- 'expirationYear' => '',
- 'last4' => '',
- ];
- $instance = new self();
- $instance->_initialize(array_merge($defaultAttributes, $attributes));
- return $instance;
- }
- // static methods redirecting to gateway
- public static function create($attribs)
- {
- return Configuration::gateway()->creditCard()->create($attribs);
- }
- public static function createNoValidate($attribs)
- {
- return Configuration::gateway()->creditCard()->createNoValidate($attribs);
- }
- public static function createFromTransparentRedirect($queryString)
- {
- return Configuration::gateway()->creditCard()->createFromTransparentRedirect($queryString);
- }
- public static function createCreditCardUrl()
- {
- return Configuration::gateway()->creditCard()->createCreditCardUrl();
- }
- public static function expired()
- {
- return Configuration::gateway()->creditCard()->expired();
- }
- public static function fetchExpired($ids)
- {
- return Configuration::gateway()->creditCard()->fetchExpired($ids);
- }
- public static function expiringBetween($startDate, $endDate)
- {
- return Configuration::gateway()->creditCard()->expiringBetween($startDate, $endDate);
- }
- public static function fetchExpiring($startDate, $endDate, $ids)
- {
- return Configuration::gateway()->creditCard()->fetchExpiring($startDate, $endDate, $ids);
- }
- public static function find($token)
- {
- return Configuration::gateway()->creditCard()->find($token);
- }
- public static function fromNonce($nonce)
- {
- return Configuration::gateway()->creditCard()->fromNonce($nonce);
- }
- public static function credit($token, $transactionAttribs)
- {
- return Configuration::gateway()->creditCard()->credit($token, $transactionAttribs);
- }
- public static function creditNoValidate($token, $transactionAttribs)
- {
- return Configuration::gateway()->creditCard()->creditNoValidate($token, $transactionAttribs);
- }
- public static function sale($token, $transactionAttribs)
- {
- return Configuration::gateway()->creditCard()->sale($token, $transactionAttribs);
- }
- public static function saleNoValidate($token, $transactionAttribs)
- {
- return Configuration::gateway()->creditCard()->saleNoValidate($token, $transactionAttribs);
- }
- public static function update($token, $attributes)
- {
- return Configuration::gateway()->creditCard()->update($token, $attributes);
- }
- public static function updateNoValidate($token, $attributes)
- {
- return Configuration::gateway()->creditCard()->updateNoValidate($token, $attributes);
- }
- public static function updateCreditCardUrl()
- {
- return Configuration::gateway()->creditCard()->updateCreditCardUrl();
- }
- public static function updateFromTransparentRedirect($queryString)
- {
- return Configuration::gateway()->creditCard()->updateFromTransparentRedirect($queryString);
- }
- public static function delete($token)
- {
- return Configuration::gateway()->creditCard()->delete($token);
- }
- /** @return array */
- public static function allCardTypes()
- {
- return [
- CreditCard::AMEX,
- CreditCard::CARTE_BLANCHE,
- CreditCard::CHINA_UNION_PAY,
- CreditCard::DINERS_CLUB_INTERNATIONAL,
- CreditCard::DISCOVER,
- CreditCard::JCB,
- CreditCard::LASER,
- CreditCard::MAESTRO,
- CreditCard::MASTER_CARD,
- CreditCard::SOLO,
- CreditCard::SWITCH_TYPE,
- CreditCard::VISA,
- CreditCard::UNKNOWN
- ];
- }
- }
- class_alias('Braintree\CreditCard', 'Braintree_CreditCard');
|