Method: capture

Bắt đầu quá trình chuyển tiền giữa tài khoản của khách hàng được tạm giữ với Google và công ty xử lý thanh toán. Tổ hợp requestId trong tiêu đề và paymentIntegratorAccountId là khoá giá trị nhận dạng và xác định duy nhất giao dịch này. Tất cả các trường hợp đột biến trong giao dịch này (hoàn tiền) đều được điền vào giá trị requestId trong trường captureRequestId.

Nếu điểm cuối gặp lỗi trong khi xử lý yêu cầu, thì nội dung phản hồi từ điểm cuối này phải thuộc loại ErrorResponse.

Yêu cầu mẫu sẽ có dạng như sau:


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 0,
      "revision": 0
    },
    "requestId": "bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ",
    "requestTimestamp": "1502220196077"
  },
  "paymentIntegratorAccountId": "InvisiCashUSA_USD",
  "googlePaymentToken": "ZXhhbXBsZSB1bmlxdWUgcGF5bWVudCB0b2tlbiB2YWx1ZQ",
  "transactionDescription": "Google - Music",
  "currencyCode": "INR",
  "amount": "728000000",
  "captureContext": {}
}

Câu trả lời mẫu sẽ có dạng như sau:


{
  "responseHeader": {
    "responseTimestamp": "1481900013178"
  },
  "result": "SUCCESS",
  "paymentIntegratorTransactionId": "aW50ZWdyYXRvciB0cmFuc2FjdGlvbiBpZA"
}

Yêu cầu HTTP

POST https://www.integratorhost.example.com/v1/capture

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "requestHeader": {
    object (RequestHeader)
  },
  "paymentIntegratorAccountId": string,
  "transactionDescription": string,
  "currencyCode": string,
  "amount": string,
  "captureContext": {
    object (CaptureContext)
  },

  // Union field fopDetails can be only one of the following:
  "googlePaymentToken": string,
  "mandateDetails": {
    object (MandateDetails)
  },
  "mandateWithNotificationDetails": {
    object (MandateWithNotificationDetails)
  }
  // End of list of possible types for union field fopDetails.

  // Union field account_verification can be only one of the following:
  "authenticationRequestId": string,
  "otpVerification": {
    object (OtpVerification)
  }
  // End of list of possible types for union field account_verification.
}
Trường
requestHeader

object (RequestHeader)

BẮT BUỘC: Tiêu đề chung cho tất cả các yêu cầu.

paymentIntegratorAccountId

string

BẮT BUỘC: Đây là giá trị nhận dạng tài khoản của đối tác tích hợp thanh toán giúp xác định những ràng buộc theo hợp đồng liên quan đến giao dịch này.

transactionDescription

string

BẮT BUỘC: Đây là nội dung mô tả về giao dịch có thể được đưa vào bảng sao kê của khách hàng. Đã bản địa hoá sang userLocale có trong requestHeader. Bạn có thể thay đổi định dạng này mà không cần thông báo và tuyệt đối không được phân tích cú pháp định dạng này.

currencyCode

string

BẮT BUỘC: Mã đơn vị tiền tệ gồm 3 chữ cái theo ISO 4217

amount

string (Int64Value format)

BẮT BUỘC: Số tiền của giao dịch mua, tính bằng một phần triệu của đơn vị tiền tệ.

captureContext

object (CaptureContext)

BẮT BUỘC: Bối cảnh của ảnh chụp này.

Trường kết hợp fopDetails. BẮT BUỘC: Thông tin chi tiết về phương thức FOP cho giao dịch Ghi lại này. fopDetails chỉ có thể là một trong những trạng thái sau đây:
googlePaymentToken

string

Mã thông báo mà cả hai công ty sẽ dùng để xác định tài khoản cho các giao dịch mua giữa nhau.

mandateDetails

object (MandateDetails)

Chi tiết thanh toán dành riêng cho uỷ nhiệm chi.

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

Thông tin thanh toán dành riêng cho các uỷ nhiệm chi, trong đó bắt buộc phải có upcomingTransactionNotification.

Trường kết hợp account_verification.

account_verification chỉ có thể là một trong những trạng thái sau đây:

authenticationRequestId

string

KHÔNG BẮT BUỘC: requestId của yêu cầu xác thực được liên kết. Nếu không có thuộc tính này thì không thể liên kết quy trình xác thực với ảnh chụp này.

Nếu thông tin này xuất hiện thì người dùng đã được xác thực ngay trước cuộc gọi này hoặc đã được xác thực khi lịch thanh toán tự động được thiết lập.

otpVerification

object (OtpVerification)

