跳到主要内容

结账 API

结账 API 允许创建订单(基于当前的购物车)并处理付款方式的支付。

所有结账端点都需要一个 Nonce Token 或一个 Cart Token,否则这些端点将返回一个错误。

获取结账数据

返回用于结账所需的数据。 这包括一个草稿订单(基于当前的购物车)以及客户的账单和配送地址。 支付信息将为空,因为它只有在通过 POST 请求更新订单时才会持久化(在支付处理之前)。

GET /wc/store/v1/checkout

此端点不需要任何参数。

curl --header "Nonce: 12345" --request GET https://example-store.com/wp-json/wc/store/v1/checkout

示例响应

{
"order_id": 146,
"status": "checkout-draft",
"order_key": "wc_order_VPffqyvgWVqWL",
"customer_note": "",
"customer_id": 1,
"billing_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US",
"email": "admin@example.com",
"phone": "555-2368"
},
"shipping_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US"
},
"payment_method": "",
"payment_result": {
"payment_status": "",
"payment_details": [],
"redirect_url": ""
}
}

更新结账数据

此接口允许您更新当前订单的结账数据。例如,这可以从前端调用以持久化结账字段。

PUT /wc/store/v1/checkout?__experimental_calc_totals=true

请注意 __experimental_calc_totals 参数。 此参数用于确定是否应重新计算购物车总额。 如果购物车总额是响应 PUT 请求而更新的,则应将其设置为 true,否则设置为 false

属性类型必需描述
additional_fieldsobject要更新的其他字段的名称 => 值对。
payment_methodstring选定的支付方式的 ID。
order_notesstring订单备注。
curl --header "Nonce: 12345" --request PUT https://example-store.com/wp-json/wc/store/v1/checkout?additional_fields[plugin-namespace/leave-on-porch]=true&additional_fields[plugin-namespace/location-on-porch]=dsdd&payment_method=bacs&order_notes=Please%20leave%20package%20on%20back%20porch

示例请求

{
"additional_fields": {
"plugin-namespace/leave-on-porch": true,
"plugin-namespace/location-on-porch": "dsdd"
},
"payment_method": "bacs",
"order_notes": "Please leave package on back porch"
}

示例响应

{
"order_id": 1486,
"status": "checkout-draft",
"order_key": "wc_order_KLpMaJ054PVlb",
"order_number": "1486",
"customer_note": "",
"customer_id": 1,
"billing_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US",
"email": "admin@example.com",
"phone": "555-2368"
},
"shipping_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US"
},
"payment_method": "bacs",
"payment_result": null,
"additional_fields": {
"plugin-namespace/leave-on-porch": true,
"plugin-namespace/location-on-porch": "dsdd"
},
"__experimentalCart": { ... },
"extensions": {}
}

请注意响应中返回的 __experimentalCart 字段。 在 PUT 请求之后,总额将在前端更新。 这使得可以响应通过 PUT 请求持久化的字段来操纵购物车总额。

处理订单和支付

接受最终的客户地址和选择的支付方法,以及任何额外的支付数据,然后尝试支付并返回结果。

POST /wc/store/v1/checkout
属性类型必需描述
billing_addressobject客户更新后的账单地址数据对象。
shipping_addressobject客户更新后的配送地址数据对象。
customer_notestring客户在结账过程中添加到订单的备注。
payment_methodstring用于处理支付的支付方法 ID。
payment_dataarray在处理支付时传递给支付方法的的数据。
customer_passwordstring可选地,为新帐户定义密码。
curl --header "Nonce: 12345" --request POST https://example-store.com/wp-json/wc/store/v1/checkout?payment_method=paypal&payment_data[0][key]=test-key&payment_data[0][value]=test-value

示例请求

{
"billing_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US",
"email": "admin@example.com",
"phone": "555-2368"
},
"shipping_address": {
"first_name": "Peter",
"last_name": "Venkman",
"company": "",
"address_1": "550 Central Park West",
"address_2": "Corner Penthouse Spook Central",
"city": "New York",
"state": "NY",
"postcode": "10023",
"country": "US"
},
"customer_note": "Test notes on order.",
"create_account": false,
"payment_method": "cheque",
"payment_data": [],
"extensions": {
"some-extension-name": {
"some-data-key": "some data value"
}
}
}

支付数据

有很多支付网关可供商家使用,并且每个网关都期望接收不同的 payment_data。 我们无法全面列出所有支付网关期望的请求,因此我们建议您联系您正在使用的支付网关插件的作者,以获取更多信息。

以下是一个使用 WooCommerce Stripe 支付网关 时,发送到结账端点的支付数据的示例。

有关如何生成 stripe_source 的更多信息,请查阅 Stripe 文档

{
"payment_data": [
{
"key": "stripe_source",
"value": "src_xxxxxxxxxxxxx"
},
{
"key": "billing_email",
"value": "myemail@email.com"
},
{
"key": "billing_first_name",
"value": "Jane"
},
{
"key": "billing_last_name",
"value": "Doe"
},
{
"key": "paymentMethod",
"value": "stripe"
},
{
"key": "paymentRequestType",
"value": "cc"
},
{
"key": "wc-stripe-new-payment-method",
"value": true
}
]
}