sieuthicode.com

Thông báo

16

Ưu Đãi Khi Mua Hosting

Mã giảm giá 10% : HOSTING1205
1 năm trước

THÔNG BÁO API

API MBBANK ĐÃ UPDATE VẪN SỬ DỤNG BÌNH THƯỜNG NHÉ
2 năm trước

Thông Báo Khẩn

Chúng tôi đã mã hóa mật khẩu và dữ liệu API. Vui lòng xóa và thêm lại tài khoản của bạn.
2 năm trước

NHẬN FIX TẤT CẢ API

NHẬN FIX TẤT CẢ API TỪ 100K ĐÊN 300K MỌI API
2 năm trước

THÔNG BÁO MỚI

MÃ GIẢM 50% KHI MUA CODE : SINAMI23H
2 năm trước
SIÊU THỊ CODE / KIẾN THỨC & CÔNG NGHỆ

Cách ghi log an toàn khi tích hợp ZaloPay để dễ tra soát giao dịch

Khi tích hợp ZaloPay, bạn cần log đủ để biết yêu cầu thanh toán đã đi đến đâu, lỗi xảy ra ở bước nào và đơn hàng nào cần tra soát. Cách làm an toàn là ghi sự kiện theo danh sách trường cho phép, không lưu nguyên gói dữ liệu gửi nhận, đồng thời giữ khóa bí mật và thông tin xác thực ngoài hệ thống log.

Hướng dẫn này dành cho lập trình viên và người vận hành website. Bạn sẽ có mẫu log minh họa, cách xử lý thông báo thanh toán, quy trình kiểm thử và nguyên tắc phân quyền. Tên trường tích hợp, cơ chế xác thực và quy tắc phản hồi phải đối chiếu tài liệu ZaloPay áp dụng cho sản phẩm đang sử dụng.

Xác định log cần trả lời những câu hỏi nào

Trước khi thêm lệnh ghi log, hãy xác định nhu cầu tra soát. Với một đơn thanh toán, nhân viên kỹ thuật cần tìm được thời điểm tạo yêu cầu, kết quả kết nối, sự kiện thông báo nhận được và lần cập nhật trạng thái cuối cùng.

Mỗi sự kiện nên có một cấu trúc thống nhất:

  • Thời gian: dùng định dạng có múi giờ và đồng bộ đồng hồ máy chủ.
  • Tên sự kiện: chẳng hạn tạo yêu cầu, nhận phản hồi, nhận thông báo hoặc cập nhật đơn.
  • Mã tương quan nội bộ: liên kết các log trong cùng một luồng xử lý.
  • Mã đơn và mã giao dịch: chỉ lưu khi cần, giới hạn quyền truy cập vì chúng có thể liên kết với dữ liệu khách hàng.
  • Kết quả: thành công, bị từ chối, đang chờ hoặc chưa xác định.
  • Thời lượng và nhóm lỗi: giúp phân biệt lỗi mạng với lỗi nghiệp vụ.

Không dùng số điện thoại hoặc email làm mã tương quan. Nếu một yêu cầu bị timeout, log phải thể hiện chưa xác định kết quả, không tự kết luận giao dịch thất bại.

Chọn dữ liệu được ghi và loại bỏ thông tin nhạy cảm

Áp dụng danh sách cho phép thay vì chỉ che vài trường

Không ghi toàn bộ request, response, header hoặc đối tượng lỗi rồi mới tìm cách xóa bí mật. Cách này dễ bỏ sót dữ liệu khi cấu trúc tích hợp thay đổi. Hãy tạo một đối tượng log mới, chỉ lấy các trường đã được duyệt.

Chọn dữ liệu được ghi và loại bỏ thông tin nhạy cảm

Có thể cân nhắc lưu số tiền và đơn vị tiền tệ nếu chúng cần cho đối soát, nhưng không kèm toàn bộ hồ sơ khách hàng. Với mã kết quả từ nhà cung cấp, lưu giá trị cần thiết và diễn giải theo tài liệu; không suy đoán ý nghĩa từ tên mã.

