Method: capture

Google에 보관된 고객 계정과 결제 대행업체 간에 자금 이동을 시작합니다. 헤더 내의 requestIdpaymentIntegratorAccountId의 조합은 멱등성 키이며 이 트랜잭션을 고유하게 식별합니다. 이 거래의 모든 변형 (환불)은 captureRequestId 필드에 requestId 값을 채웁니다.

요청을 처리하는 동안 엔드포인트에서 오류가 발생하면 이 엔드포인트의 응답 본문은 ErrorResponse 유형이어야 합니다.

요청의 예는 다음과 같습니다.


{
  "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": {}
}

응답 예는 다음과 같습니다.


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

HTTP 요청

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

요청 본문

요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.

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.
}
필드
requestHeader

object (RequestHeader)

필수: 모든 요청의 공통 헤더입니다.

paymentIntegratorAccountId

string

필수: 이 거래와 관련된 계약상의 제약 조건을 식별하는 결제 통합업체 계정 식별자입니다.

transactionDescription

string

필수: 고객의 명세서에 기재할 수 있는 거래에 대한 설명입니다. requestHeader에 있는 userLocale로 현지화됩니다. 이 형식은 예고 없이 변경될 수 있으며 파싱해서는 안 됩니다.

currencyCode

string

필수: 3자리 ISO 4217 통화 코드

amount

string (Int64Value format)

필수: 구매 금액(통화 단위의 마이크로)입니다.

captureContext

object (CaptureContext)

필수: 이 캡처에 관한 컨텍스트입니다.

통합 필드 fopDetails. 필수: Capture 거래의 FOP 세부정보입니다. fopDetails은 다음 중 하나일 수 있습니다.
googlePaymentToken

string

두 회사가 상호 구매용 계정을 식별하는 데 사용하는 토큰입니다.

mandateDetails

object (MandateDetails)

위임장별 결제 세부정보입니다.

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

upcomingTransactionNotification이 필요한 경우 위임장 관련 결제 세부정보입니다.

통합 필드 account_verification.

account_verification는 다음 중 하나여야 합니다.

authenticationRequestId

string

선택사항: 연결된 인증 요청의 requestId입니다. 이 속성이 없으면 이 캡처에 인증을 연결할 수 없습니다.

이 속성이 있으면 사용자가 이 호출 직전에 인증되었거나 자동 결제 일정이 설정될 때 인증된 것입니다.

otpVerification

object (OtpVerification)

선택사항: sendOtp에서 생성된 OTP를 확인하는 데 필요한 데이터입니다. 사용자가 sendOtp 경로를 통과한 경우에만 존재합니다.

응답 본문

캡처 메서드의 응답 객체입니다.

성공할 경우 응답 본문에 다음 구조의 데이터가 포함됩니다.

JSON 표현
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorTransactionId": string,
  "userMessage": string,
  "result": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },
  "transactionLimit": string,
  "currentBalance": string
}
필드
responseHeader

object (ResponseHeader)

REQUIRED: 모든 응답의 공통 헤더입니다.

paymentIntegratorTransactionId

string

선택사항: 이 식별자는 통합업체별로 지정되며 통합업체에서 생성합니다. 이 ID는 통합업체가 이 트랜잭션을 아는 식별자입니다.

편의를 위해 송금 세부정보에 이 식별자가 포함되어 있습니다.

userMessage
(deprecated)

string

지원 중단됨: 결과가 SUCCESS가 아닌 경우 사용자에게 표시할 결과의 설명입니다.

result

enum (CaptureResultCode)

REQUIRED: 이 캡처의 결과입니다.

rawResult

object (RawResult)

선택사항: 캡처의 원시 결과입니다. Google의 위험 엔진 및 분석에 정보를 제공하는 데 사용됩니다. 거부 코드 매핑 시 데이터가 손실될 수 있습니다. 통합업체는 Google에 원시 코드를 제공할 수 있습니다. 예를 들어 신용카드 게이트웨이 (통합업체)는 이 입력란을 사용하여 VISA 네트워크에서 수신한 거부 코드를 Google에 정확히 알릴 수 있습니다. 이 경우 scope는 'visa'가 됩니다. 그리고 rawCode는 VISA 네트워크가 반환한 값이 됩니다.

이 값은 resultSUCCESS이 아닌 경우 필수입니다.

transactionLimit

string (Int64Value format)

OPTIONAL: Result가 CHARGE_EXCEEDS_TRANSACTION_LIMIT이면 사용자가 거래에 지출할 수 있는 최대 금액 (마이크로)입니다. 구조화된 사용자 대상 메시지 및 거부율 분석에 사용됩니다.

이는 요청의 currencyCode에 대한 상대적인 제한이어야 합니다.

currentBalance

string (Int64Value format)

선택사항: Result가 INSUFFICIENT_FUNDS인 경우 사용자 계정에서 현재 사용 가능한 잔액 (마이크로)입니다. 구조화된 사용자 대상 메시지에 사용됩니다.

이 값의 통화는 요청의 currencyCode와 동일해야 합니다.

MandateDetails

캡처할 위임장에 대한 세부정보입니다.

JSON 표현
{
  "mandateId": string
}
필드
mandateId

string

필수: createMandate 호출 중에 전송된 Google 생성 위임장 ID입니다.

MandateWithNotificationDetails

필수 알림 세부정보와 캡처 의무에 대한 세부정보입니다.

