From 848172f04f515b470640c692dc4de6757662f868 Mon Sep 17 00:00:00 2001 From: Matthew Wire <mjw@mjwconsult.co.uk> Date: Mon, 1 May 2023 17:14:47 +0100 Subject: [PATCH] Add ACH direct debit support and disable SEPA if currency NOT EUR --- CRM/Core/Payment/StripeCheckout.php | 29 ++++++++++++++++++++++++++++- CRM/Stripe/Api.php | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CRM/Core/Payment/StripeCheckout.php b/CRM/Core/Payment/StripeCheckout.php index 8ecde336..9d3aa277 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 6b7ae247..fc179a80 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', ]; } -- GitLab