跳转到主要内容

结账 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
    }
  ]
}