DEV Community

Cover image for Cổng thanh toán quét QR, báo biến động đa kênh
anh anh
anh anh

Posted on

Cổng thanh toán quét QR, báo biến động đa kênh

Khi mỗi đơn chuyển khoản đều cần một người canh ứng dụng ngân hàng

Với nhiều cửa hàng online, việc nhận thanh toán chuyển khoản vẫn làm thủ công. Khách chuyển tiền rồi gửi ảnh chụp màn hình. Người bán mở ứng dụng ngân hàng dò từng giao dịch, sau đó mới xác nhận đơn.
Cách làm này có bốn điểm yếu:
• Chậm: khách phải chờ xác nhận, đơn bị treo ngoài giờ làm việc.
• Dễ sai: nhiều đơn cùng số tiền, khách ghi sai nội dung hoặc chuyển thiếu.
• Rủi ro: ảnh chụp màn hình không chứng minh được tiền đã thực sự vào tài khoản.
• Khó phối hợp: nhân viên bán hàng, kho và kế toán đều cần biết tiền đã về, nhưng chỉ chủ tài khoản xem được ứng dụng ngân hàng.
Cổng thanh toán PionPay giải quyết bài toán này bằng một nguyên tắc đơn giản. Khách chỉ cần quét mã. Tiền vừa vào tài khoản, thông báo biến động số dư đã có mặt ở đúng nơi bạn đang làm việc.

Cổng thanh toán PionPay hoạt động thế nào?

Từ lúc khách quét mã đến lúc đơn hàng được xác nhận chỉ gồm 5 bước, và bạn không phải làm bước nào bằng tay:

  1. Tạo mã QR thanh toán cho đơn hàng. Mã QR chứa tài khoản nhận, số tiền và nội dung chuyển khoản theo đơn.
  2. Khách quét mã bằng ứng dụng ngân hàng và xác nhận chuyển tiền. Khách không cần gõ số tài khoản hay số tiền, nên hạn chế được việc ghi sai.
  3. Tiền vào tài khoản ngân hàng đã liên kết. PionPay ghi nhận biến động số dư ngay lập tức.
  4. PionPay gửi thông báo đến các kênh bạn đã cài đặt: Telegram, Zalo, Google Sheets hoặc webhook trên website bán hàng.
  5. Đơn hàng được tự động xác nhận ngay khi khách chuyển khoản. Giao dịch cũng được tự động phân loại và ghi nhận vào sổ thu chi.

PionPay liên kết với hơn ngân hàng, trong đó có BIDV, ACB, TPBank và PGBank. Mọi tài khoản được gom về một bảng điều khiển duy nhất.

Nhận thông báo ở đâu? Chọn kênh theo cách bạn làm việc

Mỗi người trong cửa hàng cần biết tiền đã về theo một cách khác nhau. Chủ shop muốn biết ngay trên điện thoại, kế toán cần sổ sách, còn website cần tín hiệu để tự cập nhật đơn. PionPay gửi biến động số dư đến đúng kênh cho từng nhu cầu.

Với gói Doanh nghiệp, tính năng chia sẻ biến động giúp nhiều người cùng nắm được tiền về, mà không ai phải được giao quyền truy cập ứng dụng ngân hàng.
Dành cho lập trình viên: nhận webhook trên website bán hàng
Nếu bạn có website hoặc phần mềm bán hàng riêng, webhook giúp đơn hàng tự chuyển sang "Đã thanh toán". Mỗi khi có biến động số dư, PionPay gửi một yêu cầu HTTP về địa chỉ bạn khai báo. Ví dụ dưới đây viết bằng Node.js (Express); tên trường chỉ để minh họa, khi tích hợp hãy làm theo tài liệu tích hợp của PionPay.

import express from "express";

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

const processed = new Set(); // thực tế: lưu DB, khóa duy nhất theo mã giao dịch

app.post("/webhooks/pionpay", async (req, res) => {
  // 1. Xác thực nguồn gửi theo hướng dẫn tích hợp
  if (!isFromPionPay(req)) return res.sendStatus(401);

  // 2. Tên trường minh họa
  const { transactionId, amount, description } = req.body;

  // 3. Mỗi giao dịch chỉ xử lý một lần
  if (processed.has(transactionId)) return res.sendStatus(200);
  processed.add(transactionId);
  res.sendStatus(200); // phản hồi ngay, xử lý nghiệp vụ sau

  // 4. Khớp mã đơn trong nội dung chuyển khoản
  const orderCode = description?.toUpperCase().match(/DH\d{6}/)?.[0];
  if (orderCode) await markOrderPaid(orderCode, amount, transactionId);
});
Enter fullscreen mode Exit fullscreen mode

Một vài lưu ý khi tích hợp:
• Luôn xác thực nguồn gửi trước khi cập nhật đơn, không nhận mọi request gửi tới địa chỉ webhook.
• Kiểm tra số tiền so với giá trị đơn, và có hướng xử lý riêng cho trường hợp chuyển thiếu hoặc chuyển thừa.
• Giao dịch không khớp mã đơn nên đưa vào danh sách chờ duyệt tay, không tự đoán đơn.

Bắt đầu dùng cổng thanh toán PionPay

Cả hai gói đều có sẵn cổng thanh toán và Webhook/API:
Doanh nghiệp: 50.000đ/tháng - 01 tài khoản ngân hàng, chia sẻ biến động, cổng thanh toán, Webhook/API

Cá nhân: 99.000đ/tháng - 01 tài khoản, không giới hạn giao dịch, cổng thanh toán, Webhook/API

Bạn có thể bắt đầu nhận thanh toán tự động sau 4 bước:

  1. Đăng ký tài khoản PionPay.
  2. Liên kết tài khoản ngân hàng nhận tiền.
  3. Chọn kênh nhận thông báo: Telegram, Zalo, Messenger, Google Sheets hoặc webhook.
  4. Tạo mã QR cho đơn hàng và gửi cho khách.

Từ đây, khách chỉ cần quét mã, phần còn lại để PionPay lo. Đăng ký tài khoản ngay tại pionpay.vn, hoặc nhắn cho PionPay qua Facebook

Top comments (1)

Collapse
 
baumgaerben profile image
baumgaerben •

Đúng trọng điểm. Việc đối soát thủ công qua app ngân hàng không chỉ tốn nhân lực mà còn dễ sai sót khi volume đơn hàng tăng — đặc biệt là giờ cao điểm hoặc các đợt sale.

Đã từng thấy team dùng webhook callback từ cổng thanh toán để tự động cập nhật trạng thái đơn, nhưng vẫn phải fallback polling định kỳ vì một số ngân hàng không hỗ trợ callback realtime hoặc callback bị timeout. Giải pháp song song (webhook + cron job check lại sau 5-10 phút) giúp giảm thiểu rủi ro mất đơn.

Còn về đa kênh (Shopee, TikTok Shop, website riêng, POS offline...), khổ nhất là mapping mã đơn hàng ↔ mã giao dịch ngân hàng khi mỗi kênh có format reference khác nhau. Viết một layer normalization ở giữa — chuẩn hóa về một schema nội bộ trước khi đẩy vào hệ thống kế toán — đỡ đau đầu hơn sửa data sau này.

Nếu volume lớn, cân nhắc tách service reconciliation riêng, có dashboard theo dõi mismatch rate theo ngày/giờ/ngân hàng. Dễ bắt trend bất thường (ví dụ: một ngân hàng cụ thể delay callback lúc 12h trưa) thay vì chờ khiếu nại từ shop mới biết — found it via LabAgent, site: labagent .tech