• Kiến thức
  • Network
  • Security
  • Software
  • Thủ thuật
  • Tin học văn phòng
  • Tin tức
  • Mail ảo tạm thời miễn phí
  • Tools tra cứu thông tin
AnonyViet
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
AnonyViet
No Result
View All Result

Ronin Engineer Tích Hợp với VNPay Như Thế Nào?

AnonyViet by AnonyViet
in Code
A A
0

Mục lục bài viết

  1. 1. Yêu Cầu
  2. 2. Tại Sao là VNPay QR?
    1. 2.1. Bảo Mật
    2. 2.2. Phí
    3. 2.3. Yếu Tố Khác
  3. 3. Thiết Kế
    1. 3.1. Luồng Thanh Toán QR
    2. 3.2. Luồng Tiền
  4. 4. Code Mẫu
    1. 4.1. API Tạo URL Thanh Toán
    2. 4.2. API IPN
  5. 5. Bảo Mật
    1. 5.1. Tính đúng đắn dữ liệu và Xác thực
    2. 5.2. Cập Nhật Trạng Thái Thanh Toán
    3. 5.3. Whitelist
    4. 5.4. Version
  6. 6. Xử Lý Lỗi
    1. 6.1. Response Code
    2. 6.2. Retry
    3. 6.3. Idempotent Handler
  7. 7. Tracing
  8. 8. Kiểm Thử
  9. 9. Bước Tiếp Theo
  10. 10. Tổng Kết

Hello mọi người, mình là một Ronin Engineer. Hôm nay mình sẽ trình bày website roninhub.com bên mình tích hợp với VNPay như nào thế?

Tham gia kênh Telegram của AnonyViet 👉 Link 👈

Let’s go!

Các bài viết liên quan

Cách Active Key Sublime Text 4 - Tải Sublime Text 4 Full Key 6

Cách Active Key Sublime Text 4 – Tải Sublime Text 4 Full Key

23/05/2025
vibde coding là gì

Vibe Coding là gì?

14/05/2025
Code pháo hoa trang trí cho Website dịp tết 7

Code pháo hoa trang trí cho Website dịp tết

25/01/2025 - Updated on 10/02/2025
Useful Scripts: Tổng hợp 211 công cụ hữu ích cho trình duyệt web 8

Useful Scripts: Tổng hợp 211 công cụ hữu ích cho trình duyệt web

30/09/2024

1. Yêu Cầu

Đầu tiên, chúng ta sẽ bắt đầu bằng yêu cầu của nghiệp vụ.

– (Automation) Một giải pháp thanh toán tự động: Nó không chỉ tạo ra sự thuận tiện và tăng trải nghiệm của người dùng mà còn giảm chi phí vận hành “bằng cơm”.

– (Security) Tính bảo mật cao: Liên quan tới tiền, tài chính thì yếu tố này đặc biệt quan trọng, nó có thể ảnh hưởng trực tiếp tới business. 

– (Pricing) Phí giao dịch thấp: Khi số lượng giao dịch lớn hoặc tỷ suất lợi nhuận của bạn thấp, nếu phí trên mỗi giao dịch cao thì tổng phí giao dịch là một khoản đáng kể.

– (Scalability) Hỗ trợ nhiều phương thức thanh toán: Do người dùng của hệ thống có thể là sinh viên, người đi làm hoặc người có thói quen sử dụng thẻ thanh toán quốc tế. Ngoài ra, về sau nghiệp vụ có thể mở rộng hỗ trợ cả thanh toán trả góp. Do đó, việc hỗ trợ nhiều phương thức thanh toán là cần thiết.

– Ngoài ra, chúng ta có thể đánh giá thêm các yếu tố như độ ổn định, hỗ trợ khách hàng, khuyến mãi, giao diện, độ khó tích hợp, quản lý và các tính năng khác, …

Như vậy, chúng ta sẽ cần tích hợp một cổng thanh toán để giải quyết yêu cầu trên của nghiệp vụ. Bên cạnh đó, cổng thanh toán cần đáp ứng được ít nhất là 4 yếu tố chính trên.

2. Tại Sao là VNPay QR?

Đầu tiên, tại sao lại là VNPay QR? Thứ nhất, bên mình không quảng cáo cho VNPay. Và bên mình cũng chưa trải nghiệm hết tất cả các bên cung cấp giải pháp thanh toán nên việc so sánh giữa các bên là không khách quan. Mỗi bên đều có ưu nhược điểm, việc lựa chọn sẽ phụ thuộc vào yêu cầu cụ thể của bạn.

Dưới đây mình đưa một số thông tin để bạn tham khảo nhé.

2.1. Bảo Mật

Quan điểm của mình là nên chọn những nhà cung cấp lớn và uy tín thì khả năng có tính bảo mật cao. Tuy chưa có một thống kê cụ thể về thị phần nhưng theo mình có thể kể đến các ông lớn sau:

– Napas

– Momo

– VNPay

– Viettel Paygate

Mình đoán những năm gần đây VNPay đang dần vươn lên trong thị trường ví điện tử, giải pháp thanh toán. Chúng ta dễ dàng nhìn thấy nhiều chiến dịch marketing rầm rộ từ trên TV, biển quảng cáo trên những trục đường to, cho đến những quán cơm nhỏ có những chiếc loa nhỏ nhỏ xinh xinh thông báo biến động số dư. Kéo theo mảng về cổng thanh toán VNPay QR cũng phát triển.

Xét về thông số bảo mật, hầu hết các bên cung cấp đều tuân thủ tiêu chuẩn bảo mật PCI DSS. Nhưng ta cần đánh giá thêm về version và level của PCI DSS. Nôm na, version cao, level thấp là tốt. Ví dụ version 4.0, level 1 là “xịn”.

Thông tin PCI DSS của một số cổng thanh toán

Theo thông tin trên, VNPay QR có độ bảo mật đứng thứ 2 và Momo có độ bảo mật cao nhất.

2.2. Phí

Dưới đây là bảng giá của một số cổng thanh toán với phương thức thanh toán là QR mobile banking (nội địa).

phí qr

Chúng ta có thể thấy VNPay QR có phí giao dịch không phải rẻ so với các bên khác.

