# Danh sách kiểm tra QA (/vi/online/getting-started/checklist)



Thực hiện danh sách kiểm tra này trên [môi trường sandbox](./testing), sau đó hoàn tất các bước kiểm tra production trước khi nhận thanh toán thật. Danh sách
bao gồm kết quả thanh toán, xác minh, thử lại, cấu hình và bảo mật. Đánh dấu từng mục khi bạn đã xác minh.

<ChecklistProgress />

## 1. Kết quả thanh toán [#1-payment-outcomes]

<ChecklistItem id="OP-PO-1" code="PO-1" title="Thanh toán thành công">
  Thanh toán bằng 

  `4242 4242 4242 4242`

  . Phiên được truy xuất có 

  `paymentStatus: successful`

   và đơn hàng được hoàn tất đúng một lần.
</ChecklistItem>

<ChecklistItem id="OP-PO-2" code="PO-2" title="Thẻ bị từ chối">
  Thanh toán bằng 

  `4916 0184 7581 4056`

  . Đơn hàng vẫn chưa được thanh toán, và việc thử lại bằng thẻ thành công vẫn hoạt động khi phiên còn mở.
</ChecklistItem>

<ChecklistItem id="OP-PO-3" code="PO-3" title="3-D Secure">
  Thanh toán bằng 

  `4012 0018 0000 0016`

   và hoàn tất bước xác thực (challenge). Việc hoàn tất đơn hàng chờ trạng thái được truy xuất.
</ChecklistItem>

<ChecklistItem id="OP-PO-4" code="PO-4" title="Lỗi xử lý">
  Dùng một thẻ thử nghiệm gây lỗi xử lý dành cho cổng thanh toán thử nghiệm. Đơn hàng vẫn chưa được thanh toán dù biểu mẫu thẻ đã chấp nhận thẻ.
</ChecklistItem>