Không đưa bí mật và dữ liệu thanh toán vào log

  • Khóa bí mật, token, thông tin đăng nhập và giá trị dùng để xác thực yêu cầu.
  • Toàn bộ header xác thực, cookie hoặc phiên đăng nhập.
  • Thông tin tài khoản thanh toán và dữ liệu cá nhân không phục vụ tra soát.
  • Đường dẫn đầy đủ nếu query string chứa token hoặc thông tin nhạy cảm.
  • Chuỗi dữ liệu gốc dùng để tính chữ ký nếu trong đó có thông tin không được phép lưu.

Nếu cần nhận diện một thông tin đã che, chỉ hiển thị phần tối thiểu thực sự hữu ích. Việc băm số điện thoại không mặc nhiên biến nó thành dữ liệu vô danh, vì không gian giá trị có thể bị dò. Ưu tiên mã khách hàng nội bộ và kiểm soát quyền truy cập.

Ghi log tại các điểm quan trọng của luồng thanh toán

Khi tạo yêu cầu và nhận phản hồi

Trước khi gửi yêu cầu từ server tới ZaloPay, ghi mã đơn, mã tương quan và tên thao tác. Sau khi nhận phản hồi, ghi thời lượng, trạng thái HTTP nếu có và kết quả nghiệp vụ đã được phân loại. Hai lớp kết quả này cần tách biệt: kết nối HTTP thành công không đồng nghĩa thanh toán đã hoàn tất.

Ghi log tại các điểm quan trọng của luồng thanh toán

Ví dụ sau là dữ liệu giả lập; tên sự kiện và trường đều do ứng dụng tự quy ước, không phải cấu trúc API ZaloPay:

{
  "timestamp": "2026-01-15T09:30:00+07:00",
  "event": "payment_request_completed",
  "correlation_id": "trace_demo_82",
  "order_id": "order_demo_17",
  "provider": "ZaloPay",
  "http_status": 200,
  "business_state": "pending",
  "duration_ms": 240
}

Trong ví dụ, trạng thái đang chờ là kết quả giả định của ứng dụng. Khi triển khai, chỉ ánh xạ trạng thái từ các giá trị đã được tài liệu xác định.

Khi nhận thông báo và cập nhật đơn hàng

Với callback hoặc webhook từ phía dịch vụ, ghi nhận sự kiện đến, kết quả xác minh và quyết định xử lý. Xác minh tính xác thực theo đúng tài liệu ZaloPay trước khi dùng dữ liệu để thay đổi trạng thái đơn. Không tự thiết kế cách kiểm chữ ký dựa trên phỏng đoán.

Không tin trang chuyển hướng hoặc callback chạy trong trình duyệt như bằng chứng thanh toán. Khi xử lý phía server, đối chiếu mã đơn, số tiền và thông tin bên nhận hoặc định danh merchant theo các trường mà tài liệu hỗ trợ.

Nếu giao dịch dùng để nạp số dư, cần chống cộng tiền hai lần bằng định danh giao dịch duy nhất trong phạm vi phù hợp và ràng buộc duy nhất ở cơ sở dữ liệu. Việc ghi nhận giao dịch và cộng số dư phải nằm trong cùng một transaction cơ sở dữ liệu. Log chỉ ghi quyết định như đã áp dụng hoặc bỏ qua do trùng; log không thay thế sổ giao dịch.

Xử lý timeout, retry và lỗi mà không làm lộ dữ liệu

Khi mất kết nối, ghi nhóm lỗi như timeout hoặc lỗi phân giải tên miền, kèm số lần thử. Không tự động gửi lại thao tác tạo thanh toán nếu chưa xác định cơ chế chống trùng được hỗ trợ. Retry cần tuân theo tài liệu và giữ khả năng liên kết với yêu cầu ban đầu.

Với thông báo được gửi lại, hệ thống phải xử lý an toàn theo trạng thái đã lưu. Một thông báo hợp lệ nhưng trùng nên tạo log ngắn về việc bỏ qua, thay vì thực hiện lại nghiệp vụ. Trường hợp không xác định được kết quả cần vào danh sách đối soát, sử dụng chức năng tra cứu được hỗ trợ hoặc xử lý thủ công.

