结账 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_fields
object
否
要更新的其他字段的名称 => 值对。
payment_method
string
否
选定的支付方式的 ID。
order_notes
string
否
订单备注。
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_address
object
是
客户更新后的账单地址数据对象。
shipping_address
object
是
客户更新后的配送地址数据对象。
customer_note
string
否
客户在结账过程中添加到订单的备注。
payment_method
string
是
用于处理支付的支付方法 ID。
payment_data
array
否
在处理支付时传递给支付方法的的数据。
customer_password
string
否
可选地，为新帐户定义密码。
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
    }
  ]
}