KHÔNG BẮT BUỘC: Dữ liệu cần thiết để xác minh một OTP được tạo từ sendOtp. Điều này chỉ xuất hiện nếu người dùng đã thực hiện qua đường dẫn sendOtp.

Nội dung phản hồi

Đối tượng phản hồi cho phương thức thu thập.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorTransactionId": string,
  "userMessage": string,
  "result": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },
  "transactionLimit": string,
  "currentBalance": string
}
Trường
responseHeader

object (ResponseHeader)

BẮT BUỘC: Tiêu đề chung cho tất cả câu trả lời.

paymentIntegratorTransactionId

string

KHÔNG BẮT BUỘC: Giá trị nhận dạng này dành riêng cho đơn vị tích hợp và do đơn vị tích hợp tạo ra. Đây là giá trị nhận dạng mà đối tác tích hợp biết giao dịch này.

Để thuận tiện, mã nhận dạng này được đưa vào thông tin chuyển tiền

userMessage
(deprecated)

string

KHÔNG DÙNG NỮA: Nội dung mô tả về kết quả sẽ hiển thị cho người dùng nếu kết quả không phải là SUCCESS.

result

enum (CaptureResultCode)

BẮT BUỘC: Kết quả của ảnh chụp này.

rawResult

object (RawResult)

KHÔNG BẮT BUỘC: Kết quả thô của ảnh chụp này. Dùng để cung cấp thông tin cho công cụ phân tích và công cụ đánh giá rủi ro của Google. Trong các tình huống liên kết mã từ chối, đôi khi dữ liệu sẽ bị mất. Đơn vị tích hợp có thể chọn cung cấp cho Google một mã thô. Ví dụ: cổng vào thẻ tín dụng (nhà tích hợp) có thể sử dụng trường này để cung cấp cho Google mã từ chối chính xác đã nhận được từ mạng VISA. Trong trường hợp đó, scope sẽ là "visa" và rawCode sẽ là bất kỳ thẻ nào mà mạng VISA trả về.

Giá trị này là bắt buộc nếu result không phải là SUCCESS.

transactionLimit

string (Int64Value format)

KHÔNG BẮT BUỘC: Nếu Kết quả là CHARGE_EXCEEDS_TRANSACTION_LIMIT, thì đây là số tiền tối đa mà người dùng có thể chi tiêu cho một giao dịch (tính bằng một phần triệu). Số liệu này được sử dụng cho thông báo có cấu trúc dành cho người dùng và phân tích tỷ lệ từ chối.

Đây phải là một giới hạn tương ứng với currencyCode trong yêu cầu.

currentBalance

string (Int64Value format)

KHÔNG BẮT BUỘC: Nếu Kết quả là INSUFFICIENT_FUNDS, thì đây là số dư hiện có trong tài khoản của người dùng (tính bằng đơn vị micrô). Loại thông báo này được dùng cho thông báo có cấu trúc dành cho người dùng.

Giá trị này phải sử dụng cùng đơn vị tiền tệ với currencyCode trong yêu cầu.

MandateDetails

Thông tin chi tiết về giấy uỷ nhiệm thu thập.

Biểu diễn dưới dạng JSON
{
  "mandateId": string
}
Trường
mandateId

string

BẮT BUỘC: Mã uỷ nhiệm do Google tạo được gửi trong cuộc gọi createMandate.

MandateWithNotificationDetails

Thông tin chi tiết về giấy uỷ nhiệm thu thập, cùng với thông tin bắt buộc về thông báo.

Biểu diễn dưới dạng JSON
{
  "mandateId": string,
  "upcomingTransactionNotificationId": string
}
Trường
mandateId

string

BẮT BUỘC: Mã uỷ nhiệm do Google tạo được gửi trong cuộc gọi createMandate.

upcomingTransactionNotificationId

string

BẮT BUỘC: requestId của cuộc gọi upcomingTransactionNotification được thực hiện để thông báo trước về giao dịch này.

CaptureContext

Đối tượng này cung cấp ngữ cảnh về cách yêu cầu chụp ảnh.

Biểu diễn dưới dạng JSON
{
  "userIpAddress": string
}
Trường
userIpAddress

string

KHÔNG BẮT BUỘC: Đây là địa chỉ IP thiết bị của người dùng nếu giao dịch mua do người dùng thực hiện trong phiên. Nếu người dùng không ở trong phiên thì giá trị này sẽ trống. Nếu hợp đồng cụ thể không quy định sự cần thiết cho trường này, thì trường này sẽ luôn trống.

CaptureResultCode

Mã kết quả để chụp.

