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 生成的动态密码所需的数据。只有用户经过 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 提供原始代码。例如,信用卡网关(集成商)可能会使用此字段向 Google 传达从 VISA 网络收到的确切拒绝代码。在这种情况下,scope 为“visa”,rawCode 为 VISA 网络返回的值。

如果 result 不为 SUCCESS,则此值是必需的

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_ALREADY_USED 动态密码已使用。
RISK_DECLINED

交易已被拒绝,因为集成商采取了风险检查。

此付款永久失败,但用户所用付款方式在 Google 被关闭。

NO_GOOD_FUNDING_SOURCE_AVAILABLE 用户的帐号中未配置任何能够支付交易的有效资金来源。
FUNDING_SOURCE_UNAVAILABLE

基础发卡机构或资金来源不可用,并且重试此现有付款不会成功。

当合作伙伴返回 4xx 或 5xx 响应代码时,Google 会重新尝试付款。因此,如果当底层资金来源再次可用时,如果同一付款重试成功,合作伙伴通常应返回这些响应代码之一。但是,如果出于技术原因导致 Google 重试付款失败,合作伙伴可以返回“FUNDING_SOURCE_UNAVAILABLE”,以告知 Google 不应重试同一笔付款。

注意:Google 仍可能会重试此次付款,只是会使用不同的 requestId,但此付款请求将被标记为“已拒绝”。

MANDATE_NOT_ACTIVE 用于此次捕获的授权书已失效。此返回值会导致用户的授权书付款方式被 Google 关闭。
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED 之前向用户发送的定期授权书付款通知已过期。