# 更新区域仓库存数量

> 接口应在服务器端调用，不可在前端（小程序、网页、APP等）直接调用，具体可参考[接口调用指南](/doc/oplatform/developers/dev/guide.md)。

接口英文名：updatewarehousestock

通过该接口区域仓库可对区域仓库存数量进行更新操作。

## 1. 调用方式

### HTTPS 调用

```bash
POST https://api.weixin.qq.com/channels/ec/warehouse/stock/update?access_token=ACCESS_TOKEN
```

### 云调用

- 调用方法：channels.ec.warehouse.stock.update

- 出入参和 HTTPS 调用相同，调用方式可查看 [云调用](/doc/oplatform/developers/dev/cloudCall.md) 说明文档。

### 第三方调用

- 本接口支持第三方平台代微信小店商家调用。[第三方服务商调用模式介绍](/doc/store/shop/dev_before/third_party_platforms)

- 该接口所属的权限集 id 为：129

- 服务商获得其中之一权限集授权后，可通过使用 [authorizer_access_token](/doc/oplatform/developers/dev/AuthorizerAccessToken.md) 代微信小店商家进行调用，具体可查看 [第三方调用](/doc/oplatform/Third-party_Platforms/2.0/Before_Develop/call_interface.md) 说明文档。

## 2. 请求参数

### 查询参数 `Query String Parameters`

```json
[
  {
    "参数名": "access_token",
    "类型": "string",
    "必填": "是",
    "示例": "ACCESS_TOKEN",
    "说明": "接口调用凭证，可使用 [access_token](/doc/store/shop/API/apimgnt/common/api_getaccesstoken)（微信小店商家）、[authorizer_access_token](/doc/oplatform/openApi/ticket-token/api_getauthorizeraccesstoken.md)（服务商代调用）"
  }
]
```

### 请求体 `Request Payload`

```json
[
  {
    "参数名": "product_id",
    "类型": "string",
    "必填": "是",
    "说明": "商品ID"
  },
  {
    "参数名": "sku_id",
    "类型": "string",
    "必填": "是",
    "说明": "skuID"
  },
  {
    "参数名": "out_warehouse_id",
    "类型": "string",
    "必填": "是",
    "说明": "外部仓库ID"
  },
  {
    "参数名": "diff_type",
    "类型": "number",
    "必填": "是",
    "说明": "修改类型。1: 增加；2:减少；3:设置"
  },
  {
    "参数名": "num",
    "类型": "number",
    "必填": "是",
    "说明": "增加、减少或者设置的库存值"
  }
]
```

## 3. 返回参数

### 返回体 `Response Payload`

```json
[
  {
    "参数名": "errcode",
    "类型": "number",
    "说明": "错误码"
  },
  {
    "参数名": "errmsg",
    "类型": "string",
    "说明": "错误信息"
  }
]
```

## 4. 注意事项

下单匹配原则，按照地址从右往左进行匹配

![](https://res.wx.qq.com/op_res/lYLCs-m_Tm0eakCyntYgFAqoNIFWJXPCjRfYnxs2qYXrqRtXJjUblShaUWZOBJDgq47YdPgxGXjDkfJ94vYB3A)

### 4.1 用户侧

|用户下单地址|下单库存数量|
| --- | --- |
|(A0, B0, C0, 0) | 10 |

### 4.2 区域库存侧

当前下单sku区域仓集合`WH`如下

| 区域仓    |覆盖地址|库存数量|
| --- | --- | --- |
| wh1 | (A0, B0, C0, 0) | 40 |
| wh2 | (A0, B0, C0, 0) | 30 |
| wh3 | (A0, B0, 0, 0) | 20 |
| wh4 | (A0, B0, C0, D1) | 10 |
| wh5 | (A0, B0, C0, 0) | 5 |

### 4.3 匹配过程

#### 4.3.1 首先筛选`库存 >= 10`，集合`WH'`如下

| 区域仓    |覆盖地址|库存数量|
| --- | --- | --- |
| wh1 | (A0, B0, C0, 0) | 40 |
| wh2 | (A0, B0, C0, 0) | 30 |
| wh3 | (A0, B0, 0, 0) | 20 |
| wh4 | (A0, B0, C0, D1) | 10 |
| ~~wh5~~ | ~~(A0, B0, C0, 0)~~ | ~~5~~ |

##### 4.3.2 接着遍历用户地址和集合`WH'`，优先级从右往左：`D0->A0`
- 先匹配第四级地址：wh1，wh2，wh3通配；wh4不等于D0；
- 再匹配第三级地址：wh1，wh2匹配，符合条件，wh3通配；
- 再匹配第二级地址：wh3符合条件；
- wh1和wh2匹配度高于wh3（精准匹配高于通配）。

##### 4.3.3 最后集合`WH''`如下：

| 区域仓    |覆盖地址|库存数量|
| --- | --- | --- |
| wh1 | (A0, B0, C0, 0) | 40 |
| wh2 | (A0, B0, C0, 0) | 30 |
| ~~wh3~~ | ~~(A0, B0, 0, 0)~~ | ~~20~~ |
| ~~wh4~~ | ~~(A0, B0, C0, D1)~~ | ~~10~~ |
| ~~wh5~~ | ~~(A0, B0, C0, 0)~~ | ~~5~~ |

##### 4.3.4 取优先级最高的区域仓，假设`wh2`优先级大于`wh1`，则最后选择`wh2`。

> 优先级设置参考[设置指定地址下的仓的优先级](api_setaddressprioritysort)

## 5. 代码示例

请求示例

```json
{
    "product_id": "10000000666721",
    "sku_id": "577952001",
    "out_warehouse_id": "test1",
    "diff_type": 3,
    "num": 100
}

```

返回示例

```json
{
    "errcode": 0,
    "errmsg": "ok"
}

```

## 6. 错误码

以下是本接口的错误码列表，其他错误码可参考 [通用错误码](/doc/store/shop/dev_before/commErrCode)；调用接口遇到报错，可使用官方提供的 [API 诊断工具](https://developers.weixin.qq.com/console/devtools/debug?utm_source=api_errcode) 辅助定位和分析问题。

```json
[
  {
    "错误码": "10020052",
    "错误描述": "商品不存在"
  },
  {
    "错误码": "10020202",
    "错误描述": "out_warehouse_id不存在"
  },
  {
    "错误码": "10020204",
    "错误描述": "该sku设置区域仓数量超过限制"
  }
]
```

## 7. 适用范围

本接口支持「微信小店」账号类型调用。其他账号类型如无特殊说明，均不可调用。
