diff --git a/CRM/Core/Payment/StripeCheckout.php b/CRM/Core/Payment/StripeCheckout.php index 8ecde33665725b6d4a87ce60714fde13b9f1634a..9d3aa277a4c8e246a0b95602af48c7e6b9c8d22c 100644 --- a/CRM/Core/Payment/StripeCheckout.php +++ b/CRM/Core/Payment/StripeCheckout.php @@ -192,7 +192,7 @@ class CRM_Core_Payment_StripeCheckout extends CRM_Core_Payment_Stripe { 'customer' => $stripeCustomerID, // 'submit_type' => one of 'auto', pay, book, donate 'client_reference_id' => $propertyBag->getInvoiceID(), - 'payment_method_types' => \Civi::settings()->get('stripe_checkout_supported_payment_methods'), + 'payment_method_types' => $this->getSupportedPaymentMethods($propertyBag), ]; // Allows you to alter the params passed to StripeCheckout (eg. payment_method_types) @@ -208,6 +208,33 @@ class CRM_Core_Payment_StripeCheckout extends CRM_Core_Payment_Stripe { CRM_Utils_System::redirect($checkoutSession->url); } + /** + * @param \Civi\Payment\PropertyBag $propertyBag + * + * @return array + */ + private function getSupportedPaymentMethods(\Civi\Payment\PropertyBag $propertyBag): array { + $paymentMethods = \Civi::settings()->get('stripe_checkout_supported_payment_methods'); + $result = []; + foreach ($paymentMethods as $index => $paymentMethod) { + switch ($paymentMethod) { + case 'sepa_debit': + if ($propertyBag->getCurrency() === 'EUR') { + $result[] = $paymentMethod; + } + break; + + default: + $result[] = $paymentMethod; + } + } + if (empty($result)) { + throw new PaymentProcessorException('There are no valid Stripe payment methods enabled for this configuration. Check currency etc.'); + } + return $result; + } + + /** * Takes the lineitems passed into doPayment and converts them into an array suitable for passing to Stripe Checkout * diff --git a/CRM/Stripe/Api.php b/CRM/Stripe/Api.php index 6b7ae24758d3ba67b1848dfdbfa248a1fc829a4d..fc179a802f9fa5b9f560d15b2253bfabeae394be 100644 --- a/CRM/Stripe/Api.php +++ b/CRM/Stripe/Api.php @@ -296,7 +296,7 @@ class CRM_Stripe_Api { // 'promptpay', 'sepa_debit' => E::ts('SEPA Direct Debit'), // 'sofort', - //'us_bank_account', + 'us_bank_account' => E::ts('ACH Direct Debit'), // 'wechat_pay', ]; }