mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-31 06:52:50 +08:00
Extract currency/country lists to services
This commit is contained in:
parent
ffe32070d0
commit
ebabc45dbc
3 changed files with 273 additions and 237 deletions
|
@ -315,12 +315,15 @@ return array(
|
||||||
},
|
},
|
||||||
'api.helpers.dccapplies' => static function ( ContainerInterface $container ) : DccApplies {
|
'api.helpers.dccapplies' => static function ( ContainerInterface $container ) : DccApplies {
|
||||||
return new DccApplies(
|
return new DccApplies(
|
||||||
|
$container->get( 'api.dcc-supported-country-currency-matrix' ),
|
||||||
|
$container->get( 'api.dcc-supported-country-card-matrix' ),
|
||||||
$container->get( 'api.shop.currency' ),
|
$container->get( 'api.shop.currency' ),
|
||||||
$container->get( 'api.shop.country' )
|
$container->get( 'api.shop.country' )
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
'api.helpers.currency-support' => static function ( ContainerInterface $container ) : CurrencySupport {
|
'api.helpers.currency-support' => static function ( ContainerInterface $container ) : CurrencySupport {
|
||||||
return new CurrencySupport(
|
return new CurrencySupport(
|
||||||
|
$container->get( 'api.supported-currencies' ),
|
||||||
$container->get( 'api.shop.currency' )
|
$container->get( 'api.shop.currency' )
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -332,4 +335,207 @@ return array(
|
||||||
$location = wc_get_base_location();
|
$location = wc_get_base_location();
|
||||||
return $location['country'];
|
return $location['country'];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Currencies supported by PayPal.
|
||||||
|
*
|
||||||
|
* From https://developer.paypal.com/docs/reports/reference/paypal-supported-currencies/
|
||||||
|
*/
|
||||||
|
'api.supported-currencies' => static function ( ContainerInterface $container ) : array {
|
||||||
|
return array(
|
||||||
|
'AUD',
|
||||||
|
'BRL',
|
||||||
|
'CAD',
|
||||||
|
'CNY',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'ILS',
|
||||||
|
'JPY',
|
||||||
|
'MYR',
|
||||||
|
'MXN',
|
||||||
|
'TWD',
|
||||||
|
'NZD',
|
||||||
|
'NOK',
|
||||||
|
'PHP',
|
||||||
|
'PLN',
|
||||||
|
'GBP',
|
||||||
|
'RUB',
|
||||||
|
'SGD',
|
||||||
|
'SEK',
|
||||||
|
'CHF',
|
||||||
|
'THB',
|
||||||
|
'USD',
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The matrix which countries and currency combinations can be used for DCC.
|
||||||
|
*/
|
||||||
|
'api.dcc-supported-country-currency-matrix' => static function ( ContainerInterface $container ) : array {
|
||||||
|
return array(
|
||||||
|
'AU' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'ES' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'FR' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'GB' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'IT' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'US' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'JPY',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
'CA' => array(
|
||||||
|
'AUD',
|
||||||
|
'CAD',
|
||||||
|
'CHF',
|
||||||
|
'CZK',
|
||||||
|
'DKK',
|
||||||
|
'EUR',
|
||||||
|
'GBP',
|
||||||
|
'HKD',
|
||||||
|
'HUF',
|
||||||
|
'JPY',
|
||||||
|
'NOK',
|
||||||
|
'NZD',
|
||||||
|
'PLN',
|
||||||
|
'SEK',
|
||||||
|
'SGD',
|
||||||
|
'USD',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Which countries support which credit cards. Empty credit card arrays mean no restriction on currency.
|
||||||
|
*/
|
||||||
|
'api.dcc-supported-country-card-matrix' => static function ( ContainerInterface $container ) : array {
|
||||||
|
return array(
|
||||||
|
'AU' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
),
|
||||||
|
'ES' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'EUR' ),
|
||||||
|
),
|
||||||
|
'FR' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'EUR' ),
|
||||||
|
),
|
||||||
|
'GB' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'GBP', 'USD' ),
|
||||||
|
),
|
||||||
|
'IT' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'EUR' ),
|
||||||
|
),
|
||||||
|
'US' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'USD' ),
|
||||||
|
'discover' => array( 'USD' ),
|
||||||
|
),
|
||||||
|
'CA' => array(
|
||||||
|
'mastercard' => array(),
|
||||||
|
'visa' => array(),
|
||||||
|
'amex' => array( 'CAD' ),
|
||||||
|
'jcb' => array( 'CAD' ),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -17,37 +17,9 @@ class CurrencySupport {
|
||||||
/**
|
/**
|
||||||
* Currencies supported by PayPal.
|
* Currencies supported by PayPal.
|
||||||
*
|
*
|
||||||
* From https://developer.paypal.com/docs/reports/reference/paypal-supported-currencies/
|
|
||||||
*
|
|
||||||
* @var string[]
|
* @var string[]
|
||||||
*/
|
*/
|
||||||
private $supported_currencies = array(
|
private $supported_currencies;
|
||||||
'AUD',
|
|
||||||
'BRL',
|
|
||||||
'CAD',
|
|
||||||
'CNY',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'ILS',
|
|
||||||
'JPY',
|
|
||||||
'MYR',
|
|
||||||
'MXN',
|
|
||||||
'TWD',
|
|
||||||
'NZD',
|
|
||||||
'NOK',
|
|
||||||
'PHP',
|
|
||||||
'PLN',
|
|
||||||
'GBP',
|
|
||||||
'RUB',
|
|
||||||
'SGD',
|
|
||||||
'SEK',
|
|
||||||
'CHF',
|
|
||||||
'THB',
|
|
||||||
'USD',
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 3-letter currency code of the shop.
|
* 3-letter currency code of the shop.
|
||||||
|
@ -59,9 +31,11 @@ class CurrencySupport {
|
||||||
/**
|
/**
|
||||||
* CurrencySupport constructor.
|
* CurrencySupport constructor.
|
||||||
*
|
*
|
||||||
|
* @param string[] $supported_currencies Currencies supported by PayPal.
|
||||||
* @param string $currency 3-letter currency code of the shop.
|
* @param string $currency 3-letter currency code of the shop.
|
||||||
*/
|
*/
|
||||||
public function __construct( string $currency ) {
|
public function __construct( array $supported_currencies, string $currency ) {
|
||||||
|
$this->supported_currencies = $supported_currencies;
|
||||||
$this->currency = $currency;
|
$this->currency = $currency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,169 +19,15 @@ class DccApplies {
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $allowed_country_currency_matrix = array(
|
private $allowed_country_currency_matrix;
|
||||||
'AU' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'ES' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'FR' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'GB' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'IT' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'US' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'JPY',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
'CA' => array(
|
|
||||||
'AUD',
|
|
||||||
'CAD',
|
|
||||||
'CHF',
|
|
||||||
'CZK',
|
|
||||||
'DKK',
|
|
||||||
'EUR',
|
|
||||||
'GBP',
|
|
||||||
'HKD',
|
|
||||||
'HUF',
|
|
||||||
'JPY',
|
|
||||||
'NOK',
|
|
||||||
'NZD',
|
|
||||||
'PLN',
|
|
||||||
'SEK',
|
|
||||||
'SGD',
|
|
||||||
'USD',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Which countries support which credit cards. Empty credit card arrays mean no restriction on
|
* Which countries support which credit cards. Empty credit card arrays mean no restriction on
|
||||||
* currency. Otherwise only the currencies in the array are supported.
|
* currency.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $country_card_matrix = array(
|
private $country_card_matrix;
|
||||||
'AU' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
),
|
|
||||||
'ES' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'EUR' ),
|
|
||||||
),
|
|
||||||
'FR' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'EUR' ),
|
|
||||||
),
|
|
||||||
'GB' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'GBP', 'USD' ),
|
|
||||||
),
|
|
||||||
'IT' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'EUR' ),
|
|
||||||
),
|
|
||||||
'US' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'USD' ),
|
|
||||||
'discover' => array( 'USD' ),
|
|
||||||
),
|
|
||||||
'CA' => array(
|
|
||||||
'mastercard' => array(),
|
|
||||||
'visa' => array(),
|
|
||||||
'amex' => array( 'CAD' ),
|
|
||||||
'jcb' => array( 'CAD' ),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 3-letter currency code of the shop.
|
* 3-letter currency code of the shop.
|
||||||
|
@ -200,10 +46,20 @@ class DccApplies {
|
||||||
/**
|
/**
|
||||||
* DccApplies constructor.
|
* DccApplies constructor.
|
||||||
*
|
*
|
||||||
|
* @param array $allowed_country_currency_matrix The matrix which countries and currency combinations can be used for DCC.
|
||||||
|
* @param array $country_card_matrix Which countries support which credit cards. Empty credit card arrays mean no restriction on
|
||||||
|
* currency.
|
||||||
* @param string $currency 3-letter currency code of the shop.
|
* @param string $currency 3-letter currency code of the shop.
|
||||||
* @param string $country 2-letter country code of the shop.
|
* @param string $country 2-letter country code of the shop.
|
||||||
*/
|
*/
|
||||||
public function __construct( string $currency, string $country ) {
|
public function __construct(
|
||||||
|
array $allowed_country_currency_matrix,
|
||||||
|
array $country_card_matrix,
|
||||||
|
string $currency,
|
||||||
|
string $country
|
||||||
|
) {
|
||||||
|
$this->allowed_country_currency_matrix = $allowed_country_currency_matrix;
|
||||||
|
$this->country_card_matrix = $country_card_matrix;
|
||||||
$this->currency = $currency;
|
$this->currency = $currency;
|
||||||
$this->country = $country;
|
$this->country = $country;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue