# 退款与售后

> 用 Open API 处理 Shoplazza 订单退款：发起退款、查询退款记录，并读取买家发起的退货退换售后单。

对订单发起退款、查询退款记录，并读取买家发起的售后单（退货与换货）。

## 适用场景

在客服工具里处理退款，或把退货与外部系统对账。

## 前置需求

- 一个已跑通 OAuth 与 token 存储的公开应用——先完成 [开发独立应用](/docs/app/getting-started/create-public-app/develop-app)。下面的每个请求都带 `Access-Token: {token}` 头，使用你为每个店铺保存的 token。
- OAuth 时已授予订单相关的 access scope。

## 工作原理

退款与售后单是两个相关但创建路径不同的对象：

- **退款**由你主动发起——对订单调用 `refund`，响应会返回两个 id：`refund_record_id` 标识这笔退款本身，之后可以在退款记录列表里回查；`post_sale_id`——Shoplazza 会在退款的同时自动生成一张售后单。
- **售后单**（退货与换货）则是**由买家在店面发起**的，不经过你的应用。API 只能读取和删除售后单记录——买家发起的这条链路没有创建端点。

所以，通过 API 发起退款是唯一会产生可回查售后单的路径；其他售后单在买家自己创建之前，都不受你的应用控制。

### 发起退款

`refund_total` 是唯一必填字段。整单退款时传订单的 `total_price`。

`POST /openapi/2026-01/orders/{id}/refund`

请求体：

```json5
{
  "refund": {
    "refund_total": "205.51" // 整单退款时传订单的 total_price
  }
}
```

响应（节选，`data.data` 直接就是两个 id）：

```json
{
  "code": "Success",
  "data": {
    "refund_record_id": "626516830554446103",
    "post_sale_id": "56008987-fb4d-41b9-aefa-9d38478f486c"
  }
}
```

部分退款、按行项或按支付渠道的金额见 [发起退款](/api/order-refund-record-create)。

### 查询退款记录

`GET /openapi/2026-01/orders/refund_records`

响应（节选，列表在 `data.data.records` 下）：

```json
{
  "code": "Success",
  "data": {
    "records": [
      {
        "id": "626516830554446103",
        "order_id": "2386979206089232618121",
        "refund_price": "205.51",
        "refund_method": "customize",
        "refund_status": "finished",
        "created_at": "2026-07-01T07:06:35Z",
        "payment_details": [
          {
            "payment_method": "bogus_gateway",
            "refund_price": "205.51",
            "refund_status": "finished"
          }
        ]
      }
    ]
  }
}
```

见 [查询退款记录](/api/order-refund-records)。

### 读取售后单（只读）

:::note
售后单（退货与换货）由**买家在店面发起**。API 只能**读取**（`GET /orders/post_sales`）和**删除**一条记录（`DELETE /orders/post_sales/{id}`）——没有创建端点。
:::

`GET /openapi/2026-01/orders/post_sales`

响应（节选，注意列表在 `data.data.orders` 下，而不是 `post_sales`）：

```json
{
  "code": "Success",
  "data": {
    "orders": [
      {
        "id": "56008987-fb4d-41b9-aefa-9d38478f486c",
        "number": "VMT95165-S1",
        "order_number": "VMT95165",
        "order_total": "205.51",
        "refund_amount": "205.51",
        "financial_status": "refunded",
        "fulfillment_status": "shipped",
        "status": "finished",
        "customer_name": "Jane Doe",
        "line_items": [
          {
            "id": "ee73a839-61a2-4504-b4b6-ea55f73f1340",
            "product_title": "Denim dress",
            "quantity": 1,
            "refund_price": "205.51",
            "sku": "A002013"
          }
        ]
      }
    ]
  }
}
```

见 [查询售后单](/api/order-post-sales) 与 [删除售后单](/api/order-post-sale-delete)。

从支付应用的退款回调发起退款是另一条链路——见 [处理退款](/docs/app/getting-started/create-payment-app/processing-refund)。

## 下一步

- [用 Webhook 监听订单事件](/docs/app/use-cases/orders-and-fulfillment/listen-for-order-events)（`orders/refunded`）