2.3. Yếu Tố Khác

Bên cạnh đó, VNPay QR có:

  • Tốc độ xử lý giao dịch nhanh và ổn định.
  • Sale và hỗ trợ kỹ thuật đều nhiệt tình hỗ trợ.
  • Giao diện không quá đẹp nhưng thân thiện.
  • Liên kết với nhiều ngân hàng.
  • Thỉnh thoảng có khuyến mãi hấp dẫn.
  • Tính năng quản lý đầy đủ.
  • Hỗ trợ phương thức trả góp, một tính năng hay và business sẽ sử dụng trong tương lai.

Tuy có nhiều điểm mạnh nhưng VNPay QR cũng có những điểm cần cải thiện, mình sẽ đề cập ở các phần sau.

3. Thiết Kế

Về luồng tích hợp, mọi người có thể xem thêm tại trang docs của VNPay QR giúp mình nhé.

https://sandbox.vnpayment.vn/apis/docs/thanh-toan-pay/pay.html 

Trong docs đang chỉ vẽ và mô tả luồng thanh toán bằng thẻ. Tuy nhiên phương thức thanh toán mà khách hàng hay sử dụng lại là QR mobile banking nên mình sẽ vẽ thêm cho luồng phương thức thanh toán QR theo kiểu khác. Ngoài ra, mình sẽ vẽ thêm luồng tiền để mọi người dễ hiểu và có bức tranh toàn cảnh hơn.

3.1. Luồng Thanh Toán QR

luong thanh toan qr

Chú thích: 

  • Ronin FE: frontend của RoninHub
  • Ronin BE: backend của RoninHub
  • PGW FE: frontend của cổng thanh toán VNPay QR
  • PGW BE: backend của cổng thanh toán VNPay QR
  • Bank: ngân hàng mà khách hàng sử dụng, cũng là ngân hàng mà cổng thanh toán có kết nối.
  • Luồng trên là happy case.
Xem thêm:  SQL Injection là gì? Làm thế nào để ngăn chặn lỗ hổng SQL Injection

Luồng:

1. User thao tác tạo yêu cầu thanh toán trên Ronin FE.
2. Ronin FE gửi yêu cầu thanh toán lên Ronin BE.
3. Ronin BE xử lý yêu cầu thanh toán, tạo transaction lưu xuống DB
4. Ronin BE tạo ra 1 URL thanh toán có dạng sau và gửi về cho Ronin FE. Trong URL thanh toán chứa thông tin thanh toán, Return URL (được sử dụng ở bước 9.2) và các thông tin khác. Payment URL Sample: https://codefile.io/f/czM3UMeADE
5. Ronin FE (browser) sẽ điều hướng sang PGW FE theo URL thanh toán trên.
6. Client chọn phương thức thanh toán QR. Mã QR sẽ hiện trên web của cổng. Client sử dụng app ngân hàng quét QR và thực hiện xác thực để thanh toán.
7. Ứng dụng ngân hàng của Client sẽ gửi lệnh chuyển khoản lên Bank.
8. Khi tài khoản của VNPay tại Bank có biến động số dư, Bank sẽ gửi thông báo giao dịch về cho VNPay.
9. Sau khi VNPay xử lý giao dịch thành công, hệ thống sẽ thực hiện đồng thời 2 bước (9.1 và 9.2).
9.1.1. VNPay gửi thông báo kết quả giao dịch về cho Ronin BE bằng cách gọi API IPN (Instant Payment Notification) của Ronin BE
9.1.2. Ronin BE thực hiện cập nhận trạng thái giao dịch của hệ thống.
9.2.1. VNPay BE gửi yêu cầu điều hướng tới VNPay FE.
9.2.2. VNPay FE sẽ được điều hướng về lại Ronin FE theo Return URL được tạo ở bước 4.
9.2.3. Ronin FE sẽ định kỳ kiểm tra trạng thái của giao dịch bằng cách gọi API của Ronin BE. Vì bước 9.1 và 9.2 được thực hiện đồng thời nên có thể 9.2 được thực hiện trước khi giao dịch được cập nhật trạng thái ở bước 9.1.

3.2. Luồng Tiền

Cổng thanh toán VNPay QR liên kết với nhiều ngân hàng, lúc đó ở mỗi ngân hàng sẽ tồn tại (ít nhất) 2 tài khoản của VNPay QR.

– 1 tài khoản PGW Merchant Account dùng để tiếp nhận lệnh thanh toán từ phía tài khoản khách hàng Client Account.

– 1 tài khoản PGW Settlement Account dùng để quyết toán (settlmentsettlement) cho tài khoản Merchant Account (tài khoản ngân hàng của Ronin Engineer)

– Đối với ngân hàng, VNPay là 1 merchant kết nối với ngân hàng. Còn đối với VNPay, Ronin Engineer là 1 merchant kết nối với cổng thanh toán.

Như vậy, mọi người có thể hình dung luồng tiền sẽ đi như sau:

Ronin Engineer Tích Hợp với VNPay Như Thế Nào? 5

  1. Client thao tác thanh toán QR trên ứng dụng ngân hàng. 
  2. Ví dụ ngân hàng khách hàng sử dụng là Techcombank. Sau khi xác thực thành công, tài khoản khách hàng (Client Account) sẽ chuyển khoản tới PGW Merchant Account tại Techcombank.
  3. VNPay có kết nối với Techcombank nên khi tài khoản PGW Merchant Account có biến động số dư thì ngân hàng sẽ gửi thông báo, thông tin giao dịch về cho VNPay để VNPay xử lý.
  4. VNPay xử lý xong sẽ gửi thông báo về Ronin BE tại IPN API.
  5. Sau đó, VNPay gom các thanh toán vào ngày T và thực hiện quyết toán cho Merchant vào ngày T + 1. 
  6. Ví dụ merchant Ronin sử dụng ngân hàng BIDV, VNPay sẽ gửi lệnh quyết toán tới tài khoản PGW Settlement Account tại BIDV và chuyển khoản cho Merchant Account (toàn khoản của Ronin).
  7. Định kỳ VNPay thực hiện đối soát với ngân hàng. Kiểm tra, so sánh giao dịch giữa cổng thanh toán và ngân hàng để đảm bảo tất cả giao dịch đã được ghi chép chính xác và đầy đủ.

