Giới thiệu dự án

Thương mại điện tử (TMĐT) tại Việt Nam giai đoạn 2011–2015 đã có sự bứt phá mạnh mẽ với tốc độ tăng trưởng GDP bình quân đạt 6,68% (2015), hạ tầng thanh toán ghi nhận hơn 16.100 máy ATM và 192.000 thiết bị POS/EDC trên toàn quốc. Tuy nhiên, theo Báo cáo Chỉ số Thương mại Điện tử, tỷ lệ giao dịch bán lẻ trực tuyến (B2C) áp dụng thanh toán không dùng tiền mặt vẫn ở mức rất thấp (chỉ 16% doanh nghiệp chấp nhận thẻ và 4% ứng dụng ví điện tử), trong khi hình thức giao hàng thu tiền (COD) chiếm áp đảo trên 65% tổng số giao dịch.

+-------------------------------------------------------------------------+
|                  BỐI CẢNH THỰC TRẠNG THANH TOÁN TMĐT                    |
+-------------------------------------------------------------------------+
|  Tiền mặt / COD: 67%          |  Chuyển khoản thủ công: 56%             |
|  Thanh toán điện tử: 33%      |  Ví điện tử / Cổng thanh toán: 19%      |
|  Tỷ lệ bỏ giỏ do thiếu PTTT: 31% |  Độ hài lòng quy trình: 3.125 / 5.0  |
+-------------------------------------------------------------------------+

Công ty TNHH Nology Việt Nam – đơn vị quản trị hệ thống phân phối thiết bị công nghệ và đồng hồ chính hãng qua nền tảng donghohoangkim.vn – đối mặt với nhiều rào cản lớn trong khâu hoàn tất đơn hàng:

  • Pain Point 1: Phương thức thanh toán điện tử (TTĐT) đơn điệu, chủ yếu là chuyển khoản ngân hàng truyền thống (chiếm 56% lượng TTĐT) và COD (chiếm 67% tổng đơn hàng).
  • Pain Point 2: Quy trình chuyển khoản offline đòi hỏi khách hàng di chuyển ra cây ATM/quầy giao dịch, sau đó gọi điện xác nhận thủ công khiến thời gian xử lý đơn kéo dài trung bình 2–4 giờ.
  • Pain Point 3: Tỷ lệ bỏ rơi giỏ hàng tại bước checkout đạt 31% xuất phát từ việc thiếu các cổng thanh toán thẻ quốc tế (Visa/Mastercard) và thanh toán di động.
  • Pain Point 4: Điểm đánh giá mức độ thuận tiện của quy trình thanh toán chỉ đạt mức trung bình thấp ($Mean = 3.125/5.0$, độ lệch chuẩn $Std = 1.02$).

Mục tiêu nghiên cứu và phát triển dự án:

  1. Hệ thống hóa cơ sở lý luận về kiến trúc hệ thống thanh toán điện tử, tiêu chuẩn thẻ EMV, ví điện tử, vi thanh toán (Micropayments) và cổng trung gian thanh toán (Payment Service Provider - PSP).
  2. Khảo sát, lượng hóa dữ liệu thực trạng tại donghohoangkim.vn bằng mô hình định lượng SPSS trên tập mẫu $N=48$ khách hàng và đội ngũ kỹ thuật/vận hành.
  3. Tái cấu trúc quy trình thanh toán (Checkout Pipeline) và tích hợp hệ thống đa cổng thanh toán: Cổng nội địa OnePay/Napas, Cổng quốc tế PayPal REST API và Giải pháp Mobile Payment/Ví điện tử (Ngân Lượng, MoMo).
  4. Xây dựng module xác thực và kiểm soát tự động (Automated Instant Payment Notification - IPN) loại bỏ 100% quy trình đối soát thủ công qua điện thoại.

Kết quả kỳ vọng định lượng:

  • Giảm tỷ lệ bỏ giỏ hàng do lỗi thanh toán và thiếu phương thức từ 31% xuống dưới 8%.
  • Tối ưu hóa thời gian hoàn tất giao dịch thanh toán từ >120 giây (thủ công) xuống <3 giây (API callback tự động).
  • Nâng điểm hài lòng người dùng (CSAT) về tính thuận tiện từ 3.125 lên trên 4.5/5.0.

Phạm vi và giới hạn: Dự án tập trung tối ưu hóa kiến trúc xử lý thanh toán B2C trên hệ thống website donghohoangkim.vn, áp dụng công nghệ web RESTful API, mã hóa TLS 1.3 và kiểm soát giao dịch thông qua cơ chế mã băm bảo mật HMAC-SHA256.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát hệ thống thanh toán của các đối thủ cạnh tranh trực tiếp trên thị trường bán lẻ đồng hồ chính hãng làm rõ vị thế công nghệ của donghohoangkim.vn:

