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

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

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)

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

paymentIntegratorTransactionId

string

선택사항: 이 식별자는 통합업체에 따라 다르며 통합업체에 의해 생성됩니다. 이는 통합업체가 이 트랜잭션을 인식하는 데 사용하는 식별자입니다.

편의를 위해 이 식별자는 송금 세부정보에 포함됩니다.

userMessage
(deprecated)

string

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

result

enum (CaptureResultCode)

필수: 이 캡처의 결과입니다.

rawResult

object (RawResult)

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

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

transactionLimit

string (Int64Value format)

선택사항: 결과가 CHARGE_EXCEEDS_TRANSACTION_LIMIT인 경우 사용자가 거래에 지출할 수 있는 최대 금액입니다 (마이크로 단위). 구조화된 사용자 대상 메시지 및 감소율 분석에 사용됩니다.

이 값은 요청의 currencyCode에 상대적인 한도여야 합니다.

currentBalance

string (Int64Value format)

선택사항: 결과가 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 위임장 반복 결제를 위해 사용자에게 전송된 알림이 만료되었습니다.