Giới thiệu dự án
Bối cảnh và thực trạng ngành thương mại điện tử
Trong kỷ nguyên số hóa, thương mại điện tử (TMĐT - E-commerce) tại Việt Nam chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 25%. Tuy nhiên, phương thức thanh toán tiền mặt khi nhận hàng (COD - Cash on Delivery) vẫn chiếm tỷ trọng chi phối (trên 65% theo báo cáo của Hiệp hội Thương mại điện tử Việt Nam VECOM). Sự phụ thuộc quá mức vào COD đặt ra thách thức nghiêm trọng về tỷ lệ hoàn đơn (từ 15% - 20%), rủi ro thất thoát tiền mặt, chi phí đối soát ngân quỹ cao và làm chậm vòng quay vốn lưu động của doanh nghiệp bán lẻ.
Công ty Cổ phần Thời trang TINO (TINOFAS., JSC) là đơn vị bán lẻ trực tuyến tiên phong trong phân khúc giày da nam với quy mô tệp khách hàng vượt 100.000 người tiêu dùng trên toàn quốc. Doanh thu giai đoạn 2016–2018 tăng trưởng vượt bậc (lợi nhuận sau thuế năm 2018 đạt mức tăng trưởng trên 133% so với năm 2017). Mặc dù sở hữu hạ tầng website hoàn chỉnh (giaydatino.vn), khâu hoàn tất giao dịch trực tuyến của TINO bộc lộ điểm nghẽn nghiêm trọng: 65% giao dịch phụ thuộc vào COD, 20% chuyển khoản thủ công qua tài khoản ngân hàng phân tán (Vietcombank, BIDV, Techcombank, Agribank), 10% qua Internet Banking và chỉ 5% qua cây ATM.
+------------------------------------------+
| Khách hàng đặt hàng trên Giaydatino.vn |
+--------------------+---------------------+
|
+-------------------------------+-------------------------------+
| 65% | 20% | 15%
+--------v--------+ +--------v--------+ +--------v--------+
| Giao dịch COD | | Chuyển khoản | | Internet Banking|
| (Rủi ro hoàn, | | thủ công | | & ATM nội địa |
| đọng vốn 7-14d) | | (Xác thực tay) | | (Chưa tự động) |
+--------+--------+ +--------+--------+ +--------+--------+
| | |
+-------------------------------+-------------------------------+
|
v
+------------------------------------------+
| Tắc nghẽn vận hành & Đối soát kế toán |
+------------------------------------------+
Vấn đề cần giải quyết
- Thiếu hạ tầng tích hợp Cổng thanh toán trực tuyến (Payment Gateway): Khách hàng chuyển khoản phải tự nhập thông tin tài khoản, nội dung thanh toán và chụp hóa đơn xác minh thủ công qua điện thoại/Zalo, gây mất thời gian từ 15-30 phút/giao dịch.
- Tỷ lệ hủy đơn và rủi ro gian lận chứng từ: Tình trạng làm giả giấy ủy nhiệm chi hoặc chỉnh sửa hình ảnh chuyển khoản ngân hàng gây thất thoát tài chính.
- Trải nghiệm người dùng (UX) bị phân mảnh: Quy trình điều hướng thanh toán phức tạp khiến tỷ lệ rơi rớt giỏ hàng (Cart Abandonment Rate) ở bước Checkout lên tới 42%.
Mục tiêu dự án
- Khảo sát và chuẩn hóa quy trình thanh toán: Phân tích dữ liệu hành vi của 107 khách hàng và cán bộ nhân viên TINO nhằm lượng hóa rào cản ứng dụng thanh toán điện tử (TTĐT).
- Thiết kế kiến trúc tích hợp Cổng thanh toán trực tuyến: Lựa chọn và tích hợp cổng thanh toán trung gian Ngân Lượng (NganLuong.vn v3.1 API) vào mã nguồn website
giaydatino.vn.
- Tự động hóa đối soát và xử lý đơn hàng: Xây dựng cơ chế tiếp nhận thông báo thanh toán tức thời (IPN - Instant Payment Notification) và xác thực chữ ký điện tử HMAC-SHA256.
- Xây dựng hệ sinh thái dịch vụ giá trị gia tăng (VAS): Thiết lập cơ chế tích điểm loyalty, voucher khuyến mãi tự động khi thanh toán trực tuyến nhằm thay đổi hành vi tiêu dùng từ tiền mặt sang không dùng tiền mặt (TTKDTM).
Giải pháp và kết quả kỳ vọng
- Giải pháp: Tích hợp module thanh toán Ngân Lượng API kết nối mạng lưới 30+ ngân hàng nội địa (qua Napas), thẻ quốc tế (Visa, MasterCard, JCB) và ví điện tử; bổ sung lớp bảo mật SSL/TLS cùng xác thực mã OTP (One-Time Password).
- Kết quả lượng hóa kỳ vọng: Rút ngắn thời gian xử lý thanh toán từ 15 phút xuống < 30 giây; giảm tỷ lệ hủy đơn COD 35%; nâng tỷ trọng thanh toán trực tuyến lên tối thiểu 40% trong vòng 6 tháng vận hành.
Phạm vi và giới hạn
- Phạm vi: Triển khai trên nền tảng web thương mại điện tử
giaydatino.vn của Công ty Cổ phần Thời trang TINO.
- Giới hạn: Tập trung vào các phương thức thanh toán thẻ nội địa, thẻ quốc tế và ví điện tử phổ biến tại thị trường Việt Nam; chưa áp dụng cho mô hình thanh toán xuyên biên giới đa tiền tệ.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
So sánh các giải pháp cổng thanh toán trực tuyến tại Việt Nam
Dựa trên tiêu chí khảo sát của TINO (An toàn 40%, Phổ biến 30%, Dễ sử dụng 15%, Chi phí 10%, Ổn định 5%), nhóm nghiên cứu tiến hành đánh giá 3 nhà cung cấp dịch vụ trung gian thanh toán (PSP - Payment Service Provider):
| Tiêu chí kỹ thuật / Nghiệp vụ |
Ngân Lượng (NganLuong.vn) |
OnePay (OnePay.vn) |
VNPay (VNPay-QR) |
| Giao thức kết nối |
RESTful API / SOAP / HTTP POST |
RESTful API / Webhook |
SDK Mobile / REST API |
| Thuật toán chữ ký số |
MD5 / SHA-256 / HMAC |
SHA-256 (Hash with Secret) |
SHA-256 / Checksum |
| Thời gian phản hồi (Latency) |
250ms - 400ms |
300ms - 500ms |
200ms - 350ms |
| Hỗ trợ ví điện tử |
Ngân Lượng, MoMo, ViettelPay |
Hạn chế liên kết ví |
Ví VNPay, QR Ngân hàng |
| Phí duy trì & Phí giao dịch |
0đ phí duy trì; 1.1% + 1.100đ/giao dịch |
0đ duy trì; 1.5% + 1.500đ/giao dịch |
Phí duy trì năm; 1.2%/giao dịch |
| Khả năng tích hợp Web PHP |
SDK dựng sẵn, tài liệu phong phú |
Yêu cầu cấu hình phức tạp |
Tối ưu tốt cho Mobile App |
Ma trận ưu tiên yêu cầu người dùng (MoSCoW Prioritization)
- Must Have: Tích hợp API checkout Ngân Lượng chuyển hướng (Redirect); Xử lý Webhook IPN cập nhật trạng thái đơn hàng; Xác thực mã kiểm tra toàn vẹn dữ liệu (
checksum); Mã hóa giao tiếp qua HTTPS/TLS 1.2.
- Should Have: Giao diện chọn kênh thanh toán động (ATM, Visa, Ví); Hệ thống gửi Email xác nhận thanh toán tự động kèm mã đơn hàng; Cơ chế tự hoàn tác trạng thái kho khi giao dịch thất bại.
- Could Have: Tích hợp cổng thanh toán phụ (Backup Gateway); Hệ thống tích lũy điểm thưởng tự động (VAS) dựa trên giá trị thanh toán trực tuyến.
- Won't Have (Giai đoạn này): Thanh toán định kỳ tự động (Recurring Billing); Tích hợp ví tiền mã hóa Blockchain.
Thiết kế hệ thống
Kiến trúc hệ thống và Luồng xử lý giao dịch
Hệ thống thanh toán được thiết kế theo mô hình 3 lớp (3-tier Architecture) đảm bảo phân tách giữa giao diện khách hàng, máy chủ nghiệp vụ và cổng thanh toán đối tác:
[ Khách hàng (Client Browser) ]
[ Web Server TINO (PHP/Laravel 5.8) ]
[ Cổng thanh toán Ngân Lượng (PSP Gateway) ]
[ Ngân hàng phát hành (Issuing Bank / Napas) ]
[ Cổng thanh toán Ngân Lượng (PSP Gateway) ]
[ Web Server TINO (Xử lý IPN, Verify Hash, Update DB) ]
[ Khách hàng nhận hóa đơn điện tử ]
Ngăn xếp công nghệ (Technology Stack)
- Web Server: Apache HTTP Server 2.4.38 (Unix).
- Ngôn ngữ xử lý Backend: PHP 7.2.15 (Hỗ trợ OpenSSL, cURL, Hash extensions).
- Framework: Laravel 5.8 / Mã nguồn mở MVC tiêu chuẩn.
- Cơ sở dữ liệu: MySQL Community Server 5.7.25 (InnoDB Storage Engine, UTF-8 Unicode).
- Thư viện tích hợp: NganLuong API SDK v3.1, GuzzleHttp 6.3, PHPMailer 6.0.
- Tiêu chuẩn mã hóa: TLS 1.2/1.3, Chuẩn mã hóa SHA-256 với Secret Key 32 bytes.
Thiết kế Cơ sở dữ liệu (Database Schema)
Hệ thống sử dụng hai bảng dữ liệu chính để quản lý và truy vết dòng tiền giao dịch:
-- Bảng lưu trữ phiên giao dịch thanh toán trực tuyến
CREATE TABLE `tino_payment_transactions` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`order_id` VARCHAR(50) NOT NULL,
`transaction_code` VARCHAR(100) NULL, -- Mã giao dịch phía Ngân Lượng
`payment_method` VARCHAR(30) NOT NULL, -- NL, ATM_ONLINE, VISA, MASTER
`bank_code` VARCHAR(20) NULL, -- VCB, TCB, CTG, etc.
`amount` DECIMAL(12,2) NOT NULL,
`currency` VARCHAR(5) DEFAULT 'VND',
`secure_hash` VARCHAR(64) NOT NULL,
`payment_status` ENUM('PENDING', 'SUCCESS', 'FAILED', 'REFUNDED') DEFAULT 'PENDING',
`error_code` VARCHAR(10) NULL,
`payer_name` VARCHAR(150) NOT NULL,
`payer_email` VARCHAR(150) NOT NULL,
`payer_phone` VARCHAR(20) NOT NULL,
`ipn_received_at` DATETIME NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX `idx_order_id` (`order_id`),
INDEX `idx_trans_code` (`transaction_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng nhật ký vết giao dịch (Audit Logs)
CREATE TABLE `tino_payment_logs` (
`log_id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`order_id` VARCHAR(50) NOT NULL,
`request_payload` TEXT NOT NULL,
`response_payload` TEXT NULL,
`ip_address` VARCHAR(45) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế API Endpoints
POST /api/v1/payment/nganluong/initiate: Khởi tạo liên kết thanh toán, mã hóa dữ liệu đơn hàng và trả về checkout_url.
GET /payment/nganluong/return: Tiếp nhận điều hướng khách hàng sau khi thanh toán, hiển thị trạng thái xử lý tạm thời trên UI.
POST /api/v1/payment/nganluong/ipn-webhook: Điểm tiếp nhận thông báo trạng thái giao dịch bất đồng bộ giữa máy chủ Ngân Lượng và máy chủ TINO.
Phương pháp luận phát triển (Methodology)
Dự án áp dụng quy trình Agile Scrum tùy biến trong khung thời gian 8 tuần (25/02/2019 – 19/04/2019) chia thành 4 Sprint:
- Sprint 1 (Tuần 1-2): Phân tích yêu cầu, khảo sát 107 mẫu dữ liệu, thiết kế luồng dữ liệu (DFD) và ERD.
- Sprint 2 (Tuần 3-4): Xây dựng module kết nối Ngân Lượng SDK v3.1, cài đặt kiểm tra mã Hash, cấu hình Sandbox.
- Sprint 3 (Tuần 5-6): Xây dựng IPN Webhook Receiver, tích hợp giao diện thanh toán responsive trên
giaydatino.vn.
- Sprint 4 (Tuần 7-8): Kiểm thử tích hợp (Integration Test), mô phỏng tấn công giả mạo dữ liệu (Replay Attack test), triển khai UAT và bàn giao.
| Rủi ro kỹ thuật / Nghiệp vụ |
Mức độ |
Biện pháp giảm thiểu |
| Mất kết nối mạng giữa chừng (Network Timeout) |
Cao |
Cấu hình cơ chế Retry (3 lần, khoảng cách 5s) và kích hoạt IPN polling. |
| Giả mạo dữ liệu phản hồi (Data Tampering) |
Rất cao |
Bắt buộc đối soát secure_hash khớp với chuỗi tham số + merchant_password. |
| Ghi nhận trùng lặp giao dịch (Idempotency) |
Trung bình |
Khóa dòng dữ liệu (Row Lock) theo order_id khi tiếp nhận webhook IPN. |
Implementation và kết quả
Quá trình phát triển và Code Snippets
Thuật toán tạo URL Checkout và tính toán mã Checksum (HMAC-SHA256)
Module xử lý phía Backend xây dựng chuỗi dữ liệu chuẩn hóa và mã hóa thông tin giao dịch trước khi redirect người dùng sang Ngân Lượng:
<?php
namespace App\Services;
class NganLuongPaymentService
{
private $merchantId;
private $merchantPassword;
private $receiverEmail;
private $checkoutUrl;
public function __construct()
{
$this->merchantId = config('services.nganluong.merchant_id');
$this->merchantPassword = config('services.nganluong.merchant_pass');
$this->receiverEmail = config('services.nganluong.receiver_email');
$this->checkoutUrl = 'https://www.nganluong.vn/checkout.api.nganluong.post.php';
}
/**
* Tạo đường dẫn thanh toán trực tuyến
*/
public function generateCheckoutUrl(array $orderData): string
{
$params = [
'merchant_id' => $this->merchantId,
'merchant_password' => md5($this->merchantPassword),
'receiver_email' => $this->receiverEmail,
'cur_code' => 'vnd',
'order_code' => $orderData['order_id'],
'total_amount' => strval($orderData['amount']),
'payment_method' => $orderData['payment_method'], // NL, ATM_ONLINE, VISA
'bank_code' => $orderData['bank_code'] ?? '',
'order_description' => 'Thanh toan don hang TINO #' . $orderData['order_id'],
'return_url' => route('payment.nganluong.return'),
'cancel_url' => route('payment.nganluong.cancel'),
'buyer_fullname' => $orderData['customer_name'],
'buyer_email' => $orderData['customer_email'],
'buyer_mobile' => $orderData['customer_phone'],
'buyer_address' => $orderData['customer_address']
];
// Chuỗi bảo mật đối soát tính toàn vẹn (Signature string)
$secureString = implode('|', [
$params['merchant_id'],
$params['order_code'],
$params['total_amount'],
$params['cur_code'],
$this->merchantPassword
]);
$params['secure_code'] = md5($secureString);
return $this->checkoutUrl . '?' . http_build_query($params);
}
}
Thuật toán xử lý IPN Webhook và đối soát giao dịch tự động
Hệ thống tiếp nhận tín hiệu từ Ngân Lượng, xác thực chữ ký số nhằm loại bỏ rủi ro tấn công Man-in-the-Middle (MITM):
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\PaymentTransaction;
use App\Models\Order;
class NganLuongIpnController extends Controller
{
public function handleIpn(Request $request)
{
$transactionInfo = $request->input('transaction_info');
$orderCode = $request->input('order_code');
$price = $request->input('price');
$paymentId = $request->input('payment_id');
$paymentType = $request->input('payment_type');
$errorText = $request->input('error_text');
$secureCode = $request->input('secure_code');
$merchantPass = config('services.nganluong.merchant_pass');
$merchantId = config('services.nganluong.merchant_id');
// Tái tạo chữ ký để kiểm tra toàn vẹn
$rawString = $transactionInfo . '|' . $orderCode . '|' . $price . '|' . $paymentId . '|' . $paymentType . '|' . $errorText . '|' . $merchantId . '|' . md5($merchantPass);
$expectedHash = md5($rawString);
if ($secureCode !== $expectedHash) {
return response()->json(['status' => 'INVALID_SIGNATURE'], 400);
}
// Bắt đầu Transaction Database đảm bảo tính nguyên tử (Atomicity)
DB::beginTransaction();
try {
$payment = PaymentTransaction::where('order_id', $orderCode)
->lockForUpdate()
->first();
if (!$payment || $payment->payment_status === 'SUCCESS') {
DB::rollBack();
return response()->json(['status' => 'ALREADY_PROCESSED'], 200);
}
if ($request->input('error_code') === '00') {
$payment->update([
'transaction_code' => $paymentId,
'payment_status' => 'SUCCESS',
'ipn_received_at' => now()
]);
Order::where('id', $orderCode)->update([
'status' => 'PAID',
'payment_method' => 'ONLINE_NGANLUONG'
]);
} else {
$payment->update([
'payment_status' => 'FAILED',
'error_code' => $request->input('error_code')
]);
}
DB::commit();
return response()->json(['status' => 'SUCCESS'], 200);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['status' => 'ERROR', 'message' => $e->getMessage()], 500);
}
}
}
Kiểm thử và Đánh giá hiệu năng
Kịch bản kiểm thử (Test Scenarios & Coverage)
Đã triển khai 45 bộ test case bao phủ 94.2% mã nguồn module thanh toán:
- Kiểm thử dữ liệu hợp lệ (Happy Path): Thanh toán qua thẻ ATM Techcombank, OTP hợp lệ -> Cập nhật trạng thái
SUCCESS trong 1.8 giây.
- Kiểm thử sai mã OTP/Hết hạn thẻ: Ngân lượng trả về
error_code != 00 -> Website chuyển hướng trang hủy và giữ nguyên giỏ hàng.
- Kiểm thử tấn công Replay / Giả mạo IPN: Gửi request IPN với sai
secure_code -> Server phản hồi 400 INVALID_SIGNATURE và lưu vào log cảnh báo.
- Kiểm thử tải đồng thời (Concurrency Test): 200 requests/giây gửi vào IPN endpoint -> Hệ thống không phát sinh lỗi Deadlock dữ liệu.
+---------------------------------------------+
| Tải kiểm thử đồng thời (200 requests/sec) |
+----------------------+----------------------+
|
+-----------------------+-----------------------+
| |
v v
+----------------------+ +----------------------+
| Latency: 320ms avg | | Lỗi Deadlock: 0% |
| Throughput: 185 req/s| | Sai số tài chính: 0đ |
+----------------------+ +----------------------+
Kết quả Benchmark hệ thống
- Thời gian sinh URL thanh toán: Trung bình 45ms.
- Thời gian xử lý IPN Webhook: Trung bình 82ms.
- Tỷ lệ thất thoát gói tin (Packet Loss): 0.00% trên môi trường Production.
- Throughput tối đa: 185 giao dịch/giây trên cấu hình máy chủ 4 Cores CPU, 8GB RAM.
Kết quả đạt được
| Chỉ số đánh giá |
Trước khi triển khai (2018) |
Mục tiêu đề ra |
Sau khi tích hợp (Thực nghiệm) |
| Tỷ trọng đơn COD |
65.0% |
< 45.0% |
41.2% |
| Thời gian xác thực đơn hàng |
15 - 30 phút |
< 1 phút |
1.8 giây |
| Tỷ lệ thất thoát/Lừa đảo ủy nhiệm |
2.5% tổng đơn chuyển khoản |
0% |
0.00% |
| Điểm hài lòng khách hàng (CSAT) |
68/100 |
> 85/100 |
89/100 |
| Tỷ lệ hoàn tất giỏ hàng (Checkout Rate) |
58.0% |
> 75.0% |
79.4% |
Đổi mới và đóng góp
Cải tiến kỹ thuật
- Kiến trúc phân tách trạng thái bất đồng bộ (Asynchronous State Handling): Khắc phục triệt để tình trạng treo giao dịch khi người dùng đóng trình duyệt đột ngột trước khi trang Return URL tải xong; hệ thống tự động cập nhật đơn hàng thông qua kênh độc lập Server-to-Server IPN.
- Cơ chế xác thực kép (Dual Signature Validation): Áp dụng mã hóa chuỗi kết hợp mật khẩu thương nhân (Merchant Secret Key) và kiểm tra ngược trạng thái qua API truy vấn đối soát chủ động.
So sánh với phương thức truyền thống và giải pháp tương đương
| Đặc điểm |
Chuyển khoản truyền thống |
Tích hợp Cổng Ngân Lượng (Đề tài) |
| Tác vụ khách hàng |
Mở app ngân hàng, copy STK, nhập tiền, ghi chú |
Chọn ngân hàng, xác thực OTP 1 chạm |
| Xác thực giao dịch |
Kế toán viên kiểm tra sao kê thủ công |
Hệ thống phân tích Hash và gạch nợ tự động |
| Độ trễ xử lý đơn |
15 - 60 phút (trong giờ hành chính) |
Tức thời (< 3 giây, 24/7) |
| Khả năng sai sót nghiệp vụ |
Cao (nhầm cú pháp, nhầm số tiền) |
Tuyệt đối chính xác theo giá trị giỏ hàng |
Đóng góp thực tiễn cho ngành thương mại điện tử
Đề tài cung cấp mô hình thực nghiệm chuẩn hóa cho các doanh nghiệp bán lẻ thời trang vừa và nhỏ (SMEs) tại Việt Nam trong việc chuyển đổi từ mô hình phụ thuộc COD sang mô hình thanh toán số hóa tinh gọn, giảm chi phí vận hành kho vận và giảm tồn đọng vốn.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Real-world Scenario)
Khách hàng mua giày da Oxford TINO trị giá 850.000 VNĐ trên website:
- Thêm sản phẩm vào giỏ hàng -> Chọn "Thanh toán trực tuyến qua Thẻ ATM / Internet Banking".
- Hệ thống áp dụng tự động Voucher giảm 5% cho khách hàng TTKDTM (giá còn 807.500 VNĐ).
- Hệ thống sinh URL chuyển hướng sang giao diện bảo mật Ngân Lượng -> Khách hàng chọn Ngân hàng Vietcombank -> Nhập mã OTP SMS.
- Trừ tiền thành công -> Ngân Lượng phát tín hiệu IPN -> Web server TINO tự động tạo phiếu xuất kho trong vòng 2 giây và gửi SMS xác nhận.
+-----------------------------------------------------------------------------------+
| KHÁCH HÀNG: Mua Giày Oxford TINO (850.000đ) |
| -> Chọn Thanh toán trực tuyến -> Áp dụng tự động Voucher 5% (còn 807.500đ) |
+-----------------------------------------+-----------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| NGANLUONG GATEWAY: Khách chọn Ngân hàng (VCB) -> Nhập mã xác nhận OTP |
+-----------------------------------------+-----------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| TINO SERVER: IPN xác thực thành công -> Tạo lệnh xuất kho & SMS tự động (2 giây) |
+-----------------------------------------------------------------------------------+
Yêu cầu triển khai hạ tầng
- Hạ tầng Web: PHP >= 7.2 với các extension bắt buộc:
ext-curl, ext-openssl, ext-json, ext-mbstring.
- Chứng chỉ bảo mật: Chứng chỉ số SSL/TLS (Let's Encrypt hoặc Sectigo RSA Domain Validation) đạt chuẩn A+ trên Qualys SSL Labs.
- Cấu hình mạng: Mở cổng outbound 443 và cho phép dải IP máy chủ Ngân Lượng (
210.245.80.*) truy cập Webhook endpoint.
Phân tích chi phí - Lợi ích (Cost-Benefit Analysis) & ROI
+------------------------------------------+
| Chi phí triển khai: 15.000.000 VNĐ |
| (Phát triển module, chứng chỉ, tích hợp) |
+--------------------+---------------------+
|
v
+------------------------------------------+
| Lợi ích tài chính hàng tháng |
| - Giảm tỷ lệ hoàn đơn COD: 12.000.000đ |
| - Giảm chi phí nhân sự đối soát: 6.000.000đ
| - Tổng tiết kiệm: 18.000.000đ / tháng |
+--------------------+---------------------+
|
v
+------------------------------------------+
| Thời gian hoàn vốn (ROI): < 1.0 tháng |
+------------------------------------------+
- Chi phí ban đầu: Phát triển module và kiểm thử: 15.000.000 VNĐ; Phí chứng chỉ bảo mật và hạ tầng: 2.500.000 VNĐ/năm.
- Lợi ích tài chính hàng tháng: Giảm chi phí hoàn hàng do hủy đơn COD (ước tính tiết kiệm 12.000.000 VNĐ/tháng); Tiết kiệm thời gian đối soát kế toán (giảm 1 nhân sự trực bill, tiết kiệm 6.000.000 VNĐ/tháng).
- Thời gian thu hồi vốn đầu tư (ROI): Dưới 1.0 tháng vận hành chính thức.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Phụ thuộc vào tính ổn định của API bên thứ ba (Cổng thanh toán Ngân Lượng và Napas). Khi hệ thống ngân hàng bảo trì định kỳ ban đêm, giao dịch có thể bị chậm phản hồi.
- Hệ thống chưa tích hợp tính năng tự động hoàn tiền trực tiếp qua API (Auto-Refund) khi khách hàng yêu cầu hủy đơn hợp lệ.
Hướng phát triển trong tương lai
- Tích hợp giải pháp quét mã VietQR tĩnh/động: Đón đầu xu hướng chuyển khoản nhanh NAPAS247 qua mã QR tự sinh theo từng đơn hàng.
- Ứng dụng giải pháp Mua trước trả sau (BNPL - Buy Now Pay Later): Tích hợp các cổng thanh toán tài chính như Fundiin hoặc Kredivo nhằm tăng giá trị trung bình đơn hàng (AOV).
- Chuyển đổi kiến trúc Microservices: Tách biệt module thanh toán thành một Payment Service độc lập sử dụng Docker và Kubernetes để nâng cao tính sẵn sàng (High Availability).
Đối tượng hưởng lợi
+-----------------------------------+-----------------------------------+
| SINH VIÊN TMĐT / CNTT | LẬP TRÌNH VIÊN BACKEND |
| Nắm vững lý thuyết thanh toán & | Tham khảo mã nguồn chuẩn hóa PHP |
| mô hình tích hợp Payment Gateway | xử lý IPN Webhook và HMAC SHA-256 |
+-----------------------------------+-----------------------------------+
| DOANH NGHIỆP BÁN LẺ THỜI TRANG | NHÀ NGHIÊN CỨU THỊ TRƯỜNG |
| Giảm tỷ lệ hoàn đơn COD và tối ưu | Khai thác bộ số liệu khảo sát |
| quy trình đối soát dòng tiền | thực tế về rào cản TTĐT Việt Nam |
+-----------------------------------+-----------------------------------+
- Sinh viên ngành Thương mại điện tử / Hệ thống thông tin: Tài liệu tham khảo toàn diện kết hợp giữa cơ sở lý luận kinh tế số và kiến trúc kỹ thuật thực nghiệm.
- Lập trình viên & Kỹ sư tích hợp hệ thống: Bộ khung mã nguồn (Code Pattern) chuẩn xác về việc sinh chữ ký bảo mật, xử lý Callback và tiếp nhận IPN an toàn.
- Doanh nghiệp bán lẻ trực tuyến (SMEs): Chiến lược thực thi chi tiết giúp chuyển đổi phương thức thanh toán, cắt giảm chi phí COD và cải thiện biên lợi nhuận.
- Nhà nghiên cứu kinh tế số: Dữ liệu khảo sát thực nghiệm phản ánh trung thực tâm lý, thói quen tiêu dùng và các yếu tố ảnh hưởng tới quyết định thanh toán trực tuyến tại Việt Nam.
Câu hỏi thường gặp
- Hệ thống cần đáp ứng yêu cầu kỹ thuật tối thiểu nào để triển khai?
Máy chủ cần cài đặt PHP phiên bản 7.1 trở lên (khuyến nghị PHP 7.2+), hỗ trợ
cURL, OpenSSL extension, máy chủ cơ sở dữ liệu MySQL 5.6+ và chứng chỉ SSL bảo mật hợp lệ cho tên miền.
- Cơ chế xử lý khi khách hàng bị trừ tiền tại ngân hàng nhưng mạng bị ngắt?
Nhờ cơ chế IPN (Server-to-Server), cổng Ngân Lượng vẫn gửi bản tin thông báo trạng thái thành công trực tiếp tới máy chủ TINO. Đơn hàng tự động chuyển sang trạng thái "Đã thanh toán" mà không phụ thuộc vào trình duyệt của khách hàng.
- Làm thế nào để chống lại việc giả mạo thông báo thanh toán thành công?
Mọi dữ liệu gửi về qua IPN đều phải trải qua bước kiểm tra chữ ký số (
secure_code). Chữ ký này được mã hóa bằng khóa bí mật (merchant_password) chỉ lưu tại máy chủ nội bộ TINO và máy chủ Ngân Lượng, ngăn chặn kẻ gian giả mạo gói tin.
- Chi phí duy trì giải pháp thanh toán điện tử này là bao nhiêu?
Doanh nghiệp không mất phí duy trì hàng tháng cho cổng thanh toán Ngân Lượng; chi phí phát sinh chỉ tính trên mỗi giao dịch thành công (khoảng 1.1% + 1.100đ đối với thẻ ATM nội địa).
- Thời gian tích hợp toàn diện hệ thống mất bao lâu?
Với khung kiến trúc và mã nguồn đã được chuẩn hóa trong đề tài, thời gian tích hợp, cấu hình tài khoản Merchant và kiểm thử hoàn thiện trên môi trường Sandbox chỉ mất từ 3 đến 5 ngày làm việc.
Kết luận
Đề tài "Phát triển công cụ thanh toán điện tử cho công ty cổ phần thời trang TINO" đã giải quyết triệt để điểm nghẽn thanh toán tại doanh nghiệp bán lẻ trực tuyến. Bằng việc tích hợp thành công Cổng thanh toán trực tuyến Ngân Lượng v3.1 trên nền tảng kiến trúc web bảo mật cao, nghiên cứu không chỉ giúp TINO tối ưu hóa 100% quy trình đối soát đơn hàng, giảm thiểu rủi ro vận hành của phương thức COD truyền thống mà còn nâng cao trải nghiệm khách hàng số. Đây là tiền đề vững chắc để Công ty Cổ phần Thời trang TINO mở rộng thị trường kinh doanh thời trang nam trên quy mô toàn quốc trong giai đoạn phát triển mới.