Method: capture

Bắt đầu chuyển tiền giữa tài khoản của khách hàng do Google lưu giữ và bên xử lý thanh toán. Tổ hợp requestId trong tiêu đề và paymentIntegratorAccountId là khoá xác định giá trị nhận dạng duy nhất và xác định duy nhất giao dịch này. Tất cả các trường hợp thay đổi đối với giao dịch này (refund) đều được điền vào giá trị requestId vào 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": {}
}

Phản hồ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.
}
Các trường
requestHeader

object (RequestHeader)

REQUIRED: Tiêu đề chung cho tất cả các yêu cầu.

paymentIntegratorAccountId

string

REQUIRED: Đây là mã nhận dạng tài khoản của đơn vị tích hợp thanh toán, giúp xác định những ràng buộc theo hợp đồng xung quanh giao dịch này.

transactionDescription

string

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

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 theo một phần triệu của đơn vị tiền tệ.

captureContext

object (CaptureContext)

REQUIRED: Bối cảnh của bản ghi này.

Trường nhóm fopDetails. REQUIRED: Thông tin chi tiết về phương thức thanh toán cho giao dịch ghi hình 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ẽ sử dụng để xác định tài khoản cho các giao dịch mua hàng giữa hai công ty.

mandateDetails

object (MandateDetails)

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

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

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

Trường nhóm 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ó thông tin này thì không có xác thực nào có thể liên kết với ảnh chụp này.

Nếu bạn gặp phải trường hợp này 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ã OTP được tạo qua sendOtp. Thông báo này chỉ xuất hiện nếu người dùng đã trải qua đường dẫn sendOtp.

Nội dung phản hồi

Đối tượng phản hồi cho phương thức chụ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
}
Các trường
responseHeader

object (ResponseHeader)

REQUIRED: Tiêu đề chung cho tất cả cá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 trình tích hợp và do trình tích hợp tạo ra. Đây là giá trị nhận dạng mà bên tích hợp biết giao dịch này.

Để thuận tiện, mã nhận dạng này đi kèm trong chi tiết chuyển tiền

userMessage
(deprecated)

string

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

result

enum (CaptureResultCode)

REQUIRED: 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 để hỗ trợ công cụ phân tích rủi ro và xử lý rủi ro của Google. Trong các trường hợp ánh xạ mã từ chối, dữ liệu đôi khi 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 (đơn vị tích hợp) có thể sử dụng trường này để thông báo cho Google về 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 cứ điều gì mà mạng VISA trả lại.

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 theo phần triệu). Tính năng này được 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à giới hạn tương ứng với currencyCode của 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 tại trong tài khoản của người dùng (tính theo phần triệu). Tính năng này được sử 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 có cùng đơn vị tiền tệ với currencyCode trong yêu cầu.

MandateDetails

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

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

string

REQUIRED: Giấy uỷ nhiệm do Google tạo được gửi trong cuộc gọi createMandate.

MandateWithNotificationDetails

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

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

string

REQUIRED: Giấy uỷ nhiệm do Google tạo được gửi trong cuộc gọi createMandate.

upcomingTransactionNotificationId

string

REQUIRED: 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
}
Các trường
userIpAddress

string

KHÔNG BẮT BUỘC: Đây là địa chỉ IP trên thiết bị của người dùng nếu người dùng thực hiện giao dịch mua 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 của trường này, thì hợp đồng đó 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 thành công, giao hàng xong.
CHARGE_EXCEEDS_TRANSACTION_LIMIT amount của yêu cầu chụp này vượt quá giới hạn mỗi giao dịch. Nếu mã này được sử dụng, hãy đ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ì đã vượt quá giới hạn hằng ngày.
CHARGE_EXCEEDS_MONTHLY_LIMIT Hiện không thể sử dụng tài khoản này để mua hàng vì tài khoản đã vượt quá hạn mức hằng tháng.
CHARGE_UNDER_LIMIT amount của yêu cầu thu thập này không đá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 cho việc thu thập 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 bị giữ với công cụ tích hợp đã bị đóng.

Khi giá trị này được trả về, công cụ của người dùng sẽ bị đóng bằng 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 trình tích hợp đã bị đóng, bị nghi ngờ là tiếp quản tài khoản.

Khi giá trị này được trả về, công cụ của người dùng sẽ bị đóng bằng 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 bị giữ với đơn vị tích hợp đã bị đóng do hành vi gian lận.

Khi giá trị này được trả về, công cụ của người dùng sẽ bị đóng bằng 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 người dùng bên phía nhà tích hợp đã vô hiệu hoá GPT.

Khi giá trị này được trả về, công cụ của người dùng sẽ bị đóng bằng 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ả về giá trị này, người dùng sẽ phải trải qua quy trình làm mới.
OTP_NOT_MATCHED OTP không khớp với thông tin mà đơn vị tích hợp đã gửi.
OTP_ALREADY_USED OTP đã được sử dụng.
RISK_DECLINED

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

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

NO_GOOD_FUNDING_SOURCE_AVAILABLE Người dùng không có bất kỳ nguồn tiền hoạt động nào được định cấu hình trong tài khoản của họ có thể thanh toán cho giao dịch.
FUNDING_SOURCE_UNAVAILABLE

Không có công ty phát hành cơ sở hoặc nguồn tiền và việc thử lại khoản thanh toán hiện có này sẽ không thành công nếu được thử lại.

Google sẽ thử thanh toán lại khi đối tác trả lại mã phản hồi 4xx hoặc 5xx. Do đó, thường thì đối tác nên trả lại một trong các mã phản hồi đó nếu việc thử lại chính khoản thanh toán này có thể thành công khi nguồn tiền cơ bản lại có sẵn. Tuy nhiên, nếu có lý do kỹ thuật khiến Google thử lại khoản thanh toán vẫn không thành công, thì đối tác có thể trả về "FUNDING_SOURCE_UNAVAILABLE" để cho Google biết rằng họ không nên thử lại chính 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à Đã từ chối.

MANDATE_NOT_ACTIVE Giấy uỷ nhiệm dùng cho lần chụp này không còn hiệu lực nữa. Giá trị trả về này sẽ khiến công cụ uỷ nhiệm 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.