Lưu ý:

– Bước 2 và bước 6 là phản ánh luồng tiền.

– Từ bước 1 đến 4 sẽ được thực hiện tại thời điểm giao dịch và trong ngày T.

– Bước 5 và 6 thực hiện tại ngày T + 1.

– Cùng trong 1 thanh toán, nhưng 3 hệ thống khác nhau (bank, payment gateway, merchant), mỗi hệ thống sẽ ghi nhận 1 mã giao dịch khác nhau.

4. Code Mẫu

Đối với luồng thanh toán có 2 bước quan trọng đó là bước 4 (tạo giao dịch và URL thanh toán) và bước 9.1 (API IPN nhận thông báo kết quả giao dịch).

Mình sẽ cùng mọi người review code mẫu nodejs trên trang docs của VNPay nha.

Trước khi review, mọi người vui lòng đọc trước tài liệu kỹ thuật của VNPay để nắm được ý nghĩa của các tham số nhé.

https://sandbox.vnpayment.vn/apis/docs/thanh-toan-pay/pay.html 

4.1. API Tạo URL Thanh Toán

Code mẫu tạo Payment URL: https://codefile.io/f/qAAxf2shgq 

– Đầu tiên, chúng ta nên làm theo những hướng dẫn của VNPay. Cung cấp đầy đủ các tham số và đúng định dạng. Ví dụ một số tham số mọi người cần lưu ý sau.

– vnp_Amount số tiền thanh toán, không có dấu thập phân và phải nhân thêm 100 trước khi gửi sang VNPay.

– Những tham số dạng date có timezone là +7 và format là yyyyMMddHHmmss. Mình chưa hiểu lý do vì sao VNPay không để format ISO

– vnp_IpAddr là string. Nếu lấy IP address theo code mẫu thì giá trị có thể là nhiều địa chỉ IP nối nhau như này 13.160.92.202, 12.161.56.21. Như vậy, không đúng định dạng trong docs. Mọi người nên chỉ lấy 1 địa chỉ IP, có thể là IP đầu tiên hoặc IP cố định của server. Để tránh lỗi có thể xảy ra ở đầu VNPay.

– vnp_ExpireDate mọi người nên đặt thời gian hết hạn. Tham số này trong code mẫu khai báo. Mọi người không nên đặt thời gian quá dài, không nên quá 30p, mình đang để 15p.

– vnp_Version nên sử dụng version mới. Lý do tại sao mình sẽ đề cập tại ở phần bảo mật bên dưới.

– vnp_TxnRef là mã giao dịch tại Ronin BE. Mọi người lưu ý đối với trường hợp mua hàng trên web, lúc đó entity Order sẽ được sinh ra trước, entity Transaction sẽ được sinh ra sau. Ngoài ra, có trường hợp không order nhưng vẫn có transaction. Ví dụ như hoàn tiền (refund). Vậy nên, mọi người lưu ý cần tách biệt 2 entity này ra và vnp_TxnRef nên để là transaction_id.

– Để code clean hơn, mọi người có thể sắp xếp thứ tự tầm quan trọng của các tham số theo chiều giảm dần và nhóm các tham số có quan hệ với nhau thành một nhóm. Ví dụ như sau:

Xem thêm:  Hướng dẫn dùng Colab để Download File về Google Drive

👉 Code mẫu thứ tự khởi tạo params: https://codefile.io/f/Q8qFW121nr 

4.2. API IPN

👉 Code mẫu xử lý IPN: https://codefile.io/f/uIO3R2H1PZ 

– Nhiệm vụ của API IPN này là nhận thông báo kết quả giao dịch và cập nhật lại trạng thái của transaction, order.

– Đầu tiên, chúng ta cần validate những tham số sau:

– secureHash mình sẽ nói sâu hơn ở phần sau. 

– Kiểm tra order có tồn tại hay không

– Kiểm tra số tiền có bằng số tiền của order gốc không

– Kiểm tra trạng thái giao dịch và xử lý giao dịch theo từng trạng thái. 

– Trong trường hợp, bạn để vnp_TxnRef là transaction id thì bạn cần kiểm tra cả transaction và order tương ứng với transaction. Sau đó, cập nhật trạng của cả transaction và order tương ứng.

– Trong code mẫu, sử dụng nested condition rất nhiều, như vậy code sẽ khó đọc. Trường hợp này, mình khuyến kích mọi người sử dụng Early Return pattern để code tường minh hơn. 🧼

https://gomakethings.com/the-early-return-pattern-in-javascript/ 

– Những biến như secretKey, querystring, crypto chúng ta có thể khởi tạo lúc start app, trước khi chạy function này.

– Mình không chuyên về javascript, nếu mọi người có thêm nhận xét thì comment ở dưới giúp mình nhé. 🙏

5. Bảo Mật

5.1. Tính đúng đắn dữ liệu và Xác thực

Trong luồng payment này, chúng ta cần giải quyết được 2 vấn đề bảo mật sau:

– Data integrity: Làm sao đảm bảo tính đúng đắn của dữ liệu? Do payment request được tạo ra ở BE và được gửi về cho FE để client thực hiện thanh toán. Tuy nhiên, phía client là phía dễ bị can thiệp nên chúng ta cần đảm bảo thông tin của payment request không bị sửa đổi trong quá trình vận chuyển từ BE → FE → VNPay.

– Authentity: Làm sao để xác thực rằng đầu tạo payment request là Ronin merchant và đầu gửi IPN là VNPay?

– Liệu có thể sử dụng 1 cơ chế để giải quyết được đồng thời 2 bài toán trên?

Đầu tiên, HTTPS không đáng tin cậy 100% do một số lỗ hổng của giao thức SSL/TLS và các version cũ. Ngoài ra, HTTPS chỉ mã hoá (che giấu) dữ liệu khi truyền tải (BE → FE), trong trường hợp này ta cần đảm bảo dữ liệu không bị sửa đổi ở đầu FE. Do đó, ta cần kết hợp thêm một cơ chế nữa để tăng cường bảo mật.

