该 API 遵循一组 HTTP API 标准,并且支持 幂等性,有助于实现更强大的 集成。
Google 托管的网址
每种 Google 托管的方法的文档都提供了一个基准网址, 包括方法名称和主要版本号。创建了完整网址 方法是将调用方的付款集成商账号 ID 添加到 end 的值。例如,Google 托管的 echo 方法的文档 指定网址:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo
如果调用方的付款集成商账号 ID 为 INTEGRATOR_1
,则调用方应添加
添加到网址末尾:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo/INTEGRATOR_1
合作伙伴托管的网址
每种合作伙伴托管的 API 方法的文档都提供了一个基准网址,
包括方法名称和主要版本号。请勿在广告中包含
付款集成商账号 ID (PIAID
)
。
沙盒环境和生产环境
Google 在沙盒中同时托管 Standard Payments API(用于开发和 测试)和生产环境。Google 沙盒环境中的请求 不会产生任何现实的财务责任。沙盒和 生产环境是完全独立的,不会共享密钥或 交易信息。
Google 希望您的沙盒始终可用,因为我们将使用 测试区,首先测试更改和新功能。
Google 的沙盒基本路径
https://vgw.sandbox.google.com/secure-serving/gsp/
Google 的生产基础路径
https://vgw.googleapis.com/secure-serving/gsp/
本指南将使用生产端点。
内容类型和编码
使用 PGP 加密的消息载荷必须使用内容类型application/octet-stream; charset=utf-8
。PGP 请求正文必须
使用 base64url 编码发送,如
rfc4648 §5。
使用 JWE 加密的消息载荷必须使用内容类型
application/jose; charset=utf-8
。紧凑序列化选项
处理最终请求正文的编码。
HTTP 状态代码
Standard Payments API 旨在返回 HTTP 200
状态代码
。这包括
从业务角度来看待解决的请求
应用逻辑无法处理的请求不应导致
HTTP 200
状态代码,因为它们表示 Google 和
合作伙伴。相反,API 响应应使用相应的 HTTP 状态,
并添加一个可选的 ErrorResponse
对象。
HTTP 错误和原因 | |
---|---|
400 |
BAD REQUEST
客户端指定了无效参数。 如果操作因系统错误而被拒绝, 未处于操作执行所需的状态。 如果重试请求在系统进入状态之前无法成功,则使用此方法 已明确修正例如,如果退款申请因以下原因而失败: 它引用了不存在的捕获,重试不会成功 直到捕获出现在集成商系统中。
|
401 |
UNAUTHORIZED
请求没有针对 操作。例如,无效签名或未知签名 返回 401。 |
403 |
FORBIDDEN / PERMISSION DENIED
调用方无权执行指定的操作。 |
404 |
NOT FOUND
找不到所请求的实体(例如付款或用户)。 |
409 |
CONFLICT / ABORTED
操作已被取消,通常是由于存在诸如以下的并发问题 排序器检查失败、事务中止等 |
412 |
PRECONDITION FAILED
此代码应该用于幂等键 并使用不同的参数进行重用 |
429 |
RESOURCE EXHAUSTED / TOO MANY REQUESTS
部分系统资源已用尽。 |
499 |
CANCELLED
操作已取消(通常是被调用方取消)。 |
500 名 |
INTERNAL ERROR
内部错误。这意味着底层系统所期望的一些不变量 已损坏。 |
501 |
UNIMPLEMENTED
操作在此服务中未实现、支持或启用。 |
503 |
UNAVAILABLE
该服务目前不可用。这很可能是暂时性 条件,但可以通过重试来更正。 |
504 |
GATEWAY TIMEOUT / DEADLINE EXCEEDED
截止期限已过,操作还未完成。对于 更改系统状态,那么即使 操作成功完成。例如,成功响应 从服务器发出的请求可能会延迟很长时间,以至于需要处理 过期。 |
请求幂等性
请求幂等性是 Standard Payments 中使用的核心策略 用于确保 Google 与合作伙伴之间的系统互动 稳健且容错。幂等请求是指 可能会多次发送,但与单个请求的效果相同。 此策略通过确保两个系统之间的最终一致性, 这样,我们的系统就可以就 资源状态
我们的 API 利用幂等性实现以下目的:
- 通过使所有操作易于跟踪和减少, 可审核。
- 确保来自某个外部 IP 地址的多个相同请求 同一客户端不会产生不同的最终状态。
- 允许单独理解请求,从而尽可能减少状态, 通过消除由 数据的保留。
- 无需使用额外字段来指示请求是否为重试
示例
示例 1:收到响应前连接中断
场景:
- Google 向集成商发送请求。
- 集成商服务器收到此请求并成功处理。
- Google 的服务器在收到第 2 步中的响应之前断电。
- Google 的服务器电源恢复了,并且系统会发送相同的请求
所有参数均相同(请求 ID 和请求详情相同,但已更新)
requestTimestamp
)发送到集成商的服务器。
结果:
在这种情况下,集成商服务器必须使用
第 2 步,因为除 responseTimestamp
之外的所有参数都相同。
副作用仅在第 2 步中出现一次。第 4 步没有副作用。
示例 2:请求发送到正在维护的服务器
场景:
- 集成商服务器的数据库停机维护。
- Google 向集成商发送请求。
- 集成商正确返回
UNAVAILABLE
状态代码。 - Google 服务器收到响应并安排重试。
- 集成商服务器的数据库恢复在线状态。
- Google 重新发送第 2 步中的请求(相同的请求 ID 和请求详情)
但已更新为
requestTimestamp
)。请注意,这两个请求 应该相同 - 集成商服务器收到请求并返回 OK 状态代码 获得完整响应。
结果:
在这种情况下,集成商服务器必须处理第 7 步中的请求,而不是
返回 HTTP 503
(UNAVAILABLE
)。相反,集成商服务器应该将
处理请求并返回 OK 并提供相应的消息。请注意,虽然
系统UNAVAILABLE
。Google 可能会发出类似如下的重复请求:
第 2 步。每个请求都应该生成类似于第 3 步的消息。
最终,将出现第 6 步和第 7 步。
示例 3:由于恢复错误,重试的消息与初始消息不匹配
场景:
- Google 向集成商发送请求。
- 集成商服务器收到此请求并成功处理。
- Google 的服务器在收到第 2 步中的响应之前断电。
- Google 的服务器电源恢复,并尝试发送相同的请求 但遗憾的是,有些参数是不同的。
结果:
在这种情况下,集成商服务器应以 HTTP 412
作为回复
(PRECONDITION FAILED
) 错误代码,用于向 Google 指明存在
错误。