Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Save payment details during a MoMo payment


Private preview

Save payment details during a MoMo payment Private preview

Learn how to save your customer's MoMo payment details from a payment.

Checkout

Elements

Direct API

You can use Stripe-hosted Checkout to collect payment method details and charge the saved payment method immediately.

Alternatively, you can set up future MoMo payments to collect MoMo payment method details in advance, and determine the final amount or payment date later.

First, you need a Stripe account. Register now.

To access the Stripe API from your application, use our official libraries:

Command Line

Select a language

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

# Available as a gem
sudo gem install stripe

Gemfile

Select a language

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

# If you use bundler, you can add this line to your Gemfile
gem 'stripe'

Create a Checkout Session Server-side

Your customer must authorize you to use their MoMo wallet for future payments through Stripe Checkout. Add a checkout button to your website that calls a server-side endpoint to create a Checkout Session.

Enable MoMo in your Dashboard. Stripe automatically displays MoMo to eligible customers using dynamic payment methods. If you currently specify payment_method_types, see the migration guide.

Create a Checkout Session in payment mode, and configure payment_intent_data.setup_future_usage to indicate that you want to set up the payment method for future usage.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Caution

Don’t rely on the redirect to the success_url alone for detecting payment initiation, because:

  • Malicious users could directly access the success _ url without paying and gain access to your goods or services.
  • After a successful payment, customers might close their browser tab before they’re redirected to the success _ url .

Retrieve the payment method Server-side

After a customer submits their payment details, retrieve the PaymentMethod object. A PaymentMethod stores customer MoMo wallet information for future payments. You can retrieve the PaymentMethod synchronously using the success_url or asynchronously using webhooks.

Determine whether to retrieve the PaymentMethod synchronously or asynchronously, based on your dropff tolerance. Customers might not always reach the success_url after a successful payment, for example, if they close their browser tab before the redirect occurs. You can use webhooks to prevent your integration from experiencing this type of dropoff.

Handle checkout.session.completed webhooks, which contain a Session object. Learn more about setting up webhooks. The following example is a checkout.session.completed response.

{
 "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0",
 "object": "event",
 "api_version": "2019-03-14",
 "created": 1561420781,
 "data": {
 "object": {
 "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k",
 "object": "checkout.session",
 "billing_address_collection": null,
 "client_reference_id": null,
 "customer": null,
 "customer_email": null,
 "display_items": [],
 "mode": "payment",
 "payment_intent": "pi_3MtwBwLkdIwHu7ix28a3tqPa",
 "submit_type": null,
 "subscription": null,
 "success_url": "https://example.com/success"
 }
 },
 "livemode": false,
 "pending_webhooks": 1,
 "request": {
 "id": null,
 "idempotency_key": null
 },
 "type": "checkout.session.completed"
}

Note the value of the payment_intent key, which is the ID for the PaymentIntent created with the Checkout Session. A PaymentIntent is an object that represents your intent to collect a payment from a customer and tracks the payment process. Retrieve the PaymentIntent object with the ID. The returned object contains a payment_method ID that you can charge future payments with.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Monitor webhooks Server-side

Stripe sends a payment_intent.succeeded event when the payment succeeds and the payment method is saved. If the payment fails, Stripe sends a payment_intent.payment_failed event.

Use these events to update your order status and provision goods or services only after the payment succeeds.

For security, verify incoming webhook signatures and allow traffic from Stripe public IP addresses.

Stripe sends a payment_intent.succeeded event when the payment completes. Use the Dashboard, a custom webhook, or a partner solution to receive these events and run actions, like sending an order confirmation email to your customer, logging the sale in a database, or starting a shipping workflow.

Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events also helps you accept more payment methods in the future. Learn about the differences between all supported payment methods.

  • Handle events manually in the Dashboard Use the Dashboard to view your payments, send email receipts, handle payouts, or retry failed payments.
  • Build a custom webhook Build a custom webhook handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI.
  • Integrate a prebuilt app Handle common business events, such as automation or marketing and sales, by integrating a partner application.

Charge a saved MoMo payment method Server-side

When you’re ready to charge your customer, use the customer’s ID and the PaymentMethod ID to create a PaymentIntent.

To find a momo instrument to charge, list the payment methods associated with your customer.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

When you have the customer and PaymentMethod IDs, create and confirm a PaymentIntent with the amount and currency of the payment. To charge your customer off session, set off_session to true. That indicates that the customer isn’t in your checkout flow during this payment attempt.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Note

The return_url parameter isn’t required when using a MoMo payment method that was previously set up with a SetupIntent or a PaymentIntent with setup_future_usage. It’s required for all other cases.

Test your integration

When testing your payment integration with your test API keys, select MoMo as the payment method and click Pay. If you successfully complete authorization on the redirect page, the PaymentIntent transitions from requires_action to succeeded. If you decline the authorization on this page, the PaymentIntent transitions from requires_action to requires_payment_method.

Last verified 2026-09-24

Is this helpful?