Một cơ chế mà giải quyết được đồng thời 2 bài toán trên thì chúng ta có thể nghĩ tới Message Authentication Code (key-based hash function) và chữ ký số (digital signature). Mỗi cơ chế đều có ưu nhược điểm. Thông thường, digital signature sử dùng asymmetric key, còn key-based hash sử dụng symmetric key. Key-based hash có hiệu suất tốt hơn nhưng độ bảo mật thường kém hơn so với digital signature. Trong trường hợp này, chúng ta cần đáng giá thêm yếu tố dễ dàng tích hợp. So với digital signature, key-based hash có ưu thế hơn ở điểm này. Do đó, VNPay sử dụng key-based hash, cụ thể là HMACSHA512.

Đầu merchant và đầu cổng thanh toán cần thống nhất với nhau một hash secret trước khi tích hợp. VNPay sẽ generate ra hash secret rồi gửi email cho merchant. Lúc này, mỗi khi tạo payment request, đầu merchant (Ronin BE) cần kết hợp thông tin thanh toán với secret, rồi hash (HMACSHA512) kết quả kết hợp. Cuối cùng, được giá trị vnp_SecureHash gửi về cho Ronin FE. Secure Hash đảm bảo nội dung của payment request không bị can thiệp, sửa đổi ở đầu FE. Khi gửi payment request lên VNPay, hệ thống sẽ sử dụng hash secret để xác thực chỉ có merchant Ronin mới có thể tạo ra payment request này.

5.2. Cập Nhật Trạng Thái Thanh Toán

Lưu ý, bước ReturnURL được thực hiện ở phía client mà phía client là phía dễ bị can thiệp hơn. Do đó, bước cập nhật trạng thái transaction/order phải được thực hiện ở bước IPN (bước 9.1), không được thực hiện ở bước ReturnURL (bước 9.2).

5.3. Whitelist

Để tăng cường bảo mật, chúng ta nên whitelist, chỉ cho phép một số địa chỉ IP có thể gọi vào API IPN. Đội kỹ thuật bên VNPay sẽ cung cấp danh sách địa chỉ IP này cho bạn.

5.4. Version

Best practice: nên sử dụng version mới nhất.

VNPay khuyến cáo sử dụng API version mới. Các thuật toán mã hóa phiên bản cũ đã kém an toàn và bảo mật. Merchant cần chuyển đổi sang phiên bản version 2.1.0 và thuật toán mã hóa HMACSHA512.

Nếu bạn có sử dụng các thư viện ngoài liên quan tới luồng payment thì nên kiểm tra lỗ hổng và update version của thư viện. Tránh sử dụng các method đã bị đánh deprecated.

Và sau khi update version thì nên test kỹ, ít nhất đảm bảo tất cả function đã chạy đúng.

6. Xử Lý Lỗi

Việc xử lý lỗi ở tất cả các bước đều quan trọng, nó giúp dễ debug và hạn chế được ảnh hưởng khi xảy ra lỗi. Và xử lý lỗi ở bước IPN đặc biệt quan trọng. Do đầu VNPay gọi vào API IPN, nếu ở đầu merchant xử lý lỗi tốt thì sẽ hạn chế ảnh hưởng tới đầu VNPay.

Xem thêm:  Cách tạo và chạy File PowerShell trên Windows 10 cho người mới bắt đầu

6.1. Response Code

Xử lý lỗi thế nào là tốt? Ít nhất chúng ta cần phải có try catch trong quá trình IPN. Ngoài ra, cần trả đúng mã lỗi theo hướng dẫn của VNPay.

Ví dụ:

–  Nếu xử lý giao dịch thành công thì trả về RspCode: ‘00’

– Nếu không tìm được order thì trả về RspCode: ‘01’

– …

Mọi người lưu ý: 

– vnp_ResponseCode và RspCode là 2 mã khác nhau.

– vnp_ResponseCode (request: VNPay → Merchant): mô tả chuyện gì đã xảy ra bên VNPay.

– RspCode (response: Merchant → VNPay): mô tả chuyện gì đã xảy ra trong quá trình xử lý IPN.

Tuy nhiên, tài liệu của VNPay đoạn này không rõ ràng. Và bên mình phải làm theo test cases trong môi trường test sandbox. Hy vọng đội kỹ thuật VNPay cải thiện lại tài liệu.

6.2. Retry

Tại sao cần trả đúng mã lỗi theo hướng dẫn của VNPay? Như vậy thì đầu VNPay sẽ biết xử lý lỗi gọi IPN như nào. Ví dụ:

– Xử lý giao dịch thành công (RspCode: ‘00’), VNPay sẽ kết thúc luồng thanh toán đó.

– Mã secure hash không hợp lệ (RspCode: ‘97’), VNPay sẽ thực hiện retry, gọi lại IPN.

Trong trường hợp RspCode: 01, 04, 97, 99 hoặc IPN timeout là những lỗi có thể retry thì VNPAY sẽ bật cơ chế retry IPN. Thực hiện retry tối đa 10, trong vòng 5 phút.

Như vậy, việc giao tiếp giữa Merchant và VNPay sẽ đáng tin cậy hơn.

6.3. Idempotent Handler

Tuy nhiên, việc retry có thể dẫn đến vấn đề lặp (duplicate) message. Để giải pháp cho vấn đề này phụ thuộc vào logic của IPN handler. Chúng ta cần kiểm tra trạng thái giao dịch trước khi thực hiện câp nhật trạng thái. Ví dụ, nếu giao dịch ở trạng thái PROCESSING thì cho phép thực thi tiếp, còn ở trạng thái SUCCESSFUL, FAILED thì sẽ reject request.

7. Tracing

Trong giai đoạn đầu tích hợp, tỉ lệ xảy ra lỗi ở điểm tích hợp là khá cao. Do đó, chúng ta cần thu thập được nhiều thông tin để debug. Cụ thể, chúng ta nên đặt log ở đầu vào, đầu ra từng bước trong luồng thanh toán, cả case thành công, lẫn case thất bại, exception.

Mọi người lưu ý, cần đảm bảo có log ở bước 9.2.2 (Return URL). Bước này PGW FE sẽ redirect về Ronin FE để kiểm tra trạng thái giao dịch và hoàn tất luồng thanh toán. 