<ChecklistItem id="OP-PO-5" code="PO-5" title="Trạng thái chưa xử lý">
  Mã của bạn coi 

  `unpaid`

  , 

  `failed`

  , 

  `action_needed`

  , 

  `cancelled`

   và các giá trị không xác định là chưa thanh toán. Xem 

  [Trạng thái thanh toán](/online/integration/api_integration#payment-status)

  .
</ChecklistItem>

## 2. Xác minh và hoàn tất đơn hàng [#2-verification-and-fulfillment]

<ChecklistItem id="OP-VF-1" code="VF-1" title="Kiểm tra phía máy chủ">
  Việc hoàn tất đơn hàng so sánh mã tham chiếu đơn hàng, số tiền, loại tiền tệ và 

  `paymentStatus`

   với đơn hàng đã lưu, chứ không dựa vào dữ liệu từ lần chuyển hướng.
</ChecklistItem>

<ChecklistItem id="OP-VF-2" code="VF-2" title="URL thành công khi chưa thanh toán">
  Truy cập trực tiếp URL thành công mà không thanh toán. Đơn hàng vẫn chưa được thanh toán.
</ChecklistItem>

<ChecklistItem id="OP-VF-3" code="VF-3" title="Liên kết hủy">
  Mở liên kết hủy của Checkout. Đơn hàng vẫn chưa được thanh toán, và mã của bạn không mặc định trạng thái 

  `cancelled`

   chỉ dựa vào việc điều hướng.
</ChecklistItem>

<ChecklistItem id="OP-VF-4" code="VF-4" title="Quay lại nhiều lần">
  Sau một lần thanh toán thành công, tải lại trang trả về hai lần. Đơn hàng được hoàn tất đúng một lần.
</ChecklistItem>

## 3. Thử lại và gián đoạn [#3-retries-and-interruptions]

Dùng một đơn hàng và phiên thử nghiệm mới cho mỗi tình huống độc lập. Với các bài kiểm thử thử lại, hãy dùng lại đơn hàng, phần thân yêu cầu và idempotency key ban đầu.

<ChecklistItem id="OP-RI-1" code="RI-1" title="Mất phản hồi tạo phiên">
  Bỏ qua phản hồi tạo phiên trong môi trường kiểm thử của bạn và lặp lại với cùng 

  `Idempotency-Key`

   và phần thân. Phiên ban đầu được trả về lại và không có phiên thứ hai nào được tạo.
</ChecklistItem>

<ChecklistItem id="OP-RI-2" code="RI-2" title="Phần thân thay đổi">
  Dùng lại một key với phần thân khác. API trả về HTTP 409 và mã của bạn không coi đó là một phiên mới.
</ChecklistItem>

<ChecklistItem id="OP-RI-3" code="RI-3" title="Khách hàng không quay lại">
  Thanh toán, sau đó đóng tab trước khi nó quay lại. Tác vụ đối soát của bạn truy xuất phiên đã lưu và ghi nhận khoản thanh toán đúng một lần.
</ChecklistItem>

<ChecklistItem id="OP-RI-4" code="RI-4" title="Hết thời gian chờ khi lấy trạng thái">
  Làm cho việc truy xuất bị hết thời gian chờ. Ứng dụng của bạn giữ ID phiên, để kết quả ở trạng thái chưa xác định và không tạo phiên thay thế.
</ChecklistItem>

<ChecklistItem id="OP-RI-6" code="RI-6" title="Phiên bị thay thế">
  Tạo phiên thứ hai cho cùng một đơn hàng chưa thanh toán. URL đầu tiên báo 

  `expired`

   và không thể nhận thanh toán. Sau khi đơn hàng đã được thanh toán, việc tạo thêm một phiên sẽ trả về HTTP 409.
</ChecklistItem>

<ChecklistItem id="OP-RI-5" code="RI-5" title="Phiên hết hạn">
  Chờ quá 

  `expiresAt`

   (30 phút) rồi mở lại URL. Không thể bắt đầu khoản thanh toán mới nào và đơn hàng vẫn chưa được thanh toán.
</ChecklistItem>

## 4. Cài đặt Checkout [#4-checkout-settings]

<ChecklistItem id="OP-CS-1" code="CS-1" title="Merchant đã được phê duyệt">
  Mỗi merchant mà bạn nhận thanh toán thay đều có trong bảng 

  **Checkout merchants**

   với trạng thái 

  **Ready**

  .
</ChecklistItem>

<ChecklistItem id="OP-CS-2" code="CS-2" title="Đích trả về">
  URL thành công và URL hủy mặc định được đặt cho thông tin xác thực bạn dùng (mặc định của tổ chức cho Secret key, cài đặt của merchant cho key của merchant), dùng HTTPS, và origin chính xác của chúng nằm trong 

  **Allowed websites**

   của thông tin xác thực đó.
</ChecklistItem>

<ChecklistItem id="OP-CS-3" code="CS-3" title="Ghi đè theo từng phiên">
  Mọi 

  `successUrl`

   hoặc 

  `cancelUrl`

   bạn gửi đều khớp với một origin đã cấu hình.
</ChecklistItem>

<ChecklistItem id="OP-CS-4" code="CS-4" title="Ví">
  Apple Pay và Google Pay được bật hoặc tắt đúng như dự định. Google Pay ở chế độ chính thức đã được cấu hình Google Pay merchant ID.
</ChecklistItem>

<ChecklistItem id="OP-CS-6" code="CS-6" title="Ví trong thanh toán nhúng">
  Tổng tiền trong ví khớp với đơn hàng trên máy chủ. Việc thay đổi giao hàng hoặc giảm giá sẽ cập nhật tổng tiền này. Việc hủy trong ví vẫn giữ checkout khả dụng, và các khoản thanh toán đang chờ xử lý sẽ chặn một lần trừ tiền khác.
</ChecklistItem>

<ChecklistItem id="OP-CS-5" code="CS-5" title="Thương hiệu">
  Màu sắc và logo hiển thị đúng trong 

  **Checkout preview**

   trên cả bố cục máy tính và di động.
</ChecklistItem>

## 5. Bảo mật [#5-security]

<ChecklistItem id="OP-SE-1" code="SE-1" title="Key trên máy chủ">
  Checkout key của merchant hoặc Secret key của tổ chức chỉ nằm trong cấu hình máy chủ, không bao giờ nằm trong mã trình duyệt, gói ứng dụng hoặc hệ thống quản lý mã nguồn.
</ChecklistItem>

<ChecklistItem id="OP-SE-2" code="SE-2" title="Tổng tiền do máy chủ quản lý">
  Số tiền, loại tiền tệ và ID đơn hàng lấy từ đơn hàng đã lưu của bạn, không bao giờ lấy từ trình duyệt.
</ChecklistItem>

<ChecklistItem id="OP-SE-3" code="SE-3" title="Endpoint thanh toán nhúng">
  Nếu bạn dùng thanh toán nhúng, 

  `prepare`

   và 

  `submit`

   được gắn với một phiên checkout yêu cầu đăng nhập hoặc cookie HTTP-only có chữ ký, và origin của các yêu cầu làm thay đổi dữ liệu được kiểm tra.
</ChecklistItem>

<ChecklistItem id="OP-SE-4" code="SE-4" title="Chính sách bảo mật nội dung (CSP)">
  Nếu bạn dùng thanh toán nhúng, CSP của bạn cho phép các origin script và frame của Tapaya, và các bước xác thực 3-D Secure vẫn hoạt động theo CSP đó.
</ChecklistItem>

## 6. Cấu hình sandbox [#6-sandbox-configuration]

<ChecklistItem id="OP-PR-1" code="PR-1" title="API sandbox">
  `TAPAYA_CHECKOUT_API_URL`

   trỏ đến 

  `https://api.sandbox.tapaya.com`

  .
</ChecklistItem>

<ChecklistItem id="OP-PR-2" code="PR-2" title="Key sandbox">
  Tích hợp dùng checkout key sandbox của merchant hoặc Secret key của tổ chức, được tải từ cấu hình máy chủ.
</ChecklistItem>

<ChecklistItem id="OP-PR-3" code="PR-3" title="Tác vụ đối soát">
  Tác vụ truy xuất các phiên chưa xác định kết quả đã được lên lịch trong môi trường kiểm thử của bạn.
</ChecklistItem>

## 7. Sẵn sàng cho production [#7-production-readiness]

<ChecklistItem id="OP-LV-1" code="LV-1" title="Merchant sẵn sàng">
  Merchant ở chế độ chính thức đã hoàn tất onboarding với thanh toán trực tuyến, được đơn vị xử lý thanh toán phê duyệt và có cổng thanh toán đã được cấu hình. Merchant ở trạng thái 

  **Ready**

   trong Cài đặt Checkout.
</ChecklistItem>

<ChecklistItem id="OP-LV-2" code="LV-2" title="Thông tin xác thực chính thức">
  Máy chủ dùng thông tin xác thực production và 

  `https://api.tapaya.com`

  . Các tích hợp SDK đặt 

  `TAPAYA_ENVIRONMENT=production`

  . Key sandbox và thẻ thử nghiệm không được dùng cho thanh toán thật.
</ChecklistItem>

<ChecklistItem id="OP-LV-3" code="LV-3" title="Ví ở chế độ chính thức">
  Các tên miền cửa hàng cho Apple Pay đang ở trạng thái hoạt động. Google Pay ở chế độ chính thức đã được cấu hình merchant ID. Các ví được hỗ trợ hoàn tất được một khoản thanh toán và hoạt động trở lại sau khi bị hủy.
</ChecklistItem>

<ChecklistItem id="OP-LV-4" code="LV-4" title="Đối soát ở chế độ chính thức">
  URL trả về production, việc xác minh trên máy chủ, việc hoàn tất đơn hàng và tác vụ đối soát đều dùng cấu hình production.
</ChecklistItem>

<ChecklistProgress />

<Callout title="Nghiệm thu" type="tip">
  Hoàn tất các bài kiểm thử sandbox và các bước kiểm tra sẵn sàng cho production. Dùng **Reset** để bắt đầu một lượt kiểm tra mới, vì các dấu tích từ những vòng kiểm thử trước vẫn được lưu trong trình duyệt này.
</Callout>
