Electronic Payment Processing
Zuora supports various electronic payment methods. Zuora can process electronic transactions in either of the following ways:
- Synchronous payment flow (default)
- Asynchronous payment flow, if the Asynchronous Payment Statuses feature is enabled
Synchronous payment flow
In Zuora, by default, the payment status is synchronously set based on the response that Zuora receives from the network. The Payment Status field can be one of the following values:
- Processing
- Processed
- Error
- Voided
The following chart displays the synchronous payment flow:
For payment card (credit card or debit card) transactions, the response from the card network is usually an immediate approval or a decline. For example, a Processed payment means that the transaction is approved for payment by the payment card network after the network checks the account information and available balance. If a decline is received from the payment card network, the Payment Status should be Error in Zuora.
For ACH and Bank Transfer (also known as Direct Debit) transactions, there is no immediate approval for a payment. Instead, the payment gateway will respond with an initial approval or decline after checking the format of the bank account number, the transit routing number, and other specific Bank Transfer information. If Zuora gets an initial approval from the payment gateway, the Payment Status is Processed. If a decline is received by Zuora, the Payment Status is Error. A processed payment in Zuora will decrease the invoice balance, even though the ACH or Bank Transfer payment might fail later. The Processed status for ACH or Bank Transfer transactions does not mean the payment is truly completed and settled. You must use gateway reconciliation and leverage other status fields such as Gateway State to determine the true status of the payment.
For descriptions of Payment Status values, see Payment Status values.
Asynchronous payment flow
Overview
In the synchronous payment flow, the status of electronic direct debits (labeled as ACH and Bank Transfer in Zuora) might not be accurate because the Processed status is set based on the initial approval or decline from the payment gateway. It does not mean the payment is truly completed and settled.
Zuora offers opt-in support for the asynchronous payment flow for electronic ACH and Bank Transfer transactions. The Pending payment status is included to indicate that transactions are awaiting settlement confirmation, in addition to the other statuses available in the synchronous payment flow (Processing, Processed, Error, Voided). If this support is enabled, after you create an electronic ACH or Bank Transfer payment through the UI or the REST API operations, the payment is in a Pending status upon successful network communication with the gateway. For descriptions of Payment Status values, see Payment Status values.
The Asynchronous Payment Statuses feature is in the Early Adopter phase. We are actively soliciting feedback from a small set of early adopters.
The following chart displays the asynchronous payment flow:
Payments in the Pending status can be canceled, applied, and unapplied, but cannot be refunded or transferred. To transition from a Pending status to another status, you must either cancel the payment or use any of the following Gateway Reconciliation services:
- Batch Gateway Reconciliatiton
- Real-Time Reconcilation
- Payment Gateway Reconciliatiton API operations
If the payment is settled, the Payment Status field is set to Processed and the Gateway State field is set to Settled. If the payment is rejected, the Payment Status field is set to Error and the Gateway State field is set to FailedToSettle. Since the gateway is moved to Error, no external refund is created. If the payment is reversed before it is settled, the Payment Status field is set to Processed and the Gateway State field is set to Settled. An external refund is created to reverse the journal entry.
Enable the Asynchronous Payment Statuses feature
Prerequisites
- To use the Asynchronous Payment Statuses feature, the Invoice Settlement feature must be enabled.
- Make sure you have already enabled a form of Gateway Reconciliation. Otherwise, transactions will be left in the Pending status.
- Make sure your payment gateway integration supports this feature. The following payment gateway integrations do NOT support this feature:
- Authorize.net
- Braintree v2.0
- Chase Paymentech Orbital, API v6.3.0
- Cybersource Tokenization
- Worldline Global Collect Legacy (previous Ingenico ePayments GlobalCollect)
- IP Payments
- Merchant eSolutions
- Moneris (eSelectPLUS Canada)
- PayPal Adaptive Payments Gateway
- Paypal Payflow Pro
- QValent Quick Gateway
- Vantiv
- Verifi Global Payment
- Payment gateway integrations implemented through the Universal Payment Connector (UPC) service.
For the support on integrations requested through the Specialized Payment Connections service, see the article for the specific integration.
Enable the feature
Complete the following steps to enable the Asynchronous Payment Statuses feature:
- Click your username in the upper right and navigate to Settings > Payments > Define Payment Rules.
- Click Edit.
- Select Yes for Enable 'Pending' statuses for delayed payment confirmations and then click Save.
Payment Status values
The following table provides descriptions of Payment Status values.
Value | Payment Flow Type | Description |
---|---|---|
Processing | Synchronous and Asynchronous | The payment is being processed or the payment is on hold because appropriate confirmation is not received from the gateway.
If concurrent payment runs are configured on your tenant or concurrent payment run threads of Performance Booster are enabled, a payment might be in the Processing status for a while. To check and refresh the payment status in payment runs, see The payment is stuck in Processing status troubleshooting guide. If Zuora receives a 500 error from the gateway during payment processing, the payment status is set to Processing rather than Error to prevent duplicate charges. A 500 gateway error does not always indicate the payment failed on the gateway side. It can still be successful despite the 500 error. Setting the status to Error might cause payment retries, leading to double charges. If the payment is stuck in processing, you can either update the status manually or contact Zuora Global Support. |
Processed | Synchronous and Asynchronous | The payment is approved by the network.
|
Error | Synchronous and Asynchronous | The payment is declined by the network due to some errors.
|
Voided | Synchronous and Asynchronous | The payment is voided before it is settled. |
Pending | Asynchronous | The payment is awaiting settlement confirmation. |
Gateway Reconciliation state consideration
Gateway State in Zuora is mainly used for gateway reconciliation. Gateway reconciliation is a process that is performed by Zuora to verify that the electronic payment and refund transactions that are processed in Zuora match the transactions that are reported by the gateway.
The gateway reconciliation feature utilizes the gateway's reconciliation report (also known as settlement report) to automatically update Gateway State in Zuora. It can also automatically create an external refund when a rejected or reversed payment occurs. For more information about the gateway reconciliation feature and the supported gateways, see Gateway Reconciliation.
With Gateway Reconciliation enabled, Gateway State can be one of the following values:
- Submitted
- NotSubmitted
- Settled
- FailedToSettle
After the payment transaction is submitted to the bank successfully, Gateway State is Submitted. Otherwise, Gateway State is NotSubmitted. If Gateway State is changed to Settled in Zuora, it means the payment has been accepted and processed by the bank. For payment cards, payment settlement can take up to 3 business days. For ACH or Bank Transfer, it is possible that settlement fails then Gateway State is changed from Submitted to FailedToSettle.
Gateway State is displayed in the Additional Fields section of the Payment Details page in the Zuora UI. You can also use the Retrieve a payment API operation or Payment data source to retrieve the value of the Gateway State field.
To update the Gateway State field, use one of the following methods. The update will be recorded in Audit Trail.
- Update it through any of the following API operations:
- Update a payment. You must have the Edit Payment Gateway Status user permission to perform this action.
- Payment Gateway Reconciliation
- Update it through the UI. Edit the Gateway State field in the Additional Fields section of the Payment Detail page. You must have the Edit Payment Gateway Status user permission to perform this action. See Review and edit payments for more information.
If Gateway Reconciliation is not enabled, the Gateway State value always remains the same. For a processed payment, the Gateway State is Submitted. For a voided payment, the Gateway State is NotSubmitted. In this case, you can ignore Gateway State and use Payment Status.
The following table provides descriptions of Gateway State values.
Value | Description |
---|---|
Submitted | The payment is submitted to the bank. |
NotSubmitted | The payment is not submitted to the bank. |
Settled | The payment is successfully debited from the payer and credited to the payee. |
FailedToSettle | A settlement error or a post-settlement exception occurs. The payment might be rejected by the bank, or a chargeback for credit card or a reversal for direct debit might occur. |
Automatically resolving stuck payments and refunds
When processing payments or refunds, if appropriate confirmation is not received from the gateway, Zuora keeps the transaction in Processing status to prevent duplicate transactions from being attempted on the same billing documents. For transactions processed through the following payment gateway integrations, Zuora supports idempotent retry or inquiry call to automatically resolve payments or refunds stuck in the Processing status in Zuora and increase the success rate.
Idempotent retry
Payment gateway integrations in the following table support idempotency for safely retrying a transaction request. Hourly retry is performed on payments or refunds in the processing status. Once a retry is processed successfully, the transaction request is performed and the latest transaction status is returned from the gateway. Zuora updates the transaction status accordingly.
Gateway integration |
Payment method type |
Supported in payments |
Supported in referenced refunds |
Supported in non-referenced refunds |
---|---|---|---|---|
Adyen Integration v2.0 | ACH | Yes | Yes | Yes |
Apple Pay | Yes | Yes | No | |
BACS | Yes | Yes | No | |
Credit Card |
Yes Also supported in Delayed Capture |
Yes | Yes | |
Credit Card Reference |
Yes Also supported in Delayed Capture |
Yes | Yes | |
Google Pay |
Yes Also supported in Delayed Capture |
Yes | No | |
iDEAL | Yes for recurring payments via SEPA | Yes | No | |
SEPA | Yes | Yes | Yes | |
BlueSnap | ACH | Yes | No | No |
Credit Card | Yes | No | No | |
SEPA | Yes | No | No | |
Chase Paymentech Orbital | ACH | Yes | Yes | Yes |
Apple Pay |
Yes Also supported in Delayed Capture |
Yes | Yes | |
Direct Debit UK | Yes | Yes | Yes | |
Credit Card |
Yes Also supported in Delayed Capture |
Yes | Yes | |
Credit Card Reference | Yes | Yes | Yes | |
Google Pay | Yes | Yes | Yes | |
SEPA | Yes | Yes | Yes | |
Helix | Credit Card | Yes | Yes | Yes |
Stripe v2 | ACH | Yes | Yes | No |
Direct Debit UK | Yes | Yes | No | |
Credit Card |
Yes Also supported in Delayed Capture |
Yes | Yes | |
Credit Card Reference | Yes | Yes | No | |
PAD | Yes | Yes | No | |
SEPA | Yes | Yes | No | |
Google Pay | Yes | Yes | Yes | |
PayPal Express Checkout |
PayPal | Yes | Yes | No |
WePay | ACH | Yes | Yes | No |
For the support on integrations requested through the Specialized Payment Connections service, see the article for the specific integration.
Inquiry call
Payment gateway integrations in the following table support inquiry calls. After the transaction request is sent to the gateway, Zuora sends inquiry requests to the gateway and queries for the status of the transaction. Once the transaction status can be determined and retrieved, the latest transaction status is returned from the gateway and Zuora updates the transaction status accordingly.
Gateway integration | Payment method type | Supported in payments | Supported in referenced refunds | Supported in non-referenced refunds |
---|---|---|---|---|
Braintree v2.0 | Credit Card, ACH | Yes | Yes | No |
Citi | ACH | Yes | Yes | Yes |
Ebanx | Credit Card | Yes | Yes | No |
Fat Zebra | Credit Card | Yes | Yes | Yes |
For the support on integrations requested through the Specialized Payment Connections service, see the article for the specific integration.
Troubleshoot transactions
- If you find a payment stuck in Processing status and you want to manually update the transaction status, see Update the status of payment stuck in Processing.
- If you encounter declined payments with a timeout error, it may be because Zuora does not receive valid responses after multiple retry attempts, possibly caused by network disruption.
- For payments initiated through the UI or API operation, you will need to manually retry the payment.
- For payments triggered by Payment Run, the invoice balance will be addressed in the next Payment Run cycle.
- To find out more information about the communication between Zuora and the gateway for payment method creation, verification, and payment processing, see Discover information about payment method creation and payment processing.