Skip to content

Tăng số tiền ủy quyền (increment authorization) ​

Một số luồng chỉ biết được số tiền cuối cùng sau khi thẻ đã được ủy quyền: một kỳ lưu trú khách sạn kéo dài hơn dự kiến, một lần đổ thêm xăng hoặc gia hạn thuê xe, một đơn hàng có thêm sản phẩm sau khi checkout. Ủy quyền tăng dần (incremental authorization) nâng số tiền đã ủy quyền trên một PaymentIntent đã được xác nhận nhưng chưa capture, để bạn có thể capture nhiều hơn số tiền đã giữ ban đầu.

Điều kiện tiên quyết ​

Việc tăng số tiền chỉ khả thi nếu thanh toán đã được thiết lập cho việc này từ trước. Tính đủ điều kiện được quyết định tại thời điểm ủy quyền và không thể thêm vào sau đó — không có cách nào để biến một thanh toán đã được ủy quyền thành có thể tăng số tiền.

Yêu cầuChi tiết
Manual capturePaymentIntent phải ở trạng thái requires_capture với capture_method: manual, và charge của nó đã được ủy quyền nhưng chưa capture. Xem Manual capture.
Đã đăng ký từ trướcpayment_method_options.card.request_incremental_authorization phải được đặt thành if_available khi PaymentIntent được tạo hoặc xác nhận.
Thẻ, card-not-presentChỉ áp dụng cho thanh toán thẻ. card_present, napas_qr, và cake_pay không được hỗ trợ.
Trong giới hạnTối đa 10 lần tăng cho mỗi charge. Các lệnh gọi tiếp theo sẽ bị từ chối khi đạt giới hạn.

Đăng ký: request_incremental_authorization ​

Đặt tùy chọn này dưới payment_method_options.card trên lệnh gọi tạo hoặc xác nhận PaymentIntent.

Giá trịHành vi
if_availableYêu cầu ủy quyền tăng dần. Việc có thực sự được cấp hay không do ngân hàng phát hành quyết định tại thời điểm ủy quyền.
neverMặc định. Không thể tăng số tiền.
request_incremental_authorization_unspecifiedĐược coi như chưa đặt — có hiệu lực giống never.

Vì tính đủ điều kiện được quyết định tại thời điểm ủy quyền, if_available là một yêu cầu, không phải một sự đảm bảo. Hãy đặt giá trị này bất cứ khi nào việc tăng số tiền là khả dĩ; nó không tốn gì nếu bạn không bao giờ tăng số tiền.

http
POST /api/payment_intents
json
{
  "amount": 100000,
  "currency": "704",
  "capture_method": "manual",
  "payment_method_options": {
    "card": {
      "request_incremental_authorization": "if_available"
    }
  }
}
TrườngBắt buộcMô tả
capture_methodCóPhải là "manual". Việc tăng số tiền không có ý nghĩa với một thanh toán được tự động capture.
payment_method_options.card.request_incremental_authorizationCóĐặt thành "if_available". Mặc định là "never".

Tăng số tiền ​

http
POST /api/payment_intents/{id}/increment_authorization

Request

json
{
  "amount": 150000,
  "description": "Extended stay — 1 additional night"
}
TrườngBắt buộcMô tả
amountCóTổng số tiền mới đã ủy quyền theo đơn vị tiền tệ nhỏ nhất — không phải phần chênh lệch. Phải lớn hơn amount hiện tại của PaymentIntent.
descriptionKhôngThay thế description của PaymentIntent. Bỏ qua để giữ nguyên.
metadataKhôngThay thế metadata của PaymentIntent. Bỏ qua để giữ nguyên.

WARNING

amount là tổng số mới, không phải phần tăng thêm. Để tăng một ủy quyền 100.000 lên thêm 50.000, hãy gửi 150000 — gửi 50000 sẽ bị từ chối vì thấp hơn số tiền hiện tại.

description và metadata thay thế giá trị hiện tại, và chỉ khi có mặt trong request. Chỉ gửi amount sẽ không xóa cả hai trường này.

Response

json
{
  "payment_intent": {
    "id": "pi_01HZ3X9YQ7M8KH8M5JYV9X4F2B",
    "amount": 150000,
    "amount_capturable": 150000,
    "amount_received": 0,
    "status": "requires_capture"
  }
}

Khi thành công, cả amount và amount_capturable đều tăng theo phần chênh lệch, và amount_received không thay đổi. PaymentIntent vẫn giữ trạng thái requires_capture — việc tăng số tiền chỉ thay đổi số tiền, không thay đổi trạng thái — vì vậy không có webhook trạng thái mới nào cần chờ. Capture tổng số tiền đã tăng như bình thường bằng CapturePaymentIntent.

Ví dụ minh họa ​

Một khách sạn ủy quyền trước một đêm, khách gia hạn thêm một đêm, và toàn bộ kỳ lưu trú được capture khi checkout.

BướcLệnh gọiamountamount_capturableamount_receivedTrạng thái
Check-inTạo + xác nhận với request_incremental_authorization: if_available, capture_method: manual1000001000000requires_capture
Khách gia hạnincrement_authorization với { "amount": 150000 }1500001500000requires_capture
Checkoutcapture với {} (toàn bộ, cuối cùng)1500000150000succeeded

Việc capture ở đây là bình thường — không có gì đặc thù cho việc tăng số tiền. Nếu hóa đơn cuối cùng của khách thấp hơn tổng số đã tăng, hãy capture số tiền thấp hơn với final_capture: true và phần còn lại sẽ được giải phóng. Xem Capture một phần và capture cuối cùng.

Lỗi ​

Request bị từ chốiLý do
amount bằng hoặc thấp hơn amount hiện tạiamount là tổng số mới, không phải phần chênh lệch, và phải tăng lên.
PaymentIntent không ở trạng thái requires_capture, hoặc charge của nó đã được captureKhông có ủy quyền còn hiệu lực nào để tăng.
capture_method không phải manualViệc tăng số tiền chỉ áp dụng cho luồng manual-capture.
request_incremental_authorization không phải if_available khi tạo hoặc xác nhậnTính đủ điều kiện được quyết định tại thời điểm ủy quyền và không thể thêm vào sau đó. Hãy bắt đầu một thanh toán mới với tùy chọn này được đặt sẵn.
Phương thức thanh toán là card_present, napas_qr, hoặc cake_payChỉ áp dụng cho thanh toán thẻ (card-not-present).
Lần tăng thứ 11 trên cùng một chargeTối đa 10 lần tăng cho mỗi charge.

Liên quan ​

  • Manual capture — luồng mà tính năng này được xây dựng dựa trên, bao gồm capture một phần và capture cuối cùng
  • Kiểm soát 3DS — tùy chọn payment_method_options.card khác

Developers