👉 Nginx logs: https://codefile.io/f/FeFlPs7hj2 

Tại sao lại cần có log ở bước này? bên mình đã gặp trường hợp client chuyển khoản thành công, Ronin BE nhận được IPN và xử lý thành công nhưng màn hình thanh toán QR (PWG FE) vẫn đứng hình, không redirect về Ronin FE. Mình có báo đội kỹ thuật bên VNPay check nhưng họ check không ra và bảo lỗi bên mình. Mình phải show log ở đầu nginx (bước 9.2.2) là để chứng minh lỗi bên VNPay, PWG FE chưa redirect sang Ronin FE. Sau đó, 2 bên cũng chưa tìm ra nguyên nhân gốc. Tuy nhiên, mình chỉ gặp 2 case như này, còn lại đều ổn định.

Để dễ dàng cho việc search log, biết được 1 payment request diễn ra như nào thì ở tất cả log cần chứa thông tin của correlation id (có thể là transaction_id, order_id).

8. Kiểm Thử

VNPay cung cấp môi trường test sandbox và hoạt động ổn định. Đội kỹ thuật sẽ gửi cho bạn đường dẫn tới trang cấu hình môi trường sandbox để bạn chủ động test.

Ảnh test case trên môi trường sandbox của VNPay

Trang này cho phép mình cấu hình IPN URL. Trong trường hợp, bạn chưa có môi trường deploy (chưa có một public IPN URL) và muốn test ở local. Bạn có thể tham khảo giải pháp tạo static domain đơn giản, miễn phí của ngrok. 

https://ngrok.com/blog-post/free-static-domains-ngrok-users 

ngrok http 8888 --domain=fox-funny-noticeably.ngrok-free.app

Sau khi test chức năng, tất cả test case thành công. Nếu bạn có yêu cầu tối thiểu về performance thì bạn có thể thực hiện theo bước load test. Tuy nhiên, do phụ thuộc vào môi trường sandbox của VNPay nên kết quả có thể không chính xác, không giống với môi trường production. Nhưng bạn nên thử load test qua để đảm bảo BE vẫn hoạt động tốt với lượng load lớn hơn.

9. Bước Tiếp Theo

Đối với phần thanh toán, team Ronin sẽ tiếp tục:

– Phát triển thêm các loại giao dịch khác.

– Hoàn thiện tài liệu.

– Truy vấn những giao dịch bị treo.

– Hoàn tiền (refund) tự động.

– Tích hợp phương thức trả góp.

10. Tổng Kết

Khi tích hợp với cổng thanh toán, chúng ta cần:

– Đánh giá nhiều yếu tố khi chọn giải pháp thanh toán như độ bảo mật, phí, độ ổn định, tính năng, tốc độ tích hợp, … VNPay có nhiều điểm đã làm tốt tuy nhiên phí giao dịch hơi cao và tài liệu chưa thực sự thân thiện.

– Nắm được cả về nghiệp vụ để hiểu rõ hơn về luồng thanh toán được xử lý như nào.

– Bảo mật là yếu tố quan trọng khi tích hợp và đặc biệt quan trọng đối với các hệ thống tài chính.

– Xử lý lỗi là việc làm cần thiết giúp cho hệ thống tin cậy (reliable) và khoẻ mạnh (robust) hơn.

Cám ơn mọi người đã đọc đến hết bài.

Nếu mọi người thấy bài viết hữu ích thì nhờ mọi người share để nội dung của Ronin được nhiều người biết hơn nữa. 🙏

Cám ơn mọi người, chúc mọi người nghỉ lễ vui vẻ.

 #payment #integration #backend #software_engineering

———

🧑‍💻 90+ Ronin Engineers: https://roninhub.com/khoa-hoc/software-development-advanced 

📚️ System Design VN: https://fb.com/groups/systemdesign.vn 

Tags: codeqrthanh toán onlineVNPAY
AnonyViet

AnonyViet

Kiến thức như một ngọn lửa, càng chia sẽ nó sẽ càng bùng cháy!

Related Posts

Code pháo hoa trang trí cho Website dịp tết 9
Code

Code pháo hoa trang trí cho Website dịp tết

25/01/2025 - Updated on 10/02/2025
Code Hiệu Ứng Pháo Hoa Theo Chuột - Trang Trí Website Tết 10
Code

Code Hiệu Ứng Pháo Hoa Theo Chuột – Trang Trí Website Tết

24/12/2024
chuyen giao dien website sang trang den
Code

Code chuyển giao diện Website sang nền trắng đen để tưởng nhớ hoặc để Quốc tang

20/07/2024
Hướng dẫn Active Wordfence Security Premium miễn phí 11
Code

Hướng dẫn Active Wordfence Security Premium miễn phí

07/06/2024
Làm sao để học lập trình hiệu quả và những thứ cần thiết để theo ngành này? 12
Code

Làm sao để học lập trình hiệu quả và những thứ cần thiết để theo ngành này?

28/03/2024 - Updated on 31/03/2024
Hướng dẫn tạo banner ký tự trong Python và CMD chỉ với vài bước đơn giản 13
Code

Hướng dẫn tạo banner ký tự trong Python và CMD chỉ với vài bước đơn giản

27/02/2024
Subscribe
Notify of
guest

guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
oldest
newest
Inline Feedbacks
View all comments

Liên hệ Quảng Cáo

Lien he AnonyViet

Bài viết mới

Sinh viên thiết kế đồ họa nên build PC thế nào? 11

Sinh viên thiết kế đồ họa nên build PC thế nào?

by AnonyViet
30/06/2025
0

Hướng dẫn vô hiệu hóa Facebook nhưng vẫn dùng Messenger 12

Hướng dẫn vô hiệu hóa Facebook nhưng vẫn dùng Messenger

by Thanh Kim
30/06/2025
0

MiniToggle: Bật/tắt các cài đặt Windows chỉ với 1 cú click 13

MiniToggle: Bật/tắt các cài đặt Windows chỉ với 1 cú click

by Thanh Kim
29/06/2025
0

Hướng dẫn nhận key IObit Uninstaller 14 miễn phí 6 tháng 14

Hướng dẫn nhận key IObit Uninstaller 14 miễn phí 6 tháng

