Method: sendOtp

请求集成商向电话号码发送动态密码。

如果集成商返回 SUCCESS,则 Google 会预期将短信发送到该电话号码。

用户最初将其账号与 Google 关联时,Google 仅提供 accountPhoneNumber。此后,对于所有后续调用,系统只会发送 associationId

如果端点在处理请求时遇到错误,此端点的响应正文应为 ErrorResponse 类型。

示例请求如下所示:


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 0,
      "revision": 0
    },
    "requestId": "0123434-otp-abc",
    "requestTimestamp": "1502545413026"
  },
  "accountPhoneNumber": "+918067218010",
  "smsMatchingToken": "AB12345678C",
  "otpContext": {
    "association": {}
  }
}

示例响应如下所示:


{
  "responseHeader": {
    "responseTimestamp": "1502545413098"
  },
  "paymentIntegratorSendOtpId": "99==ABC EF",
  "result": "SUCCESS"
}

HTTP 请求

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

请求正文

请求正文中包含结构如下的数据:

JSON 表示法
{
  "requestHeader": {
    object (RequestHeader)
  },
  "smsMatchingToken": string,
  "otpContext": {
    object (OtpContext)
  },

  // Union field account_identifier can be only one of the following:
  "accountPhoneNumber": string,
  "associationId": string
  // End of list of possible types for union field account_identifier.
}
字段
requestHeader

object (RequestHeader)

必需:所有请求的通用标头。

smsMatchingToken

string

必需:此值由 Google 提供,必须包含在向用户发送的短信中。这样,Google 就可以针对 Android O 设备自动匹配设备上的短信(请参阅参考)。此字段包含 11 个字符。

例如,如果短信通常如下所示:

Here's the OTP you requested: <OTP>

Google 还会发送“0123456789A”则短信应如下所示:

0123456789A

Here's the OTP you requested: YYXXZZ

或者,代码可能如下所示:

Here's the OTP you requested: YYXXZZ

0123456789A

otpContext

object (OtpContext)

可选:这是请求动态密码的上下文。

联合字段 account_identifier必需:这是需要发送动态密码的账号的标识符。account_identifier 只能是下列其中一项:
accountPhoneNumber

string

这是一个 E.164 格式的电话号码。例如 +14035551111 和 +918067218000。这一律以“+”号开头,并且后面只包含数字(不含短划线)。

当用户首次将其账号与 Google 关联时以及重新关联时,系统会填充此字段。

associationId

string

这是用于引用用户账号的关联标识符。

初始关联后,系统会为所有后续调用填充此字段。

响应正文

sendOtp 方法的响应对象。

如果成功,响应正文将包含结构如下的数据:

JSON 表示法
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorSendOtpId": string,
  "result": enum (SendOtpResultCode)
}
字段
responseHeader

object (ResponseHeader)

必需:所有响应的通用标头。

paymentIntegratorSendOtpId

string

可选:集成商识别此动态密码请求的标识符。由集成商生成。

result

enum (SendOtpResultCode)

必需:此请求的结果

OtpContext

请求动态密码的上下文。

JSON 表示法
{

  // Union field otp_context can be only one of the following:
  "association": {
    object (Empty)
  },
  "mandateCreation": {
    object (Empty)
  },
  "associationWithMandateCreation": {
    object (Empty)
  }
  // End of list of possible types for union field otp_context.
}
字段
联合字段 otp_context必需:请求动态密码的上下文。otp_context 只能是下列其中一项:
association

object (Empty)

是在关联/重新关联的情况下请求获取动态密码的。

mandateCreation

object (Empty)

在创建授权书时申请了动态密码。

associationWithMandateCreation

object (Empty)

在创建授权书的同时,系统正在请求关联动态密码。

此类型没有字段。

此对象用于扩展,因为布尔值和枚举通常需要额外的数据进行扩展。实现人员使用该数据来确定在线状态。未来版本可能会扩展此表示的枚举,以包含数据。

Empty 的 JSON 表示法是空的 JSON 对象 {}

SendOtpResultCode

发送动态密码请求的结果代码。

枚举
UNKNOWN_RESULT 切勿设置此默认值!
SUCCESS 集成商已发送动态密码。
PHONE_NUMBER_NOT_ASSOCIATED_WITH_ACCOUNT 电话号码未与 associationId 标识的账号相关联。
UNKNOWN_PHONE_NUMBER 电话号码未与任何账号相关联。在未设置 associationId 的情况下使用。
MESSAGE_UNABLE_TO_BE_SENT 由于某种原因,集成商无法发送动态密码。这是一个暂时性错误,可能会导致此调用被重试。
INVALID_PHONE_NUMBER 电话号码格式不正确。
NOT_ELIGIBLE 用户的账号无法使用此服务。
OTP_LIMIT_REACHED 用户请求或尝试验证的动态密码过多。
ACCOUNT_CLOSED

用户在集成商处拥有的账号已关闭。只有当“associationId”用于标识此用户。

返回此值将导致用户的付款方式被 Google 关闭。系统将强制要求用户重新执行关联流程以添加新的付款方式。

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

该用户在集成商处的账号已关闭,因为账号疑似被接管。只有当“associationId”用于标识此用户。

返回此值将导致用户的付款方式被 Google 关闭。系统将强制要求用户重新执行关联流程以添加新的付款方式。

ACCOUNT_CLOSED_FRAUD

由于欺诈行为,该用户在集成商处的账号已被关闭。只有当“associationId”用于标识此用户。

返回此值将导致用户的付款方式被 Google 关闭。系统将强制要求用户重新执行关联流程以添加新的付款方式。