🎉 Celebrate with 10% OFF on All Products! Use Code: GFEX10 Or Buy Any 2+ Items for 30% OFF with Code: GFEX30!
Guides & Tutorials November 9, 2026

How to Take MoMo Payments with Gravity Forms (Vietnamese Dong, QR and App)

GravityExtra
How to Take MoMo Payments with Gravity Forms (Vietnamese Dong, QR and App)

In Vietnam, many customers would rather pay with the e-wallet on their phone than type a card number into a website. MoMo is one of the wallets they already use every day: they scan a QR code, confirm with their PIN or fingerprint, and the payment is done. Gravity Forms is the form builder many WordPress sites use for bookings, orders, registrations and donations. This tutorial shows how to connect the two, so that every form submission becomes a MoMo payment for the exact form total in Vietnamese dong, and every payment is confirmed by MoMo before your team sees it as paid.

We use the Gravity Forms MoMo Premium Add-on, a small plugin that talks to the MoMo payment API from your server. With your test keys ready, it takes about fifteen minutes from installing the plugin to your first test payment.

Why take MoMo payments through Gravity Forms?

A common way to start is manual: a customer fills in a form, a team member sends a bank transfer note or a payment request over chat, and someone later checks the account to see whether the money arrived and which booking it belongs to. That works for a few orders a week, but it is slow for customers, and matching transfers to bookings by hand gets error-prone as the numbers grow.

With the form and the payment joined together, the customer pays straight after submitting, the amount always matches what they chose in the form, and the entry in Gravity Forms shows the payment status, the MoMo transaction ID and any refunds. Your notification emails can wait until the payment is confirmed, so nobody starts work on an unpaid booking. If you also serve customers who prefer English, the plugin works the same way; MoMo shows its messages in Vietnamese or English.

How the payment works

  • The customer fills in your form and sees the total in dong, for example 1,250,000 ₫.
  • When they submit, your server creates a MoMo payment for that exact total and sends the customer to the MoMo payment page.
  • On a computer they scan the QR code with the MoMo app; on a phone the MoMo app opens directly. They confirm in the app.
  • They come back to your form page, and the plugin asks MoMo for the payment result before it shows your thank-you message.

Forms that work well with MoMo

  • Class and workshop bookings with a fixed price per seat.
  • Event registrations with ticket types and quantities.
  • Deposits for services, for example a photo shoot, a repair or a consultation.
  • Simple product orders where a full online shop would be too much.
  • Donations and membership fees with a chosen amount.

What you need

  • WordPress with Gravity Forms 2.9 or newer.
  • A MoMo business account and its integration keys: partner code, access key and secret key (test keys first, production keys later).
  • The MoMo test app and a test account, to pay test orders.
  • For live payments, a site on https with pretty permalinks, so MoMo can send its payment notifications to it.

Vietnamese dong without decimals

One detail is easy to miss. The Vietnamese dong has no decimals, and Gravity Forms does not list it by default. A dong set up like a two-decimal currency would show 1,250,000.00 and, worse, a dong written with dot thousands could make Gravity Forms read a typed “150.000” as 150. The plugin adds the dong to Gravity Forms as “1,250,000 ₫” with comma thousands and no decimals. The total on the form, the amount sent to MoMo and the amount on the entry are the same whole number of dong.

Item Value
Currency Vietnamese dong (VND) only, the currency MoMo takes
Decimals None: every amount is a whole number of dong
Shown in forms as 1,250,000 ₫ (comma thousands, the dong sign after the number)
Smallest payment 1,000 VND
Largest payment 50,000,000 VND (a filter can lower it)
Smallest refund 1,000 VND

Step 1: Install the plugin and connect your MoMo account

MoMo settings: Test or Live mode, the partner code and the masked access key and secret key of each mode, the currency line for Vietnamese dong, the connection line and the payment notification address
Settings: paste the partner code, access key and secret key of each mode; the notification address is sent with every payment.
  1. Upload and activate the plugin, then activate your licence key in Forms → Settings → MoMo.
  2. Leave the mode on Test.
  3. Paste the test partner code, access key and secret key from the MoMo Business portal and save. The plugin checks the keys with MoMo without creating anything, stores the access key and secret key encrypted and only ever shows their first and last four characters.
  4. In Forms → Settings, set the Gravity Forms currency to Vietnamese Dong (VND).

Step 2: Check the notification address

MoMo tells your site about each payment by posting the result to a notification address, even when the customer closes the browser right after paying. You do not have to set this up in the MoMo portal: the plugin sends its address with every payment. Just make sure your site uses https and pretty permalinks; the settings page warns you otherwise.

Every notification is checked against your secret key. A notification with a wrong or missing signature is refused, and a correct one is only a signal: the plugin still reads the payment from MoMo before it changes anything, and answers MoMo with the empty response it expects.

Step 3: Build the form

A pottery class booking form with quantities, the customer name, email and phone, and the total in Vietnamese dong, 1,250,000 ₫, with the Continue to payment button
The form: Gravity Forms works out the total in Vietnamese dong; the customer pays it on the MoMo payment page.

Create the form as usual. Add a name field, an email field, a phone field, your product fields and a total field. Prices follow the Gravity Forms currency, so a class at 450000 shows as 450,000 ₫. Gravity Forms works out the total in the browser for the customer and again on your server when the form is submitted; the plugin always uses the server total.

Step 4: Add a MoMo feed

The MoMo feed: products and services with the form total, the customer name, email and phone mapping, the order information with merge tags and notifications after payment
The feed: map the customer name, email and phone, and write the order information the customer sees in the MoMo app.