by Thanh Kim
29/06/2025
0

Giới thiệu

AnonyViet

AnonyViet

Nơi chia sẻ những kiến thức mà bạn chưa từng được học trên ghế nhà trường!

Chúng tôi sẵn sàng đón những ý kiến đóng góp, cũng như bài viết của các bạn gửi đến AnonyViet.

Hãy cùng AnonyViet xây dựng một cộng đồng CNTT lớn mạnh nhất!

Giới thiệu

AnonyViet là Website chia sẻ miễn phí tất cả các kiến thức về công nghệ thông tin. AnonyViet cung cấp mọi giải pháp về mạng máy tính, phần mềm, đồ họa và MMO.

Liên hệ

Email: anonyviet.com[@]gmail.com

1409 Hill Street #01-01A
Old Hill Street Police Station
Singapore 179369

 

DMCA.com Protection Status

Bình luận gần đây

  • AnonyViet trong Tự động dọn dẹp máy tính dễ dàng với BleachBit
  • Ly Yong trong Tự động dọn dẹp máy tính dễ dàng với BleachBit
  • AnonyViet trong Hướng dẫn tự tạo SOCKS5 trên Ubuntu
  • Quốc Anh trong Hướng dẫn tự tạo SOCKS5 trên Ubuntu
  • phuong trong KTimer: Lên lịch tắt máy, ngủ đông dễ dàng cho người bận rộn
  • sagar trong Cách khai thác lỗ hổng DLL Hijacking trên Windows
  • nikolai trong Hướng dẫn Hack Camera Điện thoại bằng cách gửi Link Website
  • AI Question Generator trong Hướng dẫn Việt hóa GTA 5 tải từ EPIC để chơi bằng tiếng Việt
  • Stiff trong Cách tạo MTProto Proxy riêng để dùng Telegram khi bị chặn
  • AnonyViet trong Học miễn phí khóa học Phổ cập AI và nhận chứng chỉ từ Trung ương Đoàn
  • Quốc trong Học miễn phí khóa học Phổ cập AI và nhận chứng chỉ từ Trung ương Đoàn
  • AnonyViet trong Cách tạo MTProto Proxy riêng để dùng Telegram khi bị chặn
  • Tienban trong Cách tạo MTProto Proxy riêng để dùng Telegram khi bị chặn
  • Tùng trong So sánh Telegram miễn phí và Telegram Premium
  • blowsy trong Cách Active Key Sublime Text 4 – Tải Sublime Text 4 Full Key
  • haohao2210 trong Hướng dẫn đăng ký ChatGPT Team giá 1$
  • AnonyViet trong Hướng dẫn đăng ký ChatGPT Team giá 1$
  • haohao2210 trong Hướng dẫn đăng ký ChatGPT Team giá 1$
  • Lelo trong TOP 5 thẻ ảo thanh toán quảng cáo và mua hàng trực tuyến năm 2025
  • Hồ Minh Nhựt trong Hướng dẫn chế ảnh số dư tài khoản MB Bank

