mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 09:08:09 +08:00
validate if credit card can be used in a country
This commit is contained in:
parent
fed6df2578
commit
82be811271
6 changed files with 298 additions and 11 deletions
|
@ -38,6 +38,24 @@ class DccApplies {
|
|||
'SGD',
|
||||
'USD',
|
||||
),
|
||||
'AT' => array(
|
||||
'AUD',
|
||||
'CAD',
|
||||
'CHF',
|
||||
'CZK',
|
||||
'DKK',
|
||||
'EUR',
|
||||
'GBP',
|
||||
'HKD',
|
||||
'HUF',
|
||||
'JPY',
|
||||
'NOK',
|
||||
'NZD',
|
||||
'PLN',
|
||||
'SEK',
|
||||
'SGD',
|
||||
'USD',
|
||||
),
|
||||
'BE' => array(
|
||||
'AUD',
|
||||
'CAD',
|
||||
|
@ -74,6 +92,24 @@ class DccApplies {
|
|||
'SGD',
|
||||
'USD',
|
||||
),
|
||||
'CA' => array(
|
||||
'AUD',
|
||||
'CAD',
|
||||
'CHF',
|
||||
'CZK',
|
||||
'DKK',
|
||||
'EUR',
|
||||
'GBP',
|
||||
'HKD',
|
||||
'HUF',
|
||||
'JPY',
|
||||
'NOK',
|
||||
'NZD',
|
||||
'PLN',
|
||||
'SEK',
|
||||
'SGD',
|
||||
'USD',
|
||||
),
|
||||
'CY' => array(
|
||||
'AUD',
|
||||
'CAD',
|
||||
|
@ -517,14 +553,148 @@ class DccApplies {
|
|||
|
||||
);
|
||||
|
||||
/**
|
||||
* Which countries support which credit cards. Empty credit card arrays mean no restriction on
|
||||
* currency. Otherwise only the currencies in the array are supported.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $country_card_matrix = array(
|
||||
'AU' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'AT' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'BE' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'CA' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'CAD' ),
|
||||
'jcb' => array( 'CAD' ),
|
||||
),
|
||||
'CY' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'CZ' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'DK' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'EE' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'FI' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'EUR' ),
|
||||
),
|
||||
'FR' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'EUR' ),
|
||||
),
|
||||
'GR' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'HU' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'IT' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'EUR' ),
|
||||
),
|
||||
'LV' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'LI' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'LT' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'LU' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'MT' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'NL' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'EUR' ),
|
||||
),
|
||||
'NO' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'PL' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'PT' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'RO' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'SK' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'SI' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'ES' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'EUR' ),
|
||||
),
|
||||
'SE' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
),
|
||||
'US' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'USD' ),
|
||||
'discover' => array( 'USD' ),
|
||||
),
|
||||
'GB' => array(
|
||||
'mastercard' => array(),
|
||||
'visa' => array(),
|
||||
'amex' => array( 'GBP', 'USD' ),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns whether DCC can be used in the current country and the current currency used.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function for_country_currency(): bool {
|
||||
$region = wc_get_base_location();
|
||||
$country = $region['country'];
|
||||
$country = $this->country();
|
||||
$currency = get_woocommerce_currency();
|
||||
if ( ! in_array( $country, array_keys( $this->allowed_country_currency_matrix ), true ) ) {
|
||||
return false;
|
||||
|
@ -532,4 +702,67 @@ class DccApplies {
|
|||
$applies = in_array( $currency, $this->allowed_country_currency_matrix[ $country ], true );
|
||||
return $applies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns credit cards, which can be used.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function valid_cards() : array {
|
||||
$country = $this->country();
|
||||
$cards = array();
|
||||
if ( ! isset( $this->country_card_matrix[ $country ] ) ) {
|
||||
return $cards;
|
||||
}
|
||||
|
||||
$supported_currencies = $this->country_card_matrix[ $country ];
|
||||
foreach ( $supported_currencies as $card => $currencies ) {
|
||||
if ( $this->can_process_card( $card ) ) {
|
||||
$cards[] = $card;
|
||||
}
|
||||
}
|
||||
if ( in_array( 'amex', $cards, true ) ) {
|
||||
$cards[] = 'american-express';
|
||||
}
|
||||
if ( in_array( 'mastercard', $cards, true ) ) {
|
||||
$cards[] = 'master-card';
|
||||
}
|
||||
return $cards;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a card can be used or not.
|
||||
*
|
||||
* @param string $card The card.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function can_process_card( string $card ) : bool {
|
||||
$country = $this->country();
|
||||
if ( ! isset( $this->country_card_matrix[ $country ] ) ) {
|
||||
return false;
|
||||
}
|
||||
if ( ! isset( $this->country_card_matrix[ $country ][ $card ] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the supported currencies array is empty, there are no
|
||||
* restrictions, which currencies are supported by a card.
|
||||
*/
|
||||
$supported_currencies = $this->country_card_matrix[ $country ][ $card ];
|
||||
$currency = get_woocommerce_currency();
|
||||
return empty( $supported_currencies ) || in_array( $currency, $supported_currencies, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the country code of the shop.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function country() : string {
|
||||
$region = wc_get_base_location();
|
||||
$country = $region['country'];
|
||||
return $country;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue