Difference between revisions of "Stripe"
m |
|||
Line 9: | Line 9: | ||
}} | }} | ||
− | The WHMCS Stripe payment gateway uses Stripe's tokenised storage system | + | The WHMCS Stripe payment gateway uses Stripe's tokenised storage system to submit credit card information to Stripe, which stores it remotely. |
==Setup== | ==Setup== | ||
Line 25: | Line 25: | ||
# Optionally, check '''Allow Payment Request Buttons'''. | # Optionally, check '''Allow Payment Request Buttons'''. | ||
# Click '''Save Changes'''. | # Click '''Save Changes'''. | ||
− | |||
− | |||
<div class="docs-alert-info"> | <div class="docs-alert-info"> | ||
<span class="title">Transaction Fees</span><br /> | <span class="title">Transaction Fees</span><br /> | ||
− | Stripe returns transaction fees in the default currency of the Stripe account. If you have a different default currency in WHMCS, you must ensure you have configured the currency of your Stripe account in '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Currencies''' or, prior to WHMCS 8.0, '''Setup > Payments > Currencies'''. This must include a valid exchange rate to allow WHMCS to be able to convert the fee into your other currencies. | + | Stripe returns transaction fees in the default currency of the Stripe account. If you have a different default currency in WHMCS, you must ensure you have configured the currency of your Stripe account in '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > [[Currencies]]''' or, prior to WHMCS 8.0, '''Setup > Payments > Currencies'''. This must include a valid exchange rate to allow WHMCS to be able to convert the fee into your other currencies. |
</div> | </div> | ||
Line 39: | Line 37: | ||
===WebHook Endpoints=== | ===WebHook Endpoints=== | ||
− | <div class="docs-alert-info"><i class="fa fa-info-circle"></i> Stripe Webhooks | + | <div class="docs-alert-info"><i class="fa fa-info-circle"></i> You can use Stripe Webhooks in WHMCS v8.0 and above.</div> |
Stripe's WebHook Endpoints update WHMCS automatically with changes to your customers' cards. In WHMCS 8.0 and later, when you click '''Save Changes''', WHMCS will use the '''Stripe Publishable API Key''' and '''Stripe Secret API Key''' to generate the '''Stripe WebHook Endpoint Secret''' and '''Stripe WebHook Endpoint Secret (Test/Sandbox)'''. | Stripe's WebHook Endpoints update WHMCS automatically with changes to your customers' cards. In WHMCS 8.0 and later, when you click '''Save Changes''', WHMCS will use the '''Stripe Publishable API Key''' and '''Stripe Secret API Key''' to generate the '''Stripe WebHook Endpoint Secret''' and '''Stripe WebHook Endpoint Secret (Test/Sandbox)'''. | ||
Line 55: | Line 53: | ||
==Payment Request Button== | ==Payment Request Button== | ||
− | Enabling this option within the module configuration provides customers with a platform specific payment request button | + | Enabling this option within the module configuration provides customers with a platform-specific payment request button (for example, Apple® Pay). For customers who don’t use Apple Pay, '''Payment Request''' supports credit cards stored in the browser, Google® Pay, and Microsoft® Pay. |
===Apple Pay=== | ===Apple Pay=== | ||
[[File:apple_pay_checkout.png|thumb|The Apple Pay Button on Checkout]] | [[File:apple_pay_checkout.png|thumb|The Apple Pay Button on Checkout]] | ||
− | When | + | |
+ | When you enable this, Apple Pay allows access to payment details that users have stored in their Apple Wallet. If they're using Safari® on their iPhone® or iPad®, when they tap "Buy with Apple Pay" on your site, they'll be shown a modal payment sheet. If they're using Safari on their Mac®, and have an iOS® device in range, they'll be prompted on their device to authorize the payment, which will then be sent to the browser. | ||
====Enabling Apple Pay==== | ====Enabling Apple Pay==== | ||
− | To use Apple Pay with a live Stripe API key, | + | To use Apple Pay with a live Stripe API key, you must register all of the domains that will display an Apple Pay button with Apple. This includes both top-level domains (for example, <tt><nowiki>whmcs.com</nowiki></tt>) and subdomains (for example, <tt><nowiki>shop.whmcs.com</nowiki></tt>). |
− | <div class="docs-alert-info"><i class="fa fa-info-circle"></i> An SSL | + | <div class="docs-alert-info"><i class="fa fa-info-circle"></i> An SSL certificate is '''required''' to use Apple Pay.</div> |
+ | |||
+ | To do this: | ||
+ | # Download this [https://stripe.com/files/apple-pay/apple-developer-merchantid-domain-association domain association file] and host it at <tt>/.well-known/apple-developer-merchantid-domain-association</tt> on your site. For example, if you're registering <tt><nowiki>https://example.com</nowiki></tt>, make that file available at <tt><nowiki>https://example.com/.well-known/apple-developer-merchantid-domain-association</nowiki></tt>. | ||
+ | # To instruct Stripe to register the domain with Apple, go to the '''[https://dashboard.stripe.com/account/apple_pay Apple Pay]''' tab in '''Account Settings''' in the Stripe Dashboard. | ||
− | |||
− | |||
===Google Pay=== | ===Google Pay=== | ||
− | Google Pay allows customers to make payments using any credit or debit card | + | Google Pay allows customers to make payments using any credit or debit card on their Google account, including Google Play, YouTube™, Chrome™, or an Android™ device. |
+ | |||
===Microsoft Pay=== | ===Microsoft Pay=== | ||
− | Microsoft Pay allows customers to make payments using any credit or debit card | + | Microsoft Pay allows customers to make payments using any credit or debit card on their Microsoft account. |
==ACH/SEPA== | ==ACH/SEPA== | ||
− | <div class="docs-alert-info"><i class="fa fa-info-circle"></i> Support for ACH and SEPA was introduced in WHMCS 7.9.</div> | + | <div class="docs-alert-info"><i class="fa fa-info-circle"></i>Support for ACH and SEPA was introduced in WHMCS 7.9.</div> |
[[Stripe ACH]] and [[Stripe SEPA]] are payment gateways that allow bank payments in the US and the Euro Zone respectively. | [[Stripe ACH]] and [[Stripe SEPA]] are payment gateways that allow bank payments in the US and the Euro Zone respectively. | ||
− | + | ACH is currently supported only for Stripe businesses based in the U.S. and only in USD. | |
Stripe users in Europe and the United States can accept SEPA Direct Debit payments from customers in countries within the Single Euro Payments Area (EUR only). | Stripe users in Europe and the United States can accept SEPA Direct Debit payments from customers in countries within the Single Euro Payments Area (EUR only). | ||
Line 84: | Line 86: | ||
==Payment Workflow== | ==Payment Workflow== | ||
[[File:stripe_checkout.png|thumb|The Stripe module on Checkout]] | [[File:stripe_checkout.png|thumb|The Stripe module on Checkout]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | In WHMCS 7.8 and later, WHMCS uses the Stripe Elements implementation method. When performing checkout, if customer authorisation is required, the user | + | The Stripe payment workflow supports automated recurring and on-demand billing. |
+ | |||
+ | Customers can choose between previously-stored cards or entering new ones during payment, and they can update their credit cards at any time in the Client Area. Admins can also update credit card information in the WHMCS Admin Area. | ||
+ | |||
+ | During checkout, clients never leave WHMCS. Personal card information goes directly to Stripe and is never stored within WHMCS. The Stripe API handles all refunds and obtains transaction information. | ||
+ | |||
+ | In WHMCS 7.8 and later, WHMCS uses the Stripe Elements implementation method. When performing checkout, if customer authorisation is required, the system will prompt the user automatically to approve the payment. This process is also commonly referred to as 3D Secure. Use of 3D Secure depends on the card type and issuer. | ||
<div class="docs-alert-info"> | <div class="docs-alert-info"> | ||
Line 100: | Line 101: | ||
===Recurring Payments=== | ===Recurring Payments=== | ||
− | Automated recurring payments | + | Automated recurring payments use stored tokens. If a client card requires SCA, the system will deny the payment attempt and the client must log in to WHMCS manually to process the payment. |
===Payment Gateway Balances=== | ===Payment Gateway Balances=== | ||
Line 106: | Line 107: | ||
In WHMCS 8.2 and later, you can view payment gateway balances directly within the WHMCS Admin Area, with native support for Stripe balances. At '''Billing > Transactions''', you can view balances in the transaction list and in the transaction details for individual transactions. For more information, see [[Payment Gateway Balances and Transactions]]. | In WHMCS 8.2 and later, you can view payment gateway balances directly within the WHMCS Admin Area, with native support for Stripe balances. At '''Billing > Transactions''', you can view balances in the transaction list and in the transaction details for individual transactions. For more information, see [[Payment Gateway Balances and Transactions]]. | ||
− | This requires | + | This requires you to enable '''View Gateway Balances''' for the desired administrator role at '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Administrator Roles'''. |
<div class="docs-alert-warning"> | <div class="docs-alert-warning"> | ||
Line 115: | Line 116: | ||
==Migrating to Stripe== | ==Migrating to Stripe== | ||
− | The Stripe payment gateway module supports migrating credit card details | + | The Stripe payment gateway module supports migrating locally-stored credit card details to Stripe's tokenized storage. This is useful when you transition from another non-tokenized merchant gateway provider to Stripe. |
− | For an existing client with a credit card | + | For an existing client with a locally-stored credit card, the first time that the system attempts to capture payment for an invoice using Stripe, the system will submit the credit card details to Stripe and create and store a token. Then, the system will remove the local copy of the card details. |
− | To migrate to Stripe and ensure all future credit card processing | + | To migrate to Stripe and ensure all future credit card processing uses it: |
− | # | + | # Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Payment Gateways''' or, prior to WHMCS 8.0, '''Setup > Payments > Payment Gateways'''. |
− | # | + | # Activate the Stripe module. |
− | # | + | # Click '''Deactivate''' for your previous merchant gateway provider. |
− | # | + | # Select Stripe as the replacement gateway to switch users of the previous gateway module to. |
− | # Click '''OK''' | + | # Click '''OK'''. |
− | |||
− | |||
===Migrating from a 3rd Party Stripe Module=== | ===Migrating from a 3rd Party Stripe Module=== | ||
− | The | + | The WHMCS Stripe module uses the Stripe <tt>cus_</tt> reference to capture payments (for example, <tt>cus_9MvIb7UlgJfJTn</tt>). The WHMCS Stripe module can replace any third-party module that uses this. |
− | To | + | To check whether your current Stripe module uses the <tt>cus_</tt> reference, navigate to a client that you know has an active Stripe token and click '''Credit Card Information''' on the '''Client Summary''' page. Verify that the listed token includes the <tt>cus_</tt> prefix. |
− | To | + | To switch to the WHMCS Stripe module: |
− | + | # Activate the module as described above. | |
− | + | # Deactivate your previous Stripe module. | |
− | + | # Select the WHMCS Stripe module. | |
− | + | # Remove any third-party files and template customisations. | |
==Troubleshooting== | ==Troubleshooting== | ||
− | |||
− | |||
===Remote Transaction Failure. Please Contact Support=== | ===Remote Transaction Failure. Please Contact Support=== | ||
− | + | This issue has multiple causes (below). This may also display as '''Error'''. | |
====Payment Blocked By Stripe==== | ====Payment Blocked By Stripe==== | ||
− | + | This indicates that a rule in your Stripe account may be blocking payment. | |
+ | |||
+ | To resolve this: | ||
+ | # Log in to your [https://dashboard.stripe.com/ Stripe Dashboard]. | ||
+ | # Go to '''Developers > Logs'''. | ||
+ | # Find the log entries from the time at which the payment was attempted. The details of the log will show whether the payment was blocked (for example, with a '''The zip code you supplied failed validation''' error). | ||
+ | # Adjust the rules in your Stripe account for the error. For help, contact [https://support.stripe.com/ Stripe support]. | ||
====Customisations==== | ====Customisations==== | ||
− | + | This issue may also present itself as '''"No Stripe Details Found for Update"''' in the Gateway Log. | |
+ | |||
+ | This issue can occur due to interference from a third-party Stripe module. Using the official Stripe module requires the full uninstallation and removal of any custom or third-party Stripe integrations. This includes removal of all files and template modifications. | ||
− | + | For example, these issues may trigger this error: | |
− | * A hook file | + | * A hook file in <tt>/includes/hooks/stripe.php</tt>. Remove this file when switching to the WHMCS Stripe module. |
− | * Template customisations | + | * Template customisations in your active order form template files. |
− | * The payment method is set to a module other than Stripe. | + | * The payment method is set to a module other than Stripe. In this case, perform one of the following actions: |
− | ** Change the client's ''Payment Method'' setting | + | ** Change the client's '''Payment Method''' setting in the client's '''Profile''' tab to the Stripe module. |
− | ** Make Stripe the system default payment gateway | + | ** Make Stripe the system default payment gateway at '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > [[Payment Gateways]]''' or, prior to WHMCS 8.0, '''Setup > Payments > Payment Gateways'''. |
====Out Of Date Template Files==== | ====Out Of Date Template Files==== | ||
− | The error | + | The error indicates that you have out-of-date template files. Make certain that your client theme and order form templates are fully compatible with your version of WHMCS. With each version of WHMCS the [https://docs.whmcs.com/Release_Notes release notes] provide links to template changes. |
====Network Analyser Tool==== | ====Network Analyser Tool==== | ||
Line 174: | Line 179: | ||
===No Stripe Customer Details Found=== | ===No Stripe Customer Details Found=== | ||
− | + | The system logs this error in the debug data section of '''Billing > Gateway Log'''. It indicates that the client does not have a payment method in WHMCS. You can confirm this in the '''Pay Methods''' section of the client's '''Summary''' tab. | |
− | To resolve, | + | To resolve this, ask the client to log in to the Client Area, go to the unpaid invoice, and click '''Pay Now''' to make a payment via Stripe. This will create a payment method to use for future automatic payments. |
==="You must provide a value for 'cvc'=== | ==="You must provide a value for 'cvc'=== | ||
− | If you see | + | If you see at '''Billing > Gateway Log''' for a failed payment attempt by an admin or the cron job, this indicates that the customer is in an European country or has a European billing address. Stripe's API requires that they make at least one manual payment to get added to their system. |
+ | |||
+ | To resolve this, ask the client to log in to the Client Area, go to the unpaid invoice, and click '''Pay Now''' to make a payment via Stripe. | ||
+ | |||
+ | For more information, see [https://stripe.com/docs/api?lang=python#create_card_token Stripe's documentation] and (click '''show child parameters'''). | ||
− | + | When you do this, the system displays the following data: | |
− | cvc | + | cvc |
− | usually required | + | usually required |
− | Card security code. Highly recommended to always include this value, but it's only required for accounts based in European countries. | + | Card security code. Highly recommended to always include this value, but it's only required for accounts based in European countries. |
− | + | After the customer makes a manual payment, the system adds them to Stripe and any future attempts (automatic or manual) will work normally. | |
===Network error [errno 35]: Unsupported SSL protocol version=== | ===Network error [errno 35]: Unsupported SSL protocol version=== | ||
− | + | This error indicates a server configuration issue. The server is attempting a secure connection to Stripe using an outdated SSL protocol. Most providers now require connections via TLS for security purposes. For more information, see [https://stripe.com/docs/security#tls Stripe TLS Documentation]. | |
− | To resolve this issue, work with | + | To resolve this issue, work with your system administrator or hosting provider to ensure that remote cURL connections use TLS by default. You may also need to update your OpenSSL version. |
− | |||
===You passed an empty string for 'statement_descriptor'=== | ===You passed an empty string for 'statement_descriptor'=== | ||
− | This | + | This indicates an empty '''Statement Descriptor''' field in the payment gateway configuration. Make certain that you set your entire [[#Setup|gateway configuration]]. |
===Bad Request=== | ===Bad Request=== | ||
− | This error may appear in the Client Area when | + | This error may appear in the Client Area when a client attempts to pay for an invoice or order using an existing stored payment method. It indicates that the customer or the token in WHMCS do not exist in Stripe. To ensure that the pay method is correctly stored in Stripe, delete the stored payment method from the Admin Area via the client's profile's '''Summary''' tab (which may display a more-informative error to administrators). Then, add the payment method again. |
Customised or outdated system themes or order form templates can also cause this error. To troubleshoot this: | Customised or outdated system themes or order form templates can also cause this error. To troubleshoot this: | ||
− | + | # Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings''' and select the '''General''' tab. | |
− | + | # Select ''Six'' or ''Twenty-One'' for '''System Theme'''. | |
− | + | # Go to the '''Ordering''' tab. | |
− | + | # Select a [[Standard_Order_Form_Templates|Default Order Form Template]]. | |
− | + | # Click '''Save Changes'''. | |
− | + | # Return to the Client Area and refresh the page. | |
<div class="docs-alert-warning"> | <div class="docs-alert-warning"> | ||
Line 217: | Line 225: | ||
===An unexpected error - No Stripe Payment Method found from token=== | ===An unexpected error - No Stripe Payment Method found from token=== | ||
− | This error indicates that some of the required data | + | This error indicates that the system could not transmit some of the required data to Stripe. This is usually due to outdated order form templates. Check this issue using the Twenty-One or Six system theme and the Standard Cart order form template. |
<div class="docs-alert-warning"> | <div class="docs-alert-warning"> | ||
Line 224: | Line 232: | ||
</div> | </div> | ||
− | This can also be caused by a JavaScript error from custom code (template changes, hooks, addons | + | This can also be caused by a JavaScript error from custom code (for example, template changes, hooks, or addons) preventing the standard Stripe JavaScript from running correctly. Your browser console will show whether a JavaScript error is occurring. |
+ | * If one is, the custom JavaScript will need to be corrected. | ||
+ | * If the JavaScript error is coming from a third-party customisation, contact the developer for assistance. | ||
− | + | If the issue persists, contact our [https://www.whmcs.com/submit-a-ticket/ support team]. | |
===Error Updating Remote Pay Method: Remote Storage Failed=== | ===Error Updating Remote Pay Method: Remote Storage Failed=== | ||
− | + | You can find information about this error in the '''Gateway Log''' at '''Billing > Gateway Log'''. | |
===Stripe India Accounts=== | ===Stripe India Accounts=== | ||
− | + | India-based Stripe accounts require the following additional conditions for a successful payment capture: | |
− | * | + | * The client's address and billing contact must use a valid Indian postal address. |
− | * | + | * The payment card must be from an Indian bank. |
− | * | + | * The invoice must use INR as the currency. |
− | + | To automatically convert invoice totals into other currencies upon payment in WHMCS: | |
− | |||
− | Add INR as an [[Currencies#Adding.2FEditing_a_Currency|additional currency]] | + | # Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Currencies'''. |
− | + | # Add <tt>INR</tt> as an [[Currencies#Adding.2FEditing_a_Currency|additional currency]]. | |
− | + | # Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Payment Gateways''' or, prior to WHMCS 8.0, '''Setup > Payments > Payment Gateways'''. | |
− | + | # Set '''Convert To For Processing''' on the Stripe gateway to ''INR''. | |
− | |||
− | + | For more information about the additional Stripe requirements for Indian Stripe accounts, see [https://support.stripe.com/questions/requirements-for-india-export-charges Stripe's documentation]. | |
− | https://support.stripe.com/questions/requirements-for-india-export-charges |
Revision as of 18:30, 29 September 2021
Contents
- 1 Supported Features
- 2 Setup
- 3 Payment Request Button
- 4 ACH/SEPA
- 5 Payment Workflow
- 6 Migrating to Stripe
- 7 Troubleshooting
- 7.1 Remote Transaction Failure. Please Contact Support
- 7.2 No Stripe Customer Details Found
- 7.3 "You must provide a value for 'cvc'
- 7.4 Network error [errno 35]: Unsupported SSL protocol version
- 7.5 You passed an empty string for 'statement_descriptor'
- 7.6 Bad Request
- 7.7 An unexpected error - No Stripe Payment Method found from token
- 7.8 Error Updating Remote Pay Method: Remote Storage Failed
- 7.9 Stripe India Accounts
Supported Features
Type | One Time | Recurring | Refunds | 3D Secure |
---|---|---|---|---|
Token | Yes | Yes | Yes | Yes |
Remote Update Card | Remote Delete Card | AddPayMethod API |
---|---|---|
Yes | Yes | No |
The WHMCS Stripe payment gateway uses Stripe's tokenised storage system to submit credit card information to Stripe, which stores it remotely.
Setup
To configure Stripe:
- Go to Configuration () > System Settings > Payment Gateways or, prior to WHMCS 8.0, Setup > Payments > Payment Gateways.
- In All Payment Gateways, choose Stripe.
- Customize the Display Name. We recommend setting this to Credit Card.
- Go to the Stripe portal and retrieve the publishable and secret API keys. Stripe uses API keys for authentication.
- In WHMCS, enter the Stripe Publishable API Key and Stripe Secret API Key.
- Optionally, customize the Statement Descriptor Suffix with a maximum of 22 characters.
- In WHMCS 8.0 and later, leave the Stripe WebHook Endpoint Secret and Stripe WebHook Endpoint Secret (Test/Sandbox) empty. WHMCS auto-generates these.
- Optionally, check Allow Payment Request Buttons.
- Click Save Changes.
Transaction Fees
Stripe returns transaction fees in the default currency of the Stripe account. If you have a different default currency in WHMCS, you must ensure you have configured the currency of your Stripe account in Configuration () > System Settings > Currencies or, prior to WHMCS 8.0, Setup > Payments > Currencies. This must include a valid exchange rate to allow WHMCS to be able to convert the fee into your other currencies.
Warning
The Stripe payment gateway module is not compatible with the Modern or Boxes order form templates.
WebHook Endpoints
Stripe's WebHook Endpoints update WHMCS automatically with changes to your customers' cards. In WHMCS 8.0 and later, when you click Save Changes, WHMCS will use the Stripe Publishable API Key and Stripe Secret API Key to generate the Stripe WebHook Endpoint Secret and Stripe WebHook Endpoint Secret (Test/Sandbox).
- If you enter live API keys (sk_live), WHMCS will generate the Stripe WebHook Endpoint Secret.
- If you enter test API keys (sk_test), WHMCS will generate the Stripe WebHook Endpoint Secret (Test/Sandbox).
WHMCS registers the WebHook Endpoints to deliver these events from Stripe:
- customer.source.updated
- customer.card.updated
- payment_method.updated
To change the WebHook ID, empty Stripe WebHook Endpoint Secret and Stripe WebHook Endpoint Secret (Test/Sandbox) and click Save Changes. WHMCS will auto-generate them again with new values.
Payment Request Button
Enabling this option within the module configuration provides customers with a platform-specific payment request button (for example, Apple® Pay). For customers who don’t use Apple Pay, Payment Request supports credit cards stored in the browser, Google® Pay, and Microsoft® Pay.
Apple Pay
When you enable this, Apple Pay allows access to payment details that users have stored in their Apple Wallet. If they're using Safari® on their iPhone® or iPad®, when they tap "Buy with Apple Pay" on your site, they'll be shown a modal payment sheet. If they're using Safari on their Mac®, and have an iOS® device in range, they'll be prompted on their device to authorize the payment, which will then be sent to the browser.
Enabling Apple Pay
To use Apple Pay with a live Stripe API key, you must register all of the domains that will display an Apple Pay button with Apple. This includes both top-level domains (for example, whmcs.com) and subdomains (for example, shop.whmcs.com).
To do this:
- Download this domain association file and host it at /.well-known/apple-developer-merchantid-domain-association on your site. For example, if you're registering https://example.com, make that file available at https://example.com/.well-known/apple-developer-merchantid-domain-association.
- To instruct Stripe to register the domain with Apple, go to the Apple Pay tab in Account Settings in the Stripe Dashboard.
Google Pay
Google Pay allows customers to make payments using any credit or debit card on their Google account, including Google Play, YouTube™, Chrome™, or an Android™ device.
Microsoft Pay
Microsoft Pay allows customers to make payments using any credit or debit card on their Microsoft account.
ACH/SEPA
Stripe ACH and Stripe SEPA are payment gateways that allow bank payments in the US and the Euro Zone respectively.
ACH is currently supported only for Stripe businesses based in the U.S. and only in USD.
Stripe users in Europe and the United States can accept SEPA Direct Debit payments from customers in countries within the Single Euro Payments Area (EUR only).
Payment Workflow
The Stripe payment workflow supports automated recurring and on-demand billing.
Customers can choose between previously-stored cards or entering new ones during payment, and they can update their credit cards at any time in the Client Area. Admins can also update credit card information in the WHMCS Admin Area.
During checkout, clients never leave WHMCS. Personal card information goes directly to Stripe and is never stored within WHMCS. The Stripe API handles all refunds and obtains transaction information.
In WHMCS 7.8 and later, WHMCS uses the Stripe Elements implementation method. When performing checkout, if customer authorisation is required, the system will prompt the user automatically to approve the payment. This process is also commonly referred to as 3D Secure. Use of 3D Secure depends on the card type and issuer.
WHMCS 8.3 and higher includes support for disputes for Stripe and PayPal® transactions at Billing > Disputes.
Recurring Payments
Automated recurring payments use stored tokens. If a client card requires SCA, the system will deny the payment attempt and the client must log in to WHMCS manually to process the payment.
Payment Gateway Balances
In WHMCS 8.2 and later, you can view payment gateway balances directly within the WHMCS Admin Area, with native support for Stripe balances. At Billing > Transactions, you can view balances in the transaction list and in the transaction details for individual transactions. For more information, see Payment Gateway Balances and Transactions.
This requires you to enable View Gateway Balances for the desired administrator role at Configuration () > System Settings > Administrator Roles.
Admin Area Dashboard Widget
In the Admin Area Dashboard, you can view your Stripe balances through the Stripe Balance widget. However, this widget does not use the WHMCS\Module\Gateway\Balance and WHMCS\Module\Gateway\BalanceCollection classes to display balances. For more information, see Stripe Balance Widget.
Migrating to Stripe
The Stripe payment gateway module supports migrating locally-stored credit card details to Stripe's tokenized storage. This is useful when you transition from another non-tokenized merchant gateway provider to Stripe.
For an existing client with a locally-stored credit card, the first time that the system attempts to capture payment for an invoice using Stripe, the system will submit the credit card details to Stripe and create and store a token. Then, the system will remove the local copy of the card details.
To migrate to Stripe and ensure all future credit card processing uses it:
- Go to Configuration () > System Settings > Payment Gateways or, prior to WHMCS 8.0, Setup > Payments > Payment Gateways.
- Activate the Stripe module.
- Click Deactivate for your previous merchant gateway provider.
- Select Stripe as the replacement gateway to switch users of the previous gateway module to.
- Click OK.
Migrating from a 3rd Party Stripe Module
The WHMCS Stripe module uses the Stripe cus_ reference to capture payments (for example, cus_9MvIb7UlgJfJTn). The WHMCS Stripe module can replace any third-party module that uses this.
To check whether your current Stripe module uses the cus_ reference, navigate to a client that you know has an active Stripe token and click Credit Card Information on the Client Summary page. Verify that the listed token includes the cus_ prefix.
To switch to the WHMCS Stripe module:
- Activate the module as described above.
- Deactivate your previous Stripe module.
- Select the WHMCS Stripe module.
- Remove any third-party files and template customisations.
Troubleshooting
Remote Transaction Failure. Please Contact Support
This issue has multiple causes (below). This may also display as Error.
Payment Blocked By Stripe
This indicates that a rule in your Stripe account may be blocking payment.
To resolve this:
- Log in to your Stripe Dashboard.
- Go to Developers > Logs.
- Find the log entries from the time at which the payment was attempted. The details of the log will show whether the payment was blocked (for example, with a The zip code you supplied failed validation error).
- Adjust the rules in your Stripe account for the error. For help, contact Stripe support.
Customisations
This issue may also present itself as "No Stripe Details Found for Update" in the Gateway Log.
This issue can occur due to interference from a third-party Stripe module. Using the official Stripe module requires the full uninstallation and removal of any custom or third-party Stripe integrations. This includes removal of all files and template modifications.
For example, these issues may trigger this error:
- A hook file in /includes/hooks/stripe.php. Remove this file when switching to the WHMCS Stripe module.
- Template customisations in your active order form template files.
- The payment method is set to a module other than Stripe. In this case, perform one of the following actions:
- Change the client's Payment Method setting in the client's Profile tab to the Stripe module.
- Make Stripe the system default payment gateway at Configuration () > System Settings > Payment Gateways or, prior to WHMCS 8.0, Setup > Payments > Payment Gateways.
Out Of Date Template Files
The error indicates that you have out-of-date template files. Make certain that your client theme and order form templates are fully compatible with your version of WHMCS. With each version of WHMCS the release notes provide links to template changes.
Network Analyser Tool
Another method to diagnose this error is to use your browser's network analyser tool. Please see the section Another Error Type in this help article. Whilst the article is for another issue, it describes how to use your browser's network analyser tool to help identify underlying errors.
No Stripe Customer Details Found
The system logs this error in the debug data section of Billing > Gateway Log. It indicates that the client does not have a payment method in WHMCS. You can confirm this in the Pay Methods section of the client's Summary tab.
To resolve this, ask the client to log in to the Client Area, go to the unpaid invoice, and click Pay Now to make a payment via Stripe. This will create a payment method to use for future automatic payments.
"You must provide a value for 'cvc'
If you see at Billing > Gateway Log for a failed payment attempt by an admin or the cron job, this indicates that the customer is in an European country or has a European billing address. Stripe's API requires that they make at least one manual payment to get added to their system.
To resolve this, ask the client to log in to the Client Area, go to the unpaid invoice, and click Pay Now to make a payment via Stripe.
For more information, see Stripe's documentation and (click show child parameters).
When you do this, the system displays the following data:
cvc usually required Card security code. Highly recommended to always include this value, but it's only required for accounts based in European countries.
After the customer makes a manual payment, the system adds them to Stripe and any future attempts (automatic or manual) will work normally.
Network error [errno 35]: Unsupported SSL protocol version
This error indicates a server configuration issue. The server is attempting a secure connection to Stripe using an outdated SSL protocol. Most providers now require connections via TLS for security purposes. For more information, see Stripe TLS Documentation.
To resolve this issue, work with your system administrator or hosting provider to ensure that remote cURL connections use TLS by default. You may also need to update your OpenSSL version.
You passed an empty string for 'statement_descriptor'
This indicates an empty Statement Descriptor field in the payment gateway configuration. Make certain that you set your entire gateway configuration.
Bad Request
This error may appear in the Client Area when a client attempts to pay for an invoice or order using an existing stored payment method. It indicates that the customer or the token in WHMCS do not exist in Stripe. To ensure that the pay method is correctly stored in Stripe, delete the stored payment method from the Admin Area via the client's profile's Summary tab (which may display a more-informative error to administrators). Then, add the payment method again.
Customised or outdated system themes or order form templates can also cause this error. To troubleshoot this:
- Go to Configuration () > System Settings > General Settings and select the General tab.
- Select Six or Twenty-One for System Theme.
- Go to the Ordering tab.
- Select a Default Order Form Template.
- Click Save Changes.
- Return to the Client Area and refresh the page.
Client Area System Themes
We introduced Twenty-One in WHMCS 8.1. We plan to remove Six in a future version.
An unexpected error - No Stripe Payment Method found from token
This error indicates that the system could not transmit some of the required data to Stripe. This is usually due to outdated order form templates. Check this issue using the Twenty-One or Six system theme and the Standard Cart order form template.
Client Area System Themes
We introduced Twenty-One in WHMCS 8.1. We plan to remove Six in a future version.
This can also be caused by a JavaScript error from custom code (for example, template changes, hooks, or addons) preventing the standard Stripe JavaScript from running correctly. Your browser console will show whether a JavaScript error is occurring.
- If one is, the custom JavaScript will need to be corrected.
- If the JavaScript error is coming from a third-party customisation, contact the developer for assistance.
If the issue persists, contact our support team.
Error Updating Remote Pay Method: Remote Storage Failed
You can find information about this error in the Gateway Log at Billing > Gateway Log.
Stripe India Accounts
India-based Stripe accounts require the following additional conditions for a successful payment capture:
- The client's address and billing contact must use a valid Indian postal address.
- The payment card must be from an Indian bank.
- The invoice must use INR as the currency.
To automatically convert invoice totals into other currencies upon payment in WHMCS:
- Go to Configuration () > System Settings > Currencies.
- Add INR as an additional currency.
- Go to Configuration () > System Settings > Payment Gateways or, prior to WHMCS 8.0, Setup > Payments > Payment Gateways.
- Set Convert To For Processing on the Stripe gateway to INR.
For more information about the additional Stripe requirements for Indian Stripe accounts, see Stripe's documentation.