Enum
UNKNOWN_RESULT Đừng bao giờ đặt giá trị mặc định này!
SUCCESS Đã chụp xong, giao hàng.
CHARGE_EXCEEDS_TRANSACTION_LIMIT amount của yêu cầu chụp này vượt quá hạn mức mỗi giao dịch. Nếu bạn dùng mã này, thì hệ thống sẽ điền vào trường transactionLimit cho mục đích thông báo cho người dùng.
CHARGE_EXCEEDS_DAILY_LIMIT Không thể sử dụng tài khoản này để mua hàng ngay bây giờ vì tài khoản đã vượt quá giới hạn hằng ngày.
CHARGE_EXCEEDS_MONTHLY_LIMIT Không thể sử dụng tài khoản này để mua hàng ngay bây giờ vì tài khoản đã vượt quá giới hạn hàng tháng.
CHARGE_UNDER_LIMIT amount của yêu cầu chụp này chưa đáp ứng số tiền giao dịch tối thiểu.
INSUFFICIENT_FUNDS Tài khoản này không có đủ tiền để đảm bảo ghi nhận được khoản tiền này.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY Tài khoản này không hỗ trợ đơn vị tiền tệ được yêu cầu.
ACCOUNT_CLOSED

Tài khoản của người dùng do đối tác tích hợp nắm giữ đã bị đóng.

Việc trả về giá trị này sẽ khiến phương thức của người dùng bị đóng với Google. Người dùng sẽ buộc phải thêm một công cụ mới bằng cách thực hiện lại quy trình liên kết.

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

Tài khoản của người dùng với đơn vị tích hợp đã bị đóng và có thể là tài khoản bị chiếm đoạt.

Việc trả về giá trị này sẽ khiến phương thức của người dùng bị đóng với Google. Người dùng sẽ buộc phải thêm một công cụ mới bằng cách thực hiện lại quy trình liên kết.

ACCOUNT_ON_HOLD Tài khoản đang bị tạm ngưng.
ACCOUNT_CLOSED_FRAUD

Tài khoản của người dùng do đối tác tích hợp nắm giữ đã bị đóng do gian lận.

Việc trả về giá trị này sẽ khiến phương thức của người dùng bị đóng với Google. Người dùng sẽ buộc phải thêm một công cụ mới bằng cách thực hiện lại quy trình liên kết.

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

Tài khoản đang hoạt động, nhưng GPT đã bị người dùng bên phía nhà tích hợp vô hiệu hoá.

Việc trả về giá trị này sẽ khiến phương thức của người dùng bị đóng với Google. Người dùng sẽ buộc phải thêm một công cụ mới bằng cách thực hiện lại quy trình liên kết.

TOKEN_REFRESH_REQUIRED Để trả lại dữ liệu này, người dùng phải thực hiện quy trình làm mới.
OTP_NOT_MATCHED OTP không khớp với thông tin mà nhà tích hợp đã gửi.
OTP_ALREADY_USED OTP đã được sử dụng.
RISK_DECLINED

Giao dịch đã bị từ chối vì phía đối tác tích hợp đã kiểm tra rủi ro.

Lỗi này vĩnh viễn không thành công đối với khoản thanh toán này, nhưng không khiến phương thức của người dùng bị đóng tại Google.

NO_GOOD_FUNDING_SOURCE_AVAILABLE Người dùng chưa thiết lập nguồn tiền hoạt động nào trên tài khoản của mình có thể thanh toán cho giao dịch.
FUNDING_SOURCE_UNAVAILABLE

Không có tổ chức phát hành cơ sở hoặc nguồn tiền nào. Nếu bạn thử thanh toán lại khoản thanh toán hiện có này thì sẽ không thành công.

Google sẽ thử thanh toán lại khi một đối tác trả lại mã phản hồi 4xx hoặc 5xx. Do đó, đối tác thường phải trả lại một trong các mã phản hồi đó nếu thử lại thành công khoản thanh toán này khi nguồn tiền cơ bản có lại. Nhưng, nếu có lý do kỹ thuật mà Google thử lại khoản thanh toán sẽ tiếp tục không thành công, đối tác có thể trả lại "FUNDING_SOURCE_UNAVAILABLE" để cho Google biết rằng không nên thử lại khoản thanh toán này.

Lưu ý: Google vẫn có thể thử lại khoản thanh toán này, nhưng chỉ với một requestId khác, nhưng yêu cầu thanh toán này sẽ được đánh dấu là Bị từ chối.

MANDATE_NOT_ACTIVE Giấy uỷ nhiệm dùng cho hoạt động chụp ảnh này không còn hiệu lực nữa. Giá trị trả về này sẽ khiến phương thức uỷ nhiệm chi của người dùng bị đóng với Google.
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED Thông báo được gửi cho người dùng về khoản thanh toán uỷ nhiệm định kỳ đã hết hạn.