REST API · Beta

API 文档

将 Wallmarkets 集成到您的应用程序中。以编程方式管理送货、退货、产品和超市。

API 处于测试阶段。端点和响应格式可能会发生变化。请将您的集成锁定到特定的 API 版本,以免出现意外。

导言

wallmarkets API 可让您以编程方式管理送货、退货、产品和超市账户。所有端点都返回 JSON 格式,需要通过 API 密钥进行验证。

基本 URL

https://www.wallmarkets.store/api/v1

回复格式

每个响应都包含一个状态字段和一个数据有效载荷(或在失败时包含一个错误对象)。

{
  "status": "success",
  "data": { ... }
}

认证

在授权标头中加入 API 密钥作为承载器令牌,对每个请求进行验证。

生成应用程序接口密钥

账户设置 > API 密钥中创建密钥。每个密钥支持

  • 瞄准镜: 限制对每个资源的访问(例如,交货:读取退货:写入产品:读取)
  • 到期日: 可选择过期日期--过期密钥将被自动拒绝
  • 旋转: 在不更改密钥 ID 的情况下,旋转密钥以获取新密码
密钥在服务器端散列(SHA-256)。创建密钥后请立即复制,否则将无法再次查看。

验证标头

Authorization: Bearer YOUR_API_KEY

申请示例

curl -X GET \
  https://www.wallmarkets.store/api/v1/deliveries \
  -H 'Authorization: Bearer wm_live_abc123...'

速率限制

费率限制可保护服务的稳定性。限额因计划而异:

各计划的限额

API 计划 每小时请求限制 每分钟突发限制
免费 60 requests/hour 10 requests/minute
专业 1,000 requests/hour 60 requests/minute
商业版 10,000 requests/hour 300 requests/minute

速率限制标头

每个响应都包括这些标头:

  • X-RateLimit-Limit: 每小时最大请求数
  • X-RateLimit-Remaining: 当前窗口中剩余的请求
  • X-RateLimit-Reset: 窗口重置时的 UTC 时区秒数

交付 API

所需范围: deliveries:read / deliveries:write

送货清单

GET /api/v1/deliveries

返回已验证用户的分页交付列表。

# Query Parameters
?page=1&per_page=20&status=pending&date_from=2024-01-01&supermarket_id=5

获取快递

GET /api/v1/deliveries/{delivery_id}
{
  "id": 123,
  "supermarket_name": "E-mart",
  "subchain_name": "Sukhbaatar Branch",
  "products": [
    {"product_id": 8, "name": "Product A", "quantity": 10, "unit_price": 5000},
    {"product_id": 15, "name": "Product B", "quantity": 5, "unit_price": 12000}
  ],
  "total_value": 110000,
  "delivery_date": "2024-10-15",
  "status": "completed",
  "created_at": "2024-10-01T10:30:00Z"
}

创建交付

POST /api/v1/deliveries
{
  "supermarket_id": 5,
  "subchain_id": 12,
  "products": [
    {"product_id": 8, "quantity": 10},
    {"product_id": 15, "quantity": 5}
  ],
  "delivery_date": "2024-10-20",
  "notes": "Urgent delivery"
}

更新交付状态

PATCH /api/v1/deliveries/{delivery_id}
{
  "status": "completed"
}

有效转换:待处理 → 正在处理 → 已完成,或待处理 → 已取消。

返回应用程序接口

所需范围: returns:read / returns:write

列表返回

GET /api/v1/returns

返回分页列表。按配送、超市、原因或日期范围进行筛选。

# Query Parameters
?page=1&per_page=20&reason=damaged&delivery_id=123

创建返回

POST /api/v1/returns
{
  "delivery_id": 123,
  "product_id": 8,
  "quantity": 3,
  "reason": "damaged",
  "return_date": "2024-10-18",
  "description": "Products arrived damaged during transit"
}

获取回报

