Skip to content

Commit

Permalink
Add sample for MoMo/ZaloPay QR
Browse files Browse the repository at this point in the history
  • Loading branch information
xuannghia committed May 27, 2024
1 parent 4c7db2b commit 10369f3
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 1 deletion.
63 changes: 62 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Vietnam QR Pay

Thư viện hỗ trợ encode/decode mã QR của VietQR & VNPayQR
Thư viện hỗ trợ encode/decode mã QR của VietQR (QR Ngân hàng, QR Đa năng Momo/ZaloPay) & VNPayQR

[![npm](https://img.shields.io/npm/v/vietnam-qr-pay.svg)](https://www.npmjs.com/package/vietnam-qr-pay)
[![download](https://img.shields.io/npm/dt/vietnam-qr-pay.svg)](https://www.npmjs.com/package/vietnam-qr-pay)
Expand Down Expand Up @@ -49,6 +49,67 @@ console.log(content)

```

### QR Đa năng của MoMo và ZaloPay

Hiện tại, QR Đa năng của MoMo và ZaloPay đang thông qua Ngân hàng Bản Việt (BVBank) để nhận tiền.

Mỗi tài khoản MoMo/ZaloPay sẽ được gán một STK tương ứng tại BVBank. Tiền chuyển đến STK này sẽ được chuyển tiếp đến ví MoMo/ZaloPay.

Bạn có thể lấy STK này tại trang chi tiết của QR Nhận tiền trong ứng dụng MoMo/ZaloPay.

#### MoMo

```javascript
import { QRPay, BanksObject } from 'vietnam-qr-pay';

// Số tài khoản trong ví MoMo
const accountNumber = '99MM24011M34875080'

const momoQR = QRPay.initVietQR({
bankBin: BanksObject.banviet.bin,
bankNumber: accountNumber,
// amount: '10000', // Số tiền (không bắt buộc)
// purpose: 'Chuyen tien', // Nội dung (không bắt buộc)
})

// Trong mã QR của MoMo có chứa thêm 1 mã tham chiếu tương ứng với STK
momoQR.additionalData.reference = 'MOMOW2W' + accountNumber.slice(10)

// Mã QR của MoMo có thêm 1 trường ID 80 với giá trị là 3 số cuối của SỐ ĐIỆN THOẠI của tài khoản nhận tiền
momoQR.setUnreservedField('80', '046')

const content = momoQR.build()

// 00020101021138620010A00000072701320006970454011899MM24011M348750800208QRIBFTTA53037045802VN62190515MOMOW2W3487508080030466304EBC8

```

<img src="test/momo.svg" width="160">

#### ZaloPay

> Trong mã QR của ZaloPay có chứa một số thông tin bổ sung ở trường ID 26. Tuy nhiên chưa rõ chức năng của các thông tin này (có thể là dùng để định danh từng mã QR đc tạo trên hệ thống của ZaloPay). Trong ví dụ dưới sẽ bỏ qua các thông tin này.
```javascript
import { QRPay, BanksObject } from 'vietnam-qr-pay';

// Số tài khoản trong ví ZaloPay
const accountNumber = '99ZP24009M07248267'

const zaloPayQR = QRPay.initVietQR({
bankBin: BanksObject.banviet.bin,
bankNumber: accountNumber,
// amount: '10000', // Số tiền (không bắt buộc)
// purpose: 'Chuyen tien', // Nội dung (không bắt buộc)
})

const content = zaloPayQR.build()
// 00020101021138620010A00000072701320006970454011899ZP24009M072482670208QRIBFTTA53037045802VN6304073C
```

<img src="test/zalopay.svg" width="160">


### VNPay

```javascript
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"@typescript-eslint/parser": "^6.7.2",
"eslint": "^8.50.0",
"jest": "^28.1.1",
"qrto": "^0.0.3",
"ts-jest": "^28.0.5",
"ts-node": "^10.8.1",
"typescript": "^4.7.4"
Expand Down
1 change: 1 addition & 0 deletions test/momo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 62 additions & 0 deletions test/test-momo-zalopay.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import fs from 'node:fs'
import { toSVG } from 'qrto'

import { BanksObject } from '../src'
import { QRPay } from '../src/qr-pay'


test('MoMo', () => {
const accountNumber = '99MM24011M34875080'
const momoQR = QRPay.initVietQR({
bankBin: BanksObject.banviet.bin,
bankNumber: accountNumber,
})
momoQR.additionalData.reference = 'MOMOW2W' + accountNumber.slice(10)
momoQR.setUnreservedField('80', '046')
// QR Content generated from MoMo app
const content = momoQR.build()
expect(content).toBe('00020101021138620010A00000072701320006970454011899MM24011M348750800208QRIBFTTA53037045802VN62190515MOMOW2W3487508080030466304EBC8')

const svg = toSVG(content, {
ecLevel: 'L',
style: 'round',
foregroundColor: {
type: 'linear',
colors: ['#d82f8b', '#a50064']
},
logo: {
url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAMAAADQmBKKAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAL0UExURawgcKsdb/78/ffp8akYa6sgcKkZbP///6seb6sfb60gcaYTaLU4f9aRuOnD2PXm7+jA16sdbrlEh9KHsaoabLtJi64ndO3P4awhcKobbawfcKwfb/fo8asfcKscbqgWaqkXaqkZa6kabKocbawhcaobbrApdv/+/qsebqsbbagVact0pqoZbLQ1fvz3+qcTaP/+//79/blBhqkVaqoabfjr8rU4gN2kxfvz9/DW5a7Teaodbq4ldO/T47Eued6lxvz2+bMwe/rw9tKGsacUablDh7tJivHY5uvJ3LErd7Y6gOnC2L1OjrMyfLIveunF2qwgcd2iw60hca8odctxpMtypfjr89iWvOW30bQ0fdiVu/77/f37/Pry9q0jcq8nde7P4eCsysFYlNuewdWNtvHZ575Pjtyhw+OyzfPg6+S0z+KvzPb+x6cSZ/bm7/7+/t+ox/z4+/35+71Ki79RkKgXa9GEsK4kc+3R4evI27g/heW50tmZvvXk7cRfmMBXkrc9g7EteezM3sx1p815qvHZ5sluovHb6L9TkdiUu6ULY/jt8+3P4Prz97c7gqobbNygwul/6cpvo+nE2dB/rfPd6fTi7Nqav89+rtGBrq0jc8dpn8Ncl8hqn9SMtchroPPf6sltofjt9Pfr89aPuMVimsZmneW40uW609eUuue81KYPZee+1vz1+MZlnMZ9zrc+g8Zjm899rOOzz60hcuvK3btGiMdnnvLc6a8mdPbo8OKxze7S4vbl78x3qO3N39+pydaQuPbm7tudwM56qtSJs/Xj7rxLjOrH2+S20aweb7tHidWMtujA1r1NjdGBr/Lb6Mtxpea71O/V5bU3f814qcRgmfbq8fTh69ubwLpEiMBVkd+nx/nw9dSLtKkYasJblsNel9GFsc58q79UkaYRZ+vM3uCrycFalvnu9Kwdb/v1+NmZvfTi7deRudGDr6sgcaoYa+e91aoaa+Guy9SStqIGXsZrnaYVZqkfbejD2btRiyeeQ7cAAApSSURBVHja7Vp5VBRHHu5heoZu1IR2R53DmWHOnQEGFBDlcd+HglxCQILhVPRx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'
}
})
fs.writeFileSync(__dirname + '/momo.svg', svg)
})


test('ZaloPay', () => {
const accountNumber = '99ZP24009M07248267'
const zaloPayQR = QRPay.initVietQR({
bankBin: BanksObject.banviet.bin,
bankNumber: accountNumber,
})

const content = zaloPayQR.build()
expect(content).toBe('00020101021138620010A00000072701320006970454011899ZP24009M072482670208QRIBFTTA53037045802VN6304073C')

const svg = toSVG(content, {
ecLevel: 'L',
marker: {
style: {
outer: 'round',
inner: 'circle',
}
},
foregroundColor: {
type: 'linear',
colors: ['#0068ff', '#003e99'],
},
logo: {
url: 'data:image/png;base64,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'
}
})
fs.writeFileSync(__dirname + '/zalopay.svg', svg)
})
1 change: 1 addition & 0 deletions test/zalopay.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2445,6 +2445,11 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==

qrto@^0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/qrto/-/qrto-0.0.3.tgz#5609878601de9baff7b7f84e1fa2564ddb99d5be"
integrity sha512-2NWE4JPrxilv/8Kbtjh5O08Tv7vw1K6mxtwyMnAyj4sgtEE71NlOJMD1DUESo1mB8NX8vKCVxMxkPABquZ0ZAQ==

queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
Expand Down

0 comments on commit 10369f3

Please sign in to comment.