本部分介绍 Orders API 中订单的结构和生命周期。
订单的结构
订单包含订单项,订单项指的是商品。客户可以下单购买一定数量的商品。例如,一个包含 2 台 Chromecast 和 1 台 Nexus 6 的订单应表示为有 2 个订单项,由数量为 2 的 Chromecast 商品和数量为 1 的 Nexus 6 商品组成。
订单还采集其他购买时间信息,例如客户选择的配送方式、配送和帐单邮寄地址,以及接收来自商家的电子邮件的偏好设置。有关订单中包含内容的完整说明,请参阅订单资源页面。
如果订单状态发生变化,例如由于商品正在配送或退款已经获得批准,这些信息也会显示在订单资源的详情中。
每个订单都有订单状态,其中汇总了订单完成的进度。订单状态会经常根据实际订单项的状态而更新。例如,如果所有订单项都已配送,则订单状态将会是 shipped
。
Orders API ID
Orders API 中有一些不同的 ID,用于描述不同的操作:
- Google 订单 ID
- 此值由 Google 在客户创建订单时分配,并且在所有订单甚至是不同的 Merchant Center 帐号中都是唯一的。
- 商家订单 ID
- 此值由商家在订单创建后分配。此值在商家帐号中必须是唯一的。
- 订单项 ID
- 此值由 Google 在订单创建时分配,并且指示订单中的订单项。订单项包含有关订购内容的详请,例如商品、数量、税费和优惠 ID。
- 运单 ID
- 此值由商家在创建新运单时分配。此值在指定订单的生命周期内必须是唯一的。
- 操作 ID
- 此值由商家在使用此 API 对订单执行操作时分配,用于检测重复请求,并且在单个订单的生命周期内必须是唯一的。
订单的生命周期
订单通常由选择在 Google 购物上购买商品的客户创建。然后,当商家接收、处理和配送订单时,订单会经历一系列状态变化。
概览
概括来讲,操作流如下所示。请注意,下图只是包含订单可能出现的状态的简化视图,图中的内容并不详尽:
订单创建:当客户通过 Shopping Actions 完成购买时,系统会创建一个订单。订单在 Google 的订单管理系统 (OMS) 中创建,状态为“处理中”。当订单状态为“处理中”时,客户只需点击 Google 的订单确认页面上的取消按钮,即可取消订单。在此之后,客户无法取消订单,但商家可以在配送前随时取消订单。
在沙盒模式下,可以使用
createtestorder
人为创建订单。检索订单(不在图表中):订单创建后,商家可以使用
list
检索此订单。虽然订单的状态为
inProgress
,我们仍鼓励商家保留产品目录,但在订单状态为pendingShipment
之前不要启动履单流程。确认订单(可选):将订单的
acknowledged
字段的值设置为true
。虽然是可选操作,但我们仍建议商家在订单被提取到其 OMS 后,立即使用 APIacknowledge
确认订单。这样,当通过 list 调用来请求新订单时,商家可以过滤尚未确认的订单,仅获取待提取的订单列表。除了检索订单详请(或在沙盒中使用
advancetestorder
)外,对指定订单调用任何方法都会自动确认此订单。这可以在以下部分流程中实现:订单正在处理中:用第一条虚线 (3) 表示
或者
订单待配送时:用第二条虚线 (3) 表示
准备配送:订单创建后不久,有效的订单即转到
pendingShipment
状态。此时,资金由 Google 提供担保,订单已得到确认,等待履单。在沙盒模式下,订单不会在计时器计时结束后自动转到
pendingShipment
。开发者可以使用advancetestorder
对订单执行此操作。设置商家订单 ID(可选)(不在图表中):虽然也是可选操作,但我们仍建议商家在其 OMS 中提供此类值后,使用
updatemerchantorderid
更新商家订单 ID。当商家在以后的调用中检索订单详情时,此订单 ID 将传回给商家,并且作为显示在商家和 Google 的 OMS 中的唯一密钥,在对帐时会用到。
配送订单:商品配送后,商家可以通过
shiplineitems
方法通知 Google。商家可以配送一个订单中的全部商品或者部分商品。我们也强烈建议商家传递运单(如果有)的跟踪 ID。请注意,配送商品会触发客户付款方式中的相应扣款。将运单标记为已送达(可选):运单送达后,商家可以通过
updateshipment
通知 Google。对于大多数交易,这是最后一步(如果您有权访问运单送达数据)。处理退货:如果商品发生退货,商家可以使用
returnrefundlineitem
调用。请注意,将商品声明为已退货不会退款给客户。
在上面的图表中未显示影响订单状态的以下操作:
- 发起退款
- 退款可以通过
refund
记录在 API 中。可以在配送之前或之后发出退款,并且不会改变订单的状态。 - 取消商品
- 使用
cancellineitem
可以取消订单中的商品。取消后,对应的商品会订单中移除,相应的费用也会退还。 - 取消订单
- 使用
cancel
可以取消整个订单。这将导致全额退款。
商品和订单状态转换
以下图表解释了订单项和订单的有效转换。通常,订单的状态是从其订单项的状态派生而来,但了解这些对象所处的状态可能很有用。请将这些图表用作概念性理解的指南。