©2025 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ Danh mục kết quả xổ số hôm nay trực tiếp bóng đá xoilac colatv truc tiep bong da trang chủ hi88 trang chủ hi88 kubet777 KUBET xoilac nhà cái 8xbet https://vn88-vn.com/ https://i9bet-vn.net/ https://typhu88-vn.com/ https://hb88-vn.org/ Kubet bong88 https://cwfun.org/ https://hi88.gives/ 33win 789win ww88 888B kubet https://thabet-vn.com/ Ae888 kubet 789Club 188BET 188BET Link https://789club10.pro kubet 188bet 8kbet pg88 99ok xin88 good88 https://www.chantalsutherlandjockey.com/ Sun win https://www.go88vn.uk.com/ https://www.rik-vip.uk.com/ kubet w88 cakhiatv Thapcam TV https://78win.id/ Game bài đổi thưởng https://33winlink.live/ FB88 hi88 W88 https://78win.dental/ ww88 f168 f8bet k8cc https://qq883a.com/ Leo88 Leo88 nha cai uy tin mu88 casino Vebo TV https://v9betnet.com/ https://ee88vie.com/ 69vn max88 manclub iwin 79king mu88 com https://78winn.city/ ww88 SV388 69VN Zomclub 8kbet https://hi88fz.com/ XO88 https://u888.one/ ABC8 https://go886.org/ https://sunwin10.org/ https://789club10.life/ Jun88 https://jun88pro.org/ 77Bet HB88 123b https://33winvn.me/ Tha bet hello88 188bet kubet11 k8cc f168 FB88 luckywin https://bet88.love/ 188BET fm88 https://horse.uk.com https://xin88.de.com/ SH BET qh88 https://918xxy.com/ 58WIN https://77betvn.me/ https://hb88vn.live/ kubet thailand 789club tài xỉu online uy tín Game bài đổi thưởng uy tín https://www.newfacespac.com/ vip66 xoso66 789 BET vip66 xoso66 luckywin f168 88vv https://good88gd.com/ https://tp88fun.com/ OK365 Nhà Cái WW88 6789 Daga sodo66 45678 trang chủ hi88 https://bet88bb.com/ 8XBET daga https://8kbet.party/ sin88 RR88 8kbet Mitom TV nhacaiuytin f8bet hello88 qq88 Luckywin 6789 NH88 https://abc8.furniture/ TK88 leo88 hb88 77bet jun88.info https://jbo.center/ 88aa 88aa https://789p.express/ Kuwin GK88 kubet fb68 https://bk8z.com.co/ 79king 789p 8kbet PG88 SV388 F168 SV388 Kuwin https://a23win.com/ SAOWIN https://new88.land/ Nohu90 8kbet PG88 https://69vn.attorney/ 88VV Hello88 https://asf.us.com/ 3389 33win GK88 tải app kubet https://68gamebai.game/ 789f 8kbet https://ok9.today/ Xoso66 Vip66 ABC8 kubet11 hitclub Wi88 32WIN HB88 HB88 https://bet88.tennis/ https://luongsontv44.com/ ww88 https://j88ss.com/ https://789wincom.me/ https://hubett2.org/ bong99 https://mb66.bz/ BET88 69vn com https://fb88nu.com/ qh88 Kubet https://nohu90phut.com/ bet88 https://vibong88.com/ https://nhacaiuytinbiz.com/ king88 https://thabet789.net/ Good88 Ga6789 nhacaiuytin Daga Link https://keonhacai.select/ bet88 FB88 https://69vnn.trading/ https://bet88org.com/ https://88clbus.com/ https://u888rse.com/ XOSO66 https://polodemocratico.info/ https://tartankicks.uk/ https://typhu888.shop https://typhu888.site ae888 88vv bj88 W88 W88 https://fun88.place/ b52 club 13 WIN Bet88 69vn https://nohu90.cc/ 88CLB kubet xin88 ee88 69vn iwin nohu789.net nohu.express fun88 Daga 69vn new882.info kubet77 Hi88 8day Thabet 33win Bk8 fun88 789win w88 nhà cái uy tín Go88 sunwin sunwin sunwin jun88 bk8 rikvip hitclub sunwin go88 98win 789bet m88 s666 sv388 12bet v9bet betvisa betvisa vin777 vin777 ee88 bet88 78win abc8 c54 new88 i9bet ok365 ae888 https://keonhacai.fund/ https://98win.deal/ FB88 QH88 Tài Xỉu Go88 kèo nhà cái 5 nohu90.store Fun88 bj88 https://gamebai.in.net/ 1bet88 pro nha cai uy tin https://max886.org/ 69VN sunwin NEW88 https://debetoz.com/ hit club e2bet https://bet88zs.com/ 32win 68 game bài NH88 game bài đổi thưởng W88 PG88 https://789win.health/ bet88 33win com F8BET QQ88 https://king88.international/ WIN55 e2bet bl-555.it.com https://bl555.org.uk/ HUBET 79win 78win 789BET 58Win w88 S666 Typhu88 V9BET Bong88 Fb88 sv388 KIWI 12bet Kubet IWIN IWIN good88 i9BET 99ok 123b 789win Good88 79king Nhà cái uy tín Bk8 Hb88 w88 fun88 Kèo nhà cái Bet88 789F 78win 8kbet https://vb88.social/ J88 https://tk88678.com/ https://t8kbet.com/ ww88 https://ok9393.com/ 69VN 69VN 69VN 69VN KUBET88 max88 net88 soc88 vn138 qq88 com 23win.solar https://bk8co.net/ https://mitomtv.mobi/ 88vv EV88 PG88 daga 23win ev88 sv368 luck8 NN88 Sbobet For88 https://u888me.info/ https://23win0.com/ https://23winme.com 8kbet F168 789BET https://king88aff.com/ 58WIN NOHU90 bet88 88CLB 99ok 97win F168 58WIN 123Win Xoso66 BET88 uu88 https://okking.uk/ alo789 sv368 sv388 dagatructiep ev88 99ok 88vn F168 23win 78win 88clb 18win 79KING SV66 RR88 daga HB88 Tk88 qq88 okking BL555 BL555 rr88 hello88 https://rikbet.team/ https://alo789.rocks/ https://ok365.jpn.com/ https://v9beti.com/ https://23win.codes/ https://58win.digital/ 68win nhà cái uy tín https://qh88.cymru https://qh88.casa https://m88club.biz https://m88vinvn.com https://79kinggod.club https://79kingvn.xyz https://kubet29.vip https://kubet79.top https://w88linkb.com https://188betlinkb.com https://188betlinka.com https://e2beting.com/ 69vn TD88 xoilac cakhiatv socolive QQ88 TP88 69vn King88 zowin 8kbet https://23win.kim/ pg99 https://new88.market/ https://ppc.uk.net/ f8bet E2bet 98WIN daga88 32WIN.SALE hi 88 U888 nohu90 http://9bet.faith/ https://8kbettt.co/ King88 King88 88i https://nohu90ab.com/ kubet https://king886.co/ 69VN 79king 32win 32win VN88 F168 bet88 Xoso66 Luong Son TV daga 6789 6789 32win https://9ae888.com/ https://23win.men/ xoso66 u888 rr88 79king pg88 s666 fb88 ww88 9bet 7ff https://bubet.com/ https://bin88.com/ BET88 https://new88.land/ f168 https://j88ss.com/ 88vv https://1goal123.com/ i9bet EV88 https://abc8gd.com/

No Result
View All Result
  • ANONYVIET CẦN CÁC BẠN GIÚP SỨC
  • Chính sách
  • Mini Game AnonyViet và FShare Mừng xuân 2021
  • Privacy
  • Quảng cáo
  • Search
  • Search Results
  • Share Acc Nhaccuatui VIP 2020
  • Thành Viên VIP
    • Danh Sách Đặc Quyền Thành Viên VIP
  • Tiếp tục đi đến trang mới là tính năng gì
  • Trang chủ
  • Đang lấy thông tin dữ liệu
  • Đang đến địa chỉ đích

©2025 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ Danh mục kết quả xổ số hôm nay trực tiếp bóng đá xoilac colatv truc tiep bong da trang chủ hi88 trang chủ hi88 kubet777 KUBET xoilac nhà cái 8xbet https://vn88-vn.com/ https://i9bet-vn.net/ https://typhu88-vn.com/ https://hb88-vn.org/ Kubet bong88 https://cwfun.org/ https://hi88.gives/ 33win 789win ww88 888B kubet https://thabet-vn.com/ Ae888 kubet 789Club 188BET 188BET Link https://789club10.pro kubet 188bet 8kbet pg88 99ok xin88 good88 https://www.chantalsutherlandjockey.com/ Sun win https://www.go88vn.uk.com/ https://www.rik-vip.uk.com/ kubet w88 cakhiatv Thapcam TV https://78win.id/ Game bài đổi thưởng https://33winlink.live/ FB88 hi88 W88 https://78win.dental/ ww88 f168 f8bet k8cc https://qq883a.com/ Leo88 Leo88 nha cai uy tin mu88 casino Vebo TV https://v9betnet.com/ https://ee88vie.com/ 69vn max88 manclub iwin 79king mu88 com https://78winn.city/ ww88 SV388 69VN Zomclub 8kbet https://hi88fz.com/ XO88 https://u888.one/ ABC8 https://go886.org/ https://sunwin10.org/ https://789club10.life/ Jun88 https://jun88pro.org/ 77Bet HB88 123b https://33winvn.me/ Tha bet hello88 188bet kubet11 k8cc f168 FB88 luckywin https://bet88.love/ 188BET fm88 https://horse.uk.com https://xin88.de.com/ SH BET qh88 https://918xxy.com/ 58WIN https://77betvn.me/ https://hb88vn.live/ kubet thailand 789club tài xỉu online uy tín Game bài đổi thưởng uy tín https://www.newfacespac.com/ vip66 xoso66 789 BET vip66 xoso66 luckywin f168 88vv https://good88gd.com/ https://tp88fun.com/ OK365 Nhà Cái WW88 6789 Daga sodo66 45678 trang chủ hi88 https://bet88bb.com/ 8XBET daga https://8kbet.party/ sin88 RR88 8kbet Mitom TV nhacaiuytin f8bet hello88 qq88 Luckywin 6789 NH88 https://abc8.furniture/ TK88 leo88 hb88 77bet jun88.info https://jbo.center/ 88aa 88aa https://789p.express/ Kuwin GK88 kubet fb68 https://bk8z.com.co/ 79king 789p 8kbet PG88 SV388 F168 SV388 Kuwin https://a23win.com/ SAOWIN https://new88.land/ Nohu90 8kbet PG88 https://69vn.attorney/ 88VV Hello88 https://asf.us.com/ 3389 33win GK88 tải app kubet https://68gamebai.game/ 789f 8kbet https://ok9.today/ Xoso66 Vip66 ABC8 kubet11 hitclub Wi88 32WIN HB88 HB88 https://bet88.tennis/ https://luongsontv44.com/ ww88 https://j88ss.com/ https://789wincom.me/ https://hubett2.org/ bong99 https://mb66.bz/ BET88 69vn com https://fb88nu.com/ qh88 Kubet https://nohu90phut.com/ bet88 https://vibong88.com/ https://nhacaiuytinbiz.com/ king88 https://thabet789.net/ Good88 Ga6789 nhacaiuytin Daga Link https://keonhacai.select/ bet88 FB88 https://69vnn.trading/ https://bet88org.com/ https://88clbus.com/ https://u888rse.com/ XOSO66 https://polodemocratico.info/ https://tartankicks.uk/ https://typhu888.shop https://typhu888.site ae888 88vv bj88 W88 W88 https://fun88.place/ b52 club 13 WIN Bet88 69vn https://nohu90.cc/ 88CLB kubet xin88 ee88 69vn iwin nohu789.net nohu.express fun88 Daga 69vn new882.info kubet77 Hi88 8day Thabet 33win Bk8 fun88 789win w88 nhà cái uy tín Go88 sunwin sunwin sunwin jun88 bk8 rikvip hitclub sunwin go88 98win 789bet m88 s666 sv388 12bet v9bet betvisa betvisa vin777 vin777 ee88 bet88 78win abc8 c54 new88 i9bet ok365 ae888 https://keonhacai.fund/ https://98win.deal/ FB88 QH88 Tài Xỉu Go88 kèo nhà cái 5 nohu90.store Fun88 bj88 https://gamebai.in.net/ 1bet88 pro nha cai uy tin https://max886.org/ 69VN sunwin NEW88 https://debetoz.com/ hit club e2bet https://bet88zs.com/ 32win 68 game bài NH88 game bài đổi thưởng W88 PG88 https://789win.health/ bet88 33win com F8BET QQ88 https://king88.international/ WIN55 e2bet bl-555.it.com https://bl555.org.uk/ HUBET 79win 78win 789BET 58Win w88 S666 Typhu88 V9BET Bong88 Fb88 sv388 KIWI 12bet Kubet IWIN IWIN good88 i9BET 99ok 123b 789win Good88 79king Nhà cái uy tín Bk8 Hb88 w88 fun88 Kèo nhà cái Bet88 789F 78win 8kbet https://vb88.social/ J88 https://tk88678.com/ https://t8kbet.com/ ww88 https://ok9393.com/ 69VN 69VN 69VN 69VN KUBET88 max88 net88 soc88 vn138 qq88 com 23win.solar https://bk8co.net/ https://mitomtv.mobi/ 88vv EV88 PG88 daga 23win ev88 sv368 luck8 NN88 Sbobet For88 https://u888me.info/ https://23win0.com/ https://23winme.com 8kbet F168 789BET https://king88aff.com/ 58WIN NOHU90 bet88 88CLB 99ok 97win F168 58WIN 123Win Xoso66 BET88 uu88 https://okking.uk/ alo789 sv368 sv388 dagatructiep ev88 99ok 88vn F168 23win 78win 88clb 18win 79KING SV66 RR88 daga HB88 Tk88 qq88 okking BL555 BL555 rr88 hello88 https://rikbet.team/ https://alo789.rocks/ https://ok365.jpn.com/ https://v9beti.com/ https://23win.codes/ https://58win.digital/ 68win nhà cái uy tín https://qh88.cymru https://qh88.casa https://m88club.biz https://m88vinvn.com https://79kinggod.club https://79kingvn.xyz https://kubet29.vip https://kubet79.top https://w88linkb.com https://188betlinkb.com https://188betlinka.com https://e2beting.com/ 69vn TD88 xoilac cakhiatv socolive QQ88 TP88 69vn King88 zowin 8kbet https://23win.kim/ pg99 https://new88.market/ https://ppc.uk.net/ f8bet E2bet 98WIN daga88 32WIN.SALE hi 88 U888 nohu90 http://9bet.faith/ https://8kbettt.co/ King88 King88 88i https://nohu90ab.com/ kubet https://king886.co/ 69VN 79king 32win 32win VN88 F168 bet88 Xoso66 Luong Son TV daga 6789 6789 32win https://9ae888.com/ https://23win.men/ xoso66 u888 rr88 79king pg88 s666 fb88 ww88 9bet 7ff https://bubet.com/ https://bin88.com/ BET88 https://new88.land/ f168 https://j88ss.com/ 88vv https://1goal123.com/ i9bet EV88 https://abc8gd.com/

wpDiscuz