Recurring Payments
This guide explains how to implement subscription and recurring billing functionality with xMoney. Our API provides flexible options for managing recurring payments, trial periods, and automatic rebilling.
Overview
Recurring payments allow merchants to charge customers on a regular schedule without requiring the customer to manually authorize each transaction. This is ideal for subscription services, membership plans, and installment payments.
Key Concepts
Order Types
xMoney supports several order types for different payment scenarios:
- Purchase: One-time payment (non-recurring)
- Recurring: Automated recurring payments based on a defined schedule
- Managed: Merchant-initiated recurring payments that are manually triggered
- Credit: Used for credit transactions
Interval Types
Recurring payments can be scheduled at different intervals:
- Day: Daily billing (e.g., every 7 days)
- Month: Monthly billing (e.g., every 1 month)
Setting Up Recurring Payments
To set up a recurring payment plan, you need to create an order with orderType
set to recurring
and specify the following parameters:
Required Parameters
Parameter | Type | Description |
---|---|---|
orderType | string | Must be set to recurring |
intervalType | string | Billing period type (day or month ) |
intervalValue | integer | Numeric value of the interval (e.g., 1, 7, 30) |
Optional Parameters
Parameter | Type | Description |
---|---|---|
trialAmount | number | Amount to charge for the initial/trial period (if different from the regular amount) |
firstBillDate | string | Date when the first recurring payment should be processed (ISO 8601 format) |
retryPayment | string | Comma-separated list of retry intervals for failed payments (ISO 8601 Duration format) |
API Endpoints
Create a Recurring Payment Plan
POST /order
Example Request
curl -X POST \
https://api.xmoney.com/order \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'customerId=12345&orderType=recurring&amount=29.99¤cy=USD&ip=192.168.1.1&intervalType=month&intervalValue=1&description=Monthly%20Subscription&trialAmount=1.00'
Example Response
{
"code": 200,
"message": "Success",
"data": {
"orderId": 67890,
"orderStatus": "start"
}
}
Update a Recurring Payment Plan
PUT /order/{id}
Example Request
curl -X PUT \
https://api.xmoney.com/order/67890 \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'customerId=12345&orderType=recurring&nextDueDate=2023-12-01T00:00:00Z&intervalType=month&intervalValue=1'
Trial Periods
You can set up a trial period with a different amount by using the trialAmount
parameter. When this parameter is provided:
- The customer is initially charged the trial amount
- The system automatically switches to the regular amount for subsequent billings
- The description will show as "{intervalValue} {intervalType} subscription trial"
Payment Retry Logic
If a recurring payment fails, xMoney will automatically retry based on:
- The retry schedule defined in
retryPayment
parameter (if provided) - The system's default retry schedule if none is specified
The retry intervals should be specified using ISO 8601 Duration format. For example:
P1D
- retry after 1 dayP3D,P7D,P14D
- retry after 3 days, then 7 days, then 14 days
During retry attempts, the order status will change to retrying
. If all retry attempts fail, the order will be marked as complete-ok
but no further payments will be processed.
Handling Failed Payments
For certain failure reasons, xMoney employs special handling:
- Insufficient funds: May attempt a micro-payment for orders over a certain amount
- Provider errors: Will retry after 24 hours
- Transaction limits exceeded: Will retry after 24 hours
- Blacklisted cards: Will retry according to the configured retry schedule
Managing Recurring Orders
Extending the Billing Period
To extend the next billing date for an active recurring order:
curl -X PUT \
https://api.xmoney.com/order/67890 \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'customerId=12345&orderType=recurring&nextDueDate=2023-12-15T00:00:00Z'
Changing Payment Method
To update the payment method for future recurring payments:
curl -X PUT \
https://api.xmoney.com/order/67890 \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'customerId=12345&orderType=recurring&transactionMethod=card&cardId=c_123456'
Best Practices
- Clear descriptions: Use descriptive names for subscription plans to avoid customer confusion
- Appropriate trial amounts: Set trial amounts that are small enough to encourage sign-ups but sufficient to validate payment methods
- Strategic retry schedules: Configure retry intervals based on your business model and customer payment patterns
- Customer communication: Notify customers before rebilling and when payment methods fail
- Saved payment methods: Always use the
saveCard
parameter when processing the initial payment for recurring orders
Troubleshooting
Issue | Possible Cause | Solution |
---|---|---|
Recurring payments not processing | Missing or invalid interval settings | Verify intervalType and intervalValue are correctly set |
Trial payment processed but no rebilling | Incorrect firstBillDate | Ensure firstBillDate is in the future and in the correct format |
Failed rebilling attempts | Expired or declined payment method | Update the payment method using PUT /order/{id} |
Unexpected trial amount | trialAmount parameter confusion | Check if trialAmount is set correctly in your API call |
For additional assistance with recurring payments, please contact xMoney support.