JSON 표현
{
  "mandateId": string,
  "upcomingTransactionNotificationId": string
}
필드
mandateId

string

필수: createMandate 호출 중에 전송된 Google 생성 위임장 ID입니다.

upcomingTransactionNotificationId

string

필수: 이 거래에 관해 사전 알리기 위해 실행된 upcomingTransactionNotification 호출의 requestId입니다.

CaptureContext

이 객체는 캡처가 요청된 방식에 대한 컨텍스트를 제공합니다.

JSON 표현
{
  "userIpAddress": string
}
필드
userIpAddress

string

선택사항: 세션에서 사용자가 구매를 한 경우 사용자 기기의 IP 주소입니다. 사용자가 세션에 있지 않은 경우 비어 있습니다. 특정 계약에 이 필드의 필요성이 명시되어 있지 않은 경우 이 필드는 항상 비어 있습니다.

CaptureResultCode

캡처의 결과 코드입니다.

열거형
UNKNOWN_RESULT 이 기본값을 설정하면 안 됩니다.
SUCCESS 캡처에 성공하면 물건을 배달합니다.
CHARGE_EXCEEDS_TRANSACTION_LIMIT 캡처 요청의 amount이(가) 트랜잭션당 한도를 초과합니다. 이 코드가 사용되는 경우 사용자 메시지를 위해 transactionLimit 필드를 채웁니다.
CHARGE_EXCEEDS_DAILY_LIMIT 이 계정은 일일 한도를 초과했으므로 지금은 구매에 사용할 수 없습니다.
CHARGE_EXCEEDS_MONTHLY_LIMIT 월별 한도가 초과되어 지금은 이 계정을 사용하여 구매할 수 없습니다.
CHARGE_UNDER_LIMIT 캡처 요청의 amount이(가) 최소 거래 금액을 충족하지 않습니다.
INSUFFICIENT_FUNDS 계정의 잔액이 부족하여 캡처를 보장할 수 없습니다.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY 이 계정은 요청한 통화를 지원하지 않습니다.
ACCOUNT_CLOSED

통합업체에 보관된 사용자 계정이 해지되었습니다.

이 값을 반환하면 사용자의 결제 수단이 Google에서 종료됩니다. 사용자는 연결 흐름을 다시 거쳐 새 결제 수단을 추가해야 합니다.

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

통합업체와 연결된 사용자 계정이 폐쇄되었으며 계정이 탈취된 것으로 의심됩니다.

이 값을 반환하면 사용자의 결제 수단이 Google에서 종료됩니다. 사용자는 연결 흐름을 다시 거쳐 새 결제 수단을 추가해야 합니다.

ACCOUNT_ON_HOLD 계정이 보류 중입니다.
ACCOUNT_CLOSED_FRAUD

통합업체에 보류된 사용자 계정이 사기로 인해 해지되었습니다.

이 값을 반환하면 사용자의 결제 수단이 Google에서 종료됩니다. 사용자는 연결 흐름을 다시 거쳐 새 결제 수단을 추가해야 합니다.

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

계정이 활성 상태이지만 통합업체 측에서 사용자에 의해 GPT가 무효화되었습니다.

이 값을 반환하면 사용자의 결제 수단이 Google에서 종료됩니다. 사용자는 연결 흐름을 다시 거쳐 새 결제 수단을 추가해야 합니다.

TOKEN_REFRESH_REQUIRED 이를 반환하려면 사용자가 새로고침 흐름을 거쳐야 합니다.
OTP_NOT_MATCHED OTP가 통합업체가 보낸 내용과 일치하지 않습니다.
OTP_ALREADY_USED OTP가 이미 사용되었습니다.
RISK_DECLINED

통합업체 측의 위험 확인으로 인해 거래가 거부되었습니다.

이로 인해 결제가 영구적으로 실패하게 되지만 이로 인해 사용자의 결제 수단이 Google에서 폐쇄되지는 않습니다.

NO_GOOD_FUNDING_SOURCE_AVAILABLE 사용자의 계정에 거래 대금을 지불할 수 있는 결제 수단이 설정되어 있지 않습니다.
FUNDING_SOURCE_UNAVAILABLE

기본 발급기관 또는 자금 출처를 사용할 수 없으며, 다시 시도할 경우 기존의 결제를 재시도할 수 없습니다.

Google은 파트너가 4xx 또는 5xx 응답 코드를 반환하면 결제를 재시도합니다. 따라서 파트너는 일반적으로 기본 자금을 다시 사용할 수 있게 되었을 때 동일한 결제를 재시도할 때 성공할 수 있는 경우 이러한 응답 코드 중 하나를 반환해야 합니다. 하지만 기술적인 이유로 Google에서 결제를 재시도할 때 계속 실패하는 경우에는 파트너가 'FUNDING_SOURCE_UNAVAILABLE'을 반환할 수 있습니다. 동일한 결제를 다시 시도해서는 안 된다는 것을 Google에 알리기 위한 방법입니다.

참고: Google에서 다른 requestId로 결제를 다시 시도할 수 있지만 이 결제 요청은 거부됨으로 표시됩니다.

MANDATE_NOT_ACTIVE 이 캡처에 사용된 위임장이 더 이상 활성 상태가 아닙니다. 이 반환 값으로 인해 사용자의 위임장이 Google에서 종료됩니다.
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED 위임장 반복 결제와 관련하여 사용자에게 전송된 알림이 만료되었습니다.