Các lỗi ghi log thường gặp gồm:

  • In toàn bộ đối tượng lỗi: thư viện HTTP có thể đính kèm cấu hình yêu cầu và header bí mật.
  • Bật debug trên môi trường thật: dữ liệu thô có thể xuất hiện ở console, công cụ giám sát hoặc hệ thống thu thập lỗi.
  • Ghép trực tiếp chuỗi từ bên ngoài: ký tự xuống dòng có thể gây nhầm lẫn bản ghi. Nên dùng log có cấu trúc và giới hạn độ dài trường.
  • Ghi một lỗi liên tục: gây đầy bộ nhớ lưu trữ. Cần giới hạn tần suất nhưng vẫn giữ dấu vết giao dịch thiết yếu.

Bảo vệ nơi lưu log và kiểm tra trước khi vận hành

Không đặt tệp log trong thư mục web có thể tải công khai. Giới hạn quyền đọc, bảo vệ đường truyền khi chuyển log sang hệ thống tập trung và áp dụng thời hạn lưu theo nhu cầu vận hành, nghĩa vụ liên quan. Bản sao lưu và bản xuất log cũng phải chịu cùng chính sách.

Bảo vệ nơi lưu log và kiểm tra trước khi vận hành

Thực hiện kiểm thử trên môi trường thử nghiệm được hỗ trợ, hoặc mô phỏng ở lớp ứng dụng:

  1. Tạo các tình huống thành công, bị từ chối, timeout, thông báo không hợp lệ và thông báo trùng.
  2. Dùng giá trị nhạy cảm giả dễ nhận biết, rồi tìm chúng trong log ứng dụng, log proxy và công cụ giám sát lỗi.
  3. Tra theo một mã đơn để kiểm tra có theo dõi được toàn bộ luồng mà không cần mở dữ liệu thô.
  4. Gửi lặp sự kiện thử nghiệm và xác nhận đơn chỉ được cập nhật hoặc cộng số dư một lần.
  5. Kiểm tra tài khoản vận hành chỉ đọc được phần log cần thiết và log hết hạn được xóa theo chính sách.

Kết quả đạt yêu cầu là vừa tra được nguyên nhân lỗi, vừa không tìm thấy bí mật giả trong các kênh thu thập. Nếu hệ thống log gặp sự cố, ứng dụng cần có cơ chế quan sát thay thế, nhưng vẫn dựa vào dữ liệu giao dịch bền vững để đối soát.

Câu hỏi thường gặp khi ghi log ZaloPay

Có nên lưu toàn bộ callback để xử lý tranh chấp?

Không nên mặc định lưu nguyên nội dung vào log. Nếu có nhu cầu lưu bằng chứng, hãy thiết kế kho dữ liệu riêng với mục đích rõ ràng, quyền truy cập chặt chẽ và thời hạn lưu; chỉ thu thập dữ liệu thực sự cần thiết.

Có thể lưu chữ ký để tìm lỗi xác minh không?

Nên ưu tiên ghi kết quả xác minh, phiên bản cấu hình nội bộ và nhóm nguyên nhân lỗi. Không ghi khóa hoặc dữ liệu đầu vào nhạy cảm. Chỉ thu thập thêm trong phạm vi kiểm soát khi đã đánh giá rủi ro và đối chiếu tài liệu.

Log báo thành công có đủ để xác nhận thanh toán không?

Không. Trạng thái phải dựa trên quy trình xác minh và bản ghi nghiệp vụ trong cơ sở dữ liệu. Log phục vụ điều tra, không phải nguồn duy nhất để quyết định giao hàng hay cộng số dư.

Bắt đầu bằng việc rà soát một giao dịch thử nghiệm

Hãy chọn một đơn thử nghiệm, liệt kê mọi nơi dữ liệu đi qua rồi kiểm tra từng bản ghi. Chuẩn hóa danh sách trường được phép trước, sau đó bổ sung kiểm thử chống lộ bí mật và chống xử lý trùng. Nếu cần hỗ trợ rà soát phần tích hợp, bạn có thể trao đổi với sieuthicode.com về phạm vi công việc và xác nhận khả năng hỗ trợ trước khi lựa chọn.

Chia sẻ bài viết này