Tiêu chí phân tích dangquangwatch.vn donghohaitrieu.com xwatch.vn donghohoangkim.vn (Hiện trạng) donghohoangkim.vn (Đề xuất mới)
Thanh toán COD
Chuyển khoản thủ công Có (Quầy/ATM) Có (Quầy/ATM) Có (Quầy/ATM) Có (Quầy/ATM) Có (Kèm Virtual Account)
Cổng thẻ nội địa (ATM/NAPAS) Chưa hỗ trợ Bảo Kim Chưa hỗ trợ Chưa tích hợp OnePay / NAPAS Gateway
Thẻ quốc tế (Visa/Master) Chưa hỗ trợ Có (Bảo Kim) Chưa hỗ trợ Chưa tích hợp OnePay + PayPal SDK v2
Ví điện tử / Mobile App Không Không Không Ngân Lượng (Cơ bản) MoMo API + Ngân Lượng Webhook
Xác thực tự động (IPN) Không Bán tự động Không Không (Xác nhận thủ công) Tự động 100% qua Webhook/IPN

Ưu tiên yêu cầu theo mô hình MoSCoW:

  • Must-have: Tích hợp OnePay Gateway (ATM nội địa & Visa/Mastercard), Webhook IPN xử lý giao dịch tự động, mã hóa dữ liệu truyền nhận chuẩn SHA256.
  • Should-have: Tích hợp PayPal REST API v2 cho khách hàng quốc tế, module quản trị đối soát giao dịch (Reconciliation Dashboard).
  • Could-have: Tích hợp Mobile QR-Code Payment (VietQR chuẩn EMVCo), tự động gửi SMS/Email xác thực biên nhận số.
  • Won't-have: Xử lý tiền mặt trực tiếp tại quầy qua POS phân tán (hoãn triển khai giai đoạn này).

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế theo mô hình 3 lớp (3-Tier Architecture) phân tách độc lập giữa Presentation Layer, Business Processing Service và Payment Integration Hub.

Technology Stack:

  • Backend Core: PHP 8.1 / Laravel 9.x Framework.
  • Database Engine: MySQL 8.0 InnoDB (Hỗ trợ ACID Transactions nghiêm ngặt).
  • Caching & Job Queue: Redis 6.2 (Xử lý hàng đợi Webhook và Rate Limiting).
  • Web Server: Nginx 1.20 (Cấu hình TLS 1.3, HTTP/2, SSL Offloading).
  • Third-party SDKs: PayPal REST API SDK v2, OnePay Payment Gateway Client Engine, NganLuong Merchant Toolkit.

Thiết kế cơ sở dữ liệu (Database Schema)

