Set up future payments
Supported payment methods
Payment method | Country / Region |
---|---|
Card | Global |
DANA | Indonesia |
Boost | Malaysia |
Touch'n Go | Malaysia |
Alipay | China |
AlipayHK | Hong Kong |
GCash | Philippines |
KakaoPay | South Korea |
Rabbit LINE Pay | Thailand |
TrueMoney | Thailand |
Learn how to Set up payment information and charge them later
The Setup intent API lets you save your customer's payment details without initial payment and charge them in the future.
Use this integration to set up recurring payments or to create one-time payment with a final amount determined later, often after the customer receives your service.
Completing this integration requires six steps, and best practices can be found in the following use cases.
1. Create a Customer
Request
{
"email":"testsetup@gmail.com"
}
Response
{
"id": "cus_1704682776109776896",
"object": "customer",
"created": 1695263020000,
"livemode": false,
"address": {},
"email": "testsetup@gmail.com"
}
2. Create a SetupIntent
For now, we support card
as a payment method with SetupIntent. You can create a Setupintent with payment_method_types = ["card]
Request
{
"customer":"cus_1704682776109776896",
"payment_method_types" : ["card"],
"usage": "off_session",
"return_url":"https://wooshpay.com"
}
Response
{
"id": "seti_1704683221188345856",
"object": "setup_intent",
"created": 1695263126075,
"livemode": false,
"status": "requires_payment_method",
"customer": "cus_1704682776109776896",
"client_secret": "seti_1704683221188345856_secret_0ZrCdUri7enbgZwzRPTPoQXV",
"payment_method_types": [
"card"
],
"payment_method_options": {
"card": {
"request_three_d_secure": "auto",
"setup_future_usage": "off_session"
}
},
"return_url": "https://wooshpay.com"
}
Retrieve the client secret
Included in the returned SetupIntent is a client secret, which the client side uses to securely complete the payment process instead of passing the entire SetupIntent object.
3. Collect payment details
Pass the client secret from the previous step into options when you create the Element instance
<form id="payment-app">
<div>
<!--Wooshpay Will Inject the Payment Element At Here-->
</div>
<div class="submit-app">
<button id="submit-btn">Save card</button>
<div id="payment-err"></div>
</div>
</form>
<script src="https://js.wooshpay.com/v1/wooshpay.js"></script>
// Get your Dom
const app = document.getElementById("payment-app");
// Initialize Wooshpay
const wooshpay = Wooshpay("pk_test_xxxx" /* publishable key */, {
locale: "en",
});
const options = {
clientSecret: "{{CLIENT_SECRET}}",
// Fully customizable with appearance API.
appearance: {
/*...*/
},
};
// Set up Wooshpay.js and Elements using the SetupIntent's client secret
const elements = wooshpay.elements(options);
// Create and mount the Payment Element
elements.create("payment", {
billingDetails: "never", // billingDetails:'auto'
});
elements.mount(app);
4. Submit the payment details to Wooshpay
You can complete the setup using Wooshpay.confirmSetup. Provide a return_url
in this function so that customer can be redirected after they compelet setup.
const {error} = await wooshpay.confirmSetup({
//`Elements` instance that was used to create the Payment Element
elements,
confirmParams: {
return_url: 'https://XXXXXXXX',
}
});
5. Retrieve the payment method attached to the customer
To find a payment method to charge, list the payment methods associated with the customers using List a Customer's PaymentMethods.
Request
{
"type":"card"
}
6. Charge the saved payment method later
Using the Customer and PaymentMethod ID to create a payment intent.
When you already have the Customer and Paymentmethod IDs, create PaymentIntent with the amount and currency of the payment.
Before that, there are some parameters in PaymentIntent you need to know.
confirm
: If your set it totrue
, payment will be confirmed immediately when the paymentintent is created.- Set
payment_method
to the ID of the PaymentMethod andCustomer
to the ID of the Customer.
Create a PaymentIntent
Request
{
"amount": 1000,
"currency": "USD",
"confirm": true,
"off_session":false,
"customer":"cus_1704388704790904832",
"payment_method":"pm_1704478135803707392",
"return_url": "https://wooshpay.com"
}
Response
{
"id": "pi_1704478320244031488",
"object": "payment_intent",
"created": 1695214274000,
"livemode": false,
"currency": "USD",
"amount": 1000,
"status": "succeeded",
"customer": "cus_1704388704790904832",
"client_secret": "pi_1704478320244031488_secret_wqlE0XivPRU1d3zkAaJUir52",
"payment_method_types": [
"card"
],
"confirmation_method": "automatic",
"payment_method_options": {
"card": {
"request_three_d_secure": "auto",
"setup_future_usage": "off_session"
}
},
"return_url": "https://wooshpay.com",
"payment_method": "pm_1704478135803707392",
"amount_received": 1000,
"capture_method": "automatic",
"latest_charge": "ch_1704478320336306176"
}