DEV Community

Cover image for QR payment gateway with multi-channel balance alerts
Nguyễn Hương
Nguyễn Hương

Posted on

QR payment gateway with multi-channel balance alerts

When every bank-transfer order needs someone watching the banking app

For many online stores, accepting bank transfers is still a manual job. The customer sends the money, then a screenshot. The seller opens the banking app, scrolls through transactions, and only then confirms the order.
This approach has four weak spots:
• Slow: customers wait for confirmation, and orders stall outside business hours.
• Error-prone: several orders share the same amount, and customers mistype the transfer note or send too little.
• Risky: a screenshot does not prove the money actually reached the account.
• Hard to coordinate: sales, warehouse and accounting all need to know the money is in, but only the account holder can see the banking app.
PionPay's payment gateway solves this with one simple principle. Customers just scan. The moment the money lands, the balance alert is already where you work.

How does the PionPay payment gateway work?

Going from scan to confirmed order takes 5 steps, and none of them are manual:

  1. A payment QR code is created for the order. It holds the receiving account, the amount and the transfer note for that order.
  2. The customer scans it with their banking app and confirms. There is no account number or amount to type, so fewer mistakes.
  3. The money arrives in the linked bank account. PionPay records the balance change instantly.
  4. PionPay sends an alert to the channels you have set up: Telegram, Zalo, Google Sheets or a webhook on your online store.
  5. The order is confirmed automatically as soon as the customer pays. The transaction is also categorized and recorded in your income and expense log.

PionPay connects withbanks, including VPBank, BIDV, ACB, TPBank and PGBank. All your accounts come together in a single dashboard.

Where do alerts go? Pick the channels that fit how you work
Everyone in a store needs to hear about incoming money in a different way. Owners want it on their phone, accountants need records, and the website needs a signal to update orders on its own. PionPay sends each balance change to the right channel for each need.

On the Business plan, the balance sharing feature lets several people see incoming payments without anyone being given access to the banking app.
For developers: receiving webhooks on your online store
If you run your own website or sales software, the webhook moves orders to "Paid" automatically. Each time the balance changes, PionPay sends an HTTP request to the URL you register. The example below uses Node.js (Express). Field names are for illustration only, so follow PionPay's integration documentation when you build it.

import express from "express";

const app = express();
app.use(express.json());

const processed = new Set(); // in production: a DB table with a unique key on the transaction ID

app.post("/webhooks/pionpay", async (req, res) => {
  // 1. Verify the sender as described in the integration guide
  if (!isFromPionPay(req)) return res.sendStatus(401);

  // 2. Illustrative field names
  const { transactionId, amount, description } = req.body;

  // 3. Process each transaction only once
  if (processed.has(transactionId)) return res.sendStatus(200);
  processed.add(transactionId);
  res.sendStatus(200); // respond right away, run business logic afterwards

  // 4. Match the order code in the transfer note (e.g. DH123456)
  const orderCode = description?.toUpperCase().match(/DH\d{6}/)?.[0];
  if (orderCode) await markOrderPaid(orderCode, amount, transactionId);
});

Enter fullscreen mode Exit fullscreen mode

A few tips for the integration:
• Always verify the sender before updating an order. Do not trust every request that reaches your webhook URL.
• Check the amount against the order total, and handle underpayments and overpayments separately.
• Send transactions with no matching order code to a manual review queue. Never guess which order they belong to.
Get started with the PionPay payment gateway
Both plans include the payment gateway and Webhook/API:

Business: VND 50,000/month
1 bank account, balance sharing, payment gateway, Webhook/API
Individual: VND 99,000/month
1 account, unlimited transactions, payment gateway, Webhook/API

You can start accepting payments automatically in 4 steps:

  1. Sign up for a PionPay account.
  2. Link the bank account that receives payments.
  3. Choose where to get alerts: Telegram, Zalo, Messenger, Google Sheets or webhook.
  4. Create a QR code for each order and send it to your customer.

From then on, customers just scan and PionPay takes care of the rest. Sign up now at pionpay.vn, or message PionPay on Facebook

Top comments (4)

Collapse
 
longpiepie profile image
Long Pie •

How does the PionPay payment gateway work?

Collapse
 
anhanh_anime profile image
anh anh •

This approach has four weak spots:
• Slow: customers wait for confirmation, and orders stall outside business hours.
• Error-prone: several orders share the same amount, and customers mistype the transfer note or send too little.
• Risky: a screenshot does not prove the money actually reached the account.
• Hard to coordinate: sales, warehouse and accounting all need to know the money is in, but only the account holder can see the banking app.🥰🥰

Collapse
 
longpiepie profile image
Long Pie •

good

Some comments may only be visible to logged-in visitors. Sign in to view all comments.