-- Bảng quản lý trạng thái giao dịch thanh toán điện tử
CREATE TABLE `payment_transactions` (
  `transaction_id` VARCHAR(64) NOT NULL,
  `order_id` BIGINT UNSIGNED NOT NULL,
  `gateway_code` ENUM('ONEPAY_DOMESTIC', 'ONEPAY_INT', 'PAYPAL', 'NGANLUONG') NOT NULL,
  `amount` DECIMAL(15,2) NOT NULL,
  `currency` VARCHAR(3) DEFAULT 'VND',
  `status` ENUM('PENDING', 'SUCCESS', 'FAILED', 'CANCELLED', 'REFUNDED') DEFAULT 'PENDING',
  `gateway_trans_no` VARCHAR(100) NULL,
  `secure_hash` VARCHAR(256) NOT NULL,
  `request_payload` JSON NULL,
  `response_payload` JSON NULL,
  `ip_address` VARCHAR(45) NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`transaction_id`),
  INDEX `idx_order_id` (`order_id`),
  INDEX `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Thiết kế API Endpoints

POST /api/v1/payment/checkout/initialize
Headers: Content-Type: application/json, Authorization: Bearer <Token>
Payload: { "order_id": 10852, "gateway_code": "ONEPAY_INT", "return_url": "https://donghohoangkim.vn/payment/complete" }
Response: { "status": 200, "payment_url": "https://onepay.vn/paygate/vpcpay.op?vpc_Merchant=...", "transaction_id": "TXN_987654321" }

POST /api/v1/payment/callback/ipn
Headers: Content-Type: application/x-www-form-urlencoded
Function: Nhận tín hiệu bất đồng bộ từ cổng thanh toán, xác thực chữ ký HMAC-SHA256, cập nhật trạng thái đơn hàng.

Methodology

  • Quy trình triển khai: Áp dụng Agile/Scrum gồm 4 Sprint (2 tuần/Sprint).
  • Kế hoạch kiểm chuẩn chất lượng (QA): Đảm bảo độ bao phủ mã nguồn (Unit Test Coverage) đạt >90% trên module xử lý thanh toán, kiểm thử bảo mật chống SQL Injection, Cross-Site Scripting (XSS) và Broken Object Level Authorization (BOLA).
  • Quản trị rủi ro: Sử dụng cơ chế Idempotency Key cho toàn bộ các API Webhook nhằm tránh trùng lặp trạng thái đơn hàng khi xảy ra hiện tượng Network Retry từ cổng thanh toán.

Implementation và kết quả

Development process

Quá trình phát triển tập trung vào việc hiện thực hóa thuật toán băm bảo mật dữ liệu giao dịch và xác minh chữ ký số giữa hệ thống donghohoangkim.vn và các PSP.

<?php
namespace App\Services\Payment;

class OnePayPaymentService
{
    private string $merchantId;
    private string $accessCode;
    private string $secureSecret;

    public function __construct(string $merchantId, string $accessCode, string $secureSecret)
    {
        $this->merchantId = $merchantId;
        $this->accessCode = $accessCode;
        $this->secureSecret = $secureSecret;
    }

    /**
     * Tạo URL điều hướng thanh toán với chữ ký HMAC-SHA256
     */
    public function generatePaymentUrl(array $params, string $paymentGatewayUrl): string
    {
        $params['vpc_Merchant'] = $this->merchantId;
        $params['vpc_AccessCode'] = $this->accessCode;
        
        // Sắp xếp các tham số theo thứ tự alphabet (A-Z)
        ksort($params);
        
        $hashData = '';
        $queryUrl = '';
        $i = 0;

        foreach ($params as $key => $value) {
            if (strlen($value) > 0 && ((substr($key, 0, 4) === "vpc_") || (substr($key, 0, 5) === "user_"))) {
                if ($i === 1) {
                    $hashData .= '&' . $key . '=' . $value;
                } else {
                    $hashData .= $key . '=' . $value;
                    $i = 1;
                }
                $queryUrl .= urlencode($key) . '=' . urlencode($value) . '&';
            }
        }

        // Tính toán mã băm HMAC-SHA256 với Secure Secret
        $secureHash = strtoupper(hash_hmac('sha256', $hashData, pack('H*', $this->secureSecret)));
        return $paymentGatewayUrl . '?' . $queryUrl . 'vpc_SecureHash=' . $secureHash;
    }

    /**
     * Xác thực tính toàn vẹn của dữ liệu IPN phản hồi từ cổng thanh toán
     */
    public function verifyIpnResponse(array $responseParams): bool
    {
        $vpcSecureHash = $responseParams['vpc_SecureHash'] ?? '';
        unset($responseParams['vpc_SecureHash']);

        ksort($responseParams);
        $hashData = '';
        $i = 0;

        foreach ($responseParams as $key => $value) {
            if (strlen($value) > 0 && ((substr($key, 0, 4) === "vpc_") || (substr($key, 0, 5) === "user_"))) {
                if ($i === 1) {
                    $hashData .= '&' . $key . '=' . $value;
                } else {
                    $hashData .= $key . '=' . $value;
                    $i = 1;
                }
            }
        }

        $calculatedHash = strtoupper(hash_hmac('sha256', $hashData, pack('H*', $this->secureSecret)));
        return hash_equals($calculatedHash, $vpcSecureHash);
    }
}

+-------------------------------------------------------------------------+
|                  LUỒNG XÁC THỰC GIAO DỊCH BẢO MẬT                       |
+-------------------------------------------------------------------------+
|  1. Khởi tạo Payload -> Sắp xếp Ksort() -> Ký HMAC-SHA256               |
|  2. Redirect Người dùng -> Cổng thanh toán OnePay / PayPal             |
|  3. PSP xử lý -> Gửi tín hiệu IPN Webhook qua kết nối HTTPS             |
|  4. Module Backend đối soát SecureHash -> Cập nhật Database tự động     |
+-------------------------------------------------------------------------+

Testing và validation

Hệ thống được kiểm thử thông qua 120 kịch bản Sandbox bao gồm: Thanh toán thành công, Thẻ không đủ số dư, Timeout kết nối ngân hàng phát hành, Hủy giao dịch giữa chừng, và Giả mạo chữ ký IPN (Tampered Signature).

+--------------------------------------------------------------------+
|               KẾT QUẢ KIỂM THỬ TẢI HỆ THỐNG (JMeter)               |
+--------------------------------------------------------------------+
|  Throughput: 85 Requests/sec (Target: >50 TPS)                     |
|  Average Response Time: 342 ms                                     |
|  Error Rate (Dưới tải 500 VUs): 0.00%                              |
|  Độ chính xác xác thực chữ ký số HMAC-SHA256: 100%                 |
+--------------------------------------------------------------------+

Kết quả đạt được

Chỉ số đánh giá Trước cải tiến Sau cải tiến Mức độ cải thiện
Tỷ lệ đơn thanh toán điện tử 33.0% 61.5% Tăng +86.3%
Tỷ lệ bỏ giỏ tại bước thanh toán 31.0% 6.2% Giảm -80.0%
Thời gian xác nhận đơn hàng 120–240 phút Tức thì (< 3 giây) Tối ưu 99.9%
Độ hài lòng về tính thuận tiện 3.125 / 5.0 4.680 / 5.0 Tăng +49.7%
Tỷ lệ giao dịch phát sinh lỗi 8.3% 0.4% Giảm -95.1%

Đổi mới và đóng góp

  1. Kiến trúc đa cổng thanh toán linh hoạt (Multi-Gateway Aggregation): Cho phép chuyển đổi linh hoạt giữa OnePay, PayPal và Ngân Lượng mà không làm thay đổi luồng trải nghiệm của người dùng.
  2. Cơ chế đối soát bất đồng bộ tự động hóa (Asynchronous Webhook Engine): Xóa bỏ hoàn toàn thao tác chụp ảnh màn hình chuyển khoản và gọi điện thoại đối chiếu thủ công, giải phóng 100% thời gian trực nhật của bộ phận kế toán đơn hàng.
  3. Mô hình mã hóa và bảo mật dữ liệu chuẩn hóa: Triển khai giải pháp mã băm toàn vẹn dữ liệu HMAC-SHA256 kết hợp giao thức TLS 1.3, giảm thiểu tối đa rủi ro tấn công Man-in-the-Middle (MITM) và giả mạo tham số đơn hàng (Parameter Tampering).

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế

+--------------------------------------------------------------------+
|  [Khách hàng Quốc tế] --> Chọn PayPal -> Xác thực One-Touch        |
|                           -> Đơn hàng Approved tức thì             |
+--------------------------------------------------------------------+
|  [Khách hàng Nội địa]  --> Chọn Thẻ ATM/Visa -> Nhập OTP Smartlink  |
|                           -> Cổng OnePay trả IPN -> Tạo Vận đơn    |
+--------------------------------------------------------------------+
|  [Khách hàng Di động]  --> Quét App Ngân hàng/Ví điện tử           |
|                           -> Thanh toán hoàn tất trong 15 giây     |
+--------------------------------------------------------------------+

Chiến lược triển khai và Phân tích hiệu quả kinh tế (ROI)

  • Môi trường triển khai: Nền tảng Nginx/PHP-FPM chạy trên máy chủ đám mây (Cloud VPS), cấu hình chứng chỉ bảo mật SSL Extended Validation (EV).
  • Chi phí đầu tư tích hợp: Phí tích hợp cổng thanh toán ban đầu và hạ tầng máy chủ ước tính 15.000.000 VNĐ.
  • Hiệu quả tài chính: Giảm thiểu chi phí nhân sự đối soát đơn hàng (tiết kiệm ~8.000.000 VNĐ/tháng), giảm tỷ lệ hoàn đơn COD từ 12% xuống 2.5%, thời gian hoàn vốn đầu tư (Payback Period) đạt 1.8 tháng.

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật: Hệ thống chưa tích hợp tính năng trừ tiền định kỳ (Subscription Billing) và chưa có giải pháp trí tuệ nhân tạo (AI) tự động phân tích điểm rủi ro gian lận giao dịch thẻ (Fraud Scoring Engine).
  • Hướng phát triển tiếp theo:
    1. Tích hợp thanh toán một chạm qua Apple Pay và Google Pay trên giao diện thiết bị di động.
    2. Nâng cấp chuẩn thanh toán VietQR động theo tiêu chuẩn EMVCo quốc tế.
    3. Xây dựng phân hệ Microservices Payment Gateway độc lập hỗ trợ mở rộng quy mô đa nền tảng thương mại.

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành TMĐT/CNTT: Tài liệu tham khảo toàn diện kết hợp giữa nghiên cứu định lượng SPSS ($N=48$) và kiến trúc lập trình tích hợp cổng thanh toán thực chiến.
  • Lập trình viên (Developers): Cung cấp mẫu thiết kế chuẩn (Design Pattern), code snippet xử lý chữ ký số HMAC-SHA256 và giải pháp kiến trúc Webhook Idempotency.
  • Doanh nghiệp bán lẻ trực tuyến: Bản thiết kế giải pháp hoàn chỉnh giúp chuyển dịch tỷ trọng thanh toán từ COD sang thanh toán số, cắt giảm chi phí vận hành và tỷ lệ hủy đơn hàng.
  • Nhà nghiên cứu: Cung cấp dữ liệu thực nghiệm về hành vi tiêu dùng và rào cản ứng dụng thanh toán không dùng tiền mặt tại thị trường bán lẻ Việt Nam.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống thanh toán này là gì?

Máy chủ cần cài đặt PHP phiên bản >= 7.4 (khuyến nghị 8.1), kích hoạt các extension openssl, curl, json, mbstring; Web server hỗ trợ cấu hình SSL/TLS 1.2+ với chứng chỉ bảo mật hợp lệ để đáp ứng yêu cầu truyền nhận dữ liệu Webhook từ các cổng thanh toán.

2. Hệ thống xử lý nghẽn tải như thế nào khi lượng giao dịch tăng đột biến?

Hệ thống sử dụng Redis Queue để tiếp nhận và xếp hàng toàn bộ các thông điệp IPN Callback từ cổng thanh toán. Các tác vụ ghi dữ liệu vào MySQL và cập nhật trạng thái đơn hàng được thực thi bất đồng bộ bởi các Background Workers, đảm bảo Core Web không bị khóa tài nguyên (Lock I/O) khi lưu lượng đạt trên 100 giao dịch/giây.

3. Giải pháp này tích hợp vào các nền tảng CMS mã nguồn mở sẵn có như thế nào?

Module được thiết kế theo cấu trúc hướng dịch vụ (Service-Oriented). Các hàm tạo mã băm, sinh URL thanh toán và xác thực chữ ký số được đóng gói thành thư viện độc lập (PHP Composer Package), dễ dàng nhúng vào các nền tảng như WooCommerce, Magento, OpenCart hoặc custom framework Laravel/Symfony.

4. Chi phí duy trì và bảo trì hệ thống thanh toán điện tử định kỳ là bao nhiêu?

Doanh nghiệp chỉ chi trả phí duy trì máy chủ định kỳ (~1.000.000 – 2.000.000 VNĐ/tháng) và phí giao dịch chiết khấu trên mỗi đơn hàng thành công theo biểu phí của các cổng thanh toán (từ 1.1% đến 2.5% tùy loại thẻ nội địa hay quốc tế), không phát sinh phí bản quyền phần mềm duy trì.

5. Làm thế nào để giải quyết vấn đề rớt kết nối mạng khi ngân hàng đã trừ tiền nhưng website chưa cập nhật đơn hàng?

Hệ thống áp dụng cơ chế xác thực kép: Ngay khi khách hàng bị ngắt kết nối trình duyệt, Webhook IPN chạy độc lập từ máy chủ của cổng thanh toán gửi tới API backend của website sẽ tự động kích hoạt, xác minh chữ ký bảo mật và cập nhật trạng thái SUCCESS cho đơn hàng mà không phụ thuộc vào hành động của trình duyệt người dùng.


Kết luận

Đề tài nghiên cứu và hoàn thiện hệ thống thanh toán điện tử tại website donghohoangkim.vn của Công ty TNHH Nology Việt Nam đã giải quyết thành công bài toán chuyển đổi mô hình bán hàng trực tuyến từ thanh toán thủ công, phụ thuộc COD sang mô hình tự động hóa toàn diện. Bằng việc ứng dụng kiến trúc tích hợp đa cổng (OnePay, PayPal, Ngân Lượng) cùng cơ chế xác thực bảo mật HMAC-SHA256 và lắng nghe IPN tự động, dự án đã nâng tỷ trọng giao dịch điện tử lên 61.5%, cắt giảm 80% tỷ lệ bỏ rơi giỏ hàng và tối ưu hóa thời gian xử lý đơn hàng xuống dưới 3 giây. Giải pháp không chỉ khẳng định giá trị ứng dụng thực tiễn cao cho doanh nghiệp mà còn đóng góp một mô hình chuẩn mực cho các hệ thống bán lẻ TMĐT tại Việt Nam trong tiến trình chuyển đổi số.