GET /api/v1/returns/{return_id}
{
  "id": 42,
  "delivery_id": 123,
  "product_id": 8,
  "product_name": "Product A",
  "quantity": 3,
  "reason": "damaged",
  "description": "Products arrived damaged during transit",
  "return_date": "2024-10-18",
  "credit_amount": 15000,
  "created_at": "2024-10-18T09:15:00Z"
}

产品应用程序接口

所需范围: products:read / products:write

产品列表

GET /api/v1/products

返回已验证用户的所有产品。按类别筛选或按名称搜索。

# Query Parameters
?page=1&per_page=50&category=Dairy&search=milk

获取产品

GET /api/v1/products/{product_id}
{
  "id": 8,
  "sequential_id": "P-0008",
  "name": "Whole Milk 1L",
  "weight": 1.05,
  "price": 5000,
  "category": "Dairy",
  "created_at": "2024-08-01T12:00:00Z"
}

创建产品

POST /api/v1/products
{
  "name": "Whole Milk 1L",
  "weight": 1.05,
  "price": 5000,
  "category": "Dairy"
}

会自动分配一个唯一的序列 ID。

更新产品

PATCH /api/v1/products/{product_id}
{
  "price": 5500
}

只有您包含的字段会被更新。历史交货记录不受影响。

超市应用程序接口

所需范围: supermarkets:read / supermarkets:write

超市名单

GET /api/v1/supermarkets
[
  {
    "id": 5,
    "name": "E-mart",
    "branches": [
      {"id": 12, "name": "Sukhbaatar Branch", "address": "..."},
      {"id": 13, "name": "Bayangol Branch", "address": "..."}
    ]
  }
]

获取超市

GET /api/v1/supermarkets/{supermarket_id}

返回超市详细信息,包括所有分店、送货窗口和联系信息。

创建超市

POST /api/v1/supermarkets
{
  "name": "E-mart",
  "contact_email": "buyer@emart.mn",
  "branches": [
    {
      "name": "Sukhbaatar Branch",
      "address": "Peace Avenue 15, UB",
      "delivery_window": "08:00-12:00"
    }
  ]
}

网络钩子

订阅 Webhooks 可在事件发生时接收实时 HTTP 回调。网络钩子会在连续 10 次发送失败后自动停用。

活动类型

Webhook 事件 回调含义
delivery.created 创建了一个新的交付系统
delivery.in_transit 已发送快递
delivery.completed 一项交付被标记为已完成
delivery.cancelled 交货被取消
return.created 处理了新的退货
product.created 新增产品
product.updated 产品被修改

Webhook 有效负载示例

{
  "event": "delivery.completed",
  "timestamp": "2024-10-15T14:30:00Z",
  "data": {
    "delivery_id": 123,
    "supermarket_name": "E-mart",
    "subchain_name": "Sukhbaatar Branch",
    "total_value": 110000,
    "completed_at": "2024-10-15T14:30:00Z"
  }
}

重试政策

失败的交付会以指数级延迟(1 分钟、5 分钟、30 分钟)重试。连续 10 次失败后,订阅将自动停用。请在 webhook 设置中重新启用。

错误处理

HTTP 状态代码

HTTP 状态码 响应状态 开发者含义
200 OK 请求成功
201 Created 资源创建成功
400 Bad Request 参数无效或缺失
401 Unauthorized 缺少、无效或过期的 API 密钥
403 Forbidden 关键字缺乏该端点所需的范围
404 Not Found 资源不存在或不属于您
429 Too Many Requests 超过速率限制 - 检查 X-RateLimit-Reset 标头
500 Internal Server Error 我们这边出了问题 - 重试或联系支持人员

错误响应格式

{
  "status": "error",
  "error": {
    "code": "validation_error",
    "message": "delivery_date must be in the future",
    "field": "delivery_date"
  }
}

准备好开始了吗?

生成您的 API 密钥,开始将 wallmarkets 集成到您的应用程序中。