Open the form settings, choose MoMo and add a feed. Pick Products and Services (or Donations), map the customer name, email and phone to your fields, and write the order information, such as “Pottery class #{entry_id}”. The customer sees it on the MoMo payment page and in the MoMo app, and you see it in the MoMo Business portal. Keep “Send form notifications only after the customer has paid” ticked if your team should only hear about paid bookings.

Step 5: Test with the MoMo test app

An entry paid through MoMo: the MoMo box with the status, amount, MoMo transaction ID, payment type, order ID and result code, the Refresh status button and the refund form, and the entry notes
The entry: status, MoMo transaction ID and payment type, read back from MoMo, with refunds one click away.

Open your form, fill it in and submit. You land on the MoMo payment page of the test environment. Scan the QR code with the MoMo test app, confirm, and you come back to your form page with the thank-you message. In Forms → Entries, the entry shows Paid, the MoMo transaction ID and a note that it was a test payment. Try a partial refund from the MoMo box on the entry to see how refunds are recorded. Then submit again and decline in the app: the customer is told nothing was charged and the entry becomes Cancelled.

What happens behind the scenes

  1. The form is checked on the server: the currency must be VND and the total must be a whole number of dong between 1,000 and 50,000,000.
  2. A payment is created for the exact amount, with a unique order ID for this attempt, the signed return address and the notification address. The request is signed with your secret key; the keys themselves are never sent.
  3. The answer must be successful, carry your order ID and amount, and contain an address on MoMo’s payment page; otherwise the customer stays on the form and nothing is charged.
  4. When the customer returns, when a notification arrives and every five minutes, the plugin asks MoMo for the payment status with a signed query.
  5. Only a payment that MoMo reports as successful, for your order ID and the entry amount, with a MoMo transaction ID, marks the entry Paid. Anything else is noted and left for you to check.

Why the read-back matters

A notification or a return address on its own only says that something happened. Asking MoMo for the payment with your own keys shows what really happened: whether it was paid and for how much. The plugin never marks an entry Paid without it.

A worked example

A pottery studio in Hanoi sells a two-hour wheel class at 450,000 ₫ and a glaze and firing kit at 350,000 ₫. A customer books two classes and one kit. The form shows 1,250,000 ₫. On submit, the plugin creates a MoMo payment with an amount of 1250000 and the order information “Pottery class #1042”. The customer scans the QR code and confirms in the app. The payment notification arrives a few seconds later; its signature is valid, so the plugin asks MoMo for the payment: successful, 1,250,000 ₫, with its transaction ID. The entry becomes Paid, the held booking email goes out, and the transaction ID is stored on the entry. The next week the customer cancels one class, and the studio refunds 450,000 ₫ from the entry. The refund is recorded once, and the entry stays Paid with 800,000 ₫ left.

How it differs

  • It connects to your own MoMo business account directly with the MoMo payment API, so the money is settled by MoMo to your account under your own MoMo agreement.
  • It never trusts the return address or the payment notification on its own. The notification signature is checked with your secret key, and then the payment is read back from MoMo. Only a successful payment with the entry’s order ID and exact amount marks the entry Paid.
  • It adds the Vietnamese dong to Gravity Forms with no decimals and comma thousands, so a total of 1,250,000 ₫ is sent to MoMo as exactly 1250000, never 1,250 and never one hundred times too large.
  • Refunds, including several partial refunds, are made from the Gravity Forms entry and recorded once per MoMo refund, together with refunds you make in the MoMo Business portal.

Tips for smooth payments

  • Keep prices in whole dong, for example 450000, and let Gravity Forms show them as 450,000 ₫.
  • Write clear order information with the entry number, so your team can find the payment in the MoMo Business portal quickly.
  • Map the phone field: Vietnamese mobile numbers are sent to MoMo so the customer can get a notice in the app.
  • Check the Payment notifications line in the settings after your first payment: it shows when the last valid notification arrived.
  • Remember MoMo’s limits for one payment: from 1,000 VND to 50,000,000 VND.

Step 6: Go live

When your tests look right, paste the production partner code, access key and secret key, switch the mode to Live and save. Make one small real payment and refund it. Each entry remembers whether it was paid in Test or Live, so older test entries keep working.

Questions

Do payment details reach my website?

No. The customer confirms the payment in the MoMo app. Your site only receives the payment result from MoMo and reads it back to be sure.

Which currency can I use?

Vietnamese dong (VND), the currency MoMo takes. The plugin adds it to Gravity Forms with no decimals.

What if the payment notification never arrives?

The plugin also reads the payment when the customer returns and every five minutes, so the entry is updated anyway.

Can I refund part of a payment?

Yes, several partial refunds of at least 1,000 VND each, up to the paid amount, from the entry screen. Refunds made in the MoMo Business portal are recorded too.

Are recurring payments supported?

Not in this version. The plugin handles one-off payments for products, services and donations.

Get started

Get the Gravity Forms MoMo Premium Add-on and follow the setup guide. Plans: one site $49 a year, five sites $69 a year, unlimited sites $199 a year.

0
0
Your Cart
Your cart is emptyReturn to Shop
🔥 FREQUENTLY BOUGHT TOGETHER
Complete Combo & Save 40%!
ITEM IN YOUR CART
Gravity Forms Klaviyo Add-on
$39.00/yr
+
🎁 RECOMMENDED ADD-ON SAVE 40% OFF
Original Price: $39.00/yr
Bundle Special Price: $23.40/yr