设置用户自定义限额(0 = 未自设,落到产品上限)
代会员调用 · 必带
x-on-behalf-of
⚠ 0 的语义是「这一层不设限」,不是「一分都不许刷」。
新卡三项恒为 0,此时生效值落到产品级 max_*。把 0 写成 0 是无操作,
想收紧就填一个正数。
⚠ 不足一个货币单位的限额一律拒(USD 卡填 "0.5" 会被拒)。
上游那三个字段是整数,而 0 在它那边意味着「不限」—— 悄悄取整的结果是
「用户把限额往严里拧,实际效果是彻底放开」,方向正好相反。
三层之间必须自洽:单笔 ≤ 日 ≤ 月(0 不参与比较)。不校验的话用户能存下
「单笔 5000 / 日 100」,然后在收银台被拒付且看不出是哪一层拒的。
⚠ 200 只表示「我方已记下」。 限额是异步推给上游的,且**只许往严的
方向落地**(调低成功了才记,调高失败了保持原值)。别把 200 当成
「上游已生效」。
省略某一项 = 保持原值(不是清零)。
前置条件
- 卡不在
closed/closing/expired - 每一项不超过产品级
max_*
路径参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
string | 必填 | 卡 id |
请求头
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
x-on-behalf-of |
string | 必填 | 代哪个会员调用 |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
single |
string | 可选 | 单笔限额,卡本币十进制串。省略 = 保持原值;"0" = 不设限。USD:"500.00" |
daily |
string | 可选 | 单日限额。必须 ≥ single(两者都非 0 时)。 |
monthly |
string | 可选 | 单月限额。必须 ≥ daily(两者都非 0 时)。 |
响应
200我方已记下,正在异步下发上游
{
"id": "crd_9f2c1b7a-3d51-4a2e-9c08-6b1f0d4e77aa",
"accepted": true
}400
state_invalid 卡已注销/过期 · product_not_available 产品不可用 ·
invalid_fields 超过产品上限 / 三层不自洽 / 不足一个货币单位
⚠ 这一条的 invalid_fields 目前不带 fields 数组(其余端点带)。
三种情况共用这一个码,你只能提示「限额不合法」而说不出是哪一项。
⚠ 金额串本身非法("abc"、小数位超过 card_scale)
目前以 500 api_error 返回。发之前自己校验一遍形状。404
not_found 卡不存在或不在这个会员名下请求
curl -X PATCH 'https://api.zise.com/v1/cards/{id}/limits' \
-H 'x-auth-token: Bearer $TOKEN' \
-H 'x-on-behalf-of: $MEMBER_ID' \
-H 'content-type: application/json' \
-d '{
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
}'const res = await fetch("https://api.zise.com/v1/cards/{id}/limits", {
method: "PATCH",
headers: {
"x-auth-token": "Bearer $TOKEN",
"x-on-behalf-of": "$MEMBER_ID",
"content-type": "application/json",
},
body: JSON.stringify({
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
}),
});
// 金额按字符串读,别让它变成 number
const data = await res.json();import requests
res = requests.patch(
"https://api.zise.com/v1/cards/{id}/limits",
headers={
"x-auth-token": "Bearer $TOKEN",
"x-on-behalf-of": "$MEMBER_ID",
"content-type": "application/json",
},
json={
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
},
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()req, _ := http.NewRequest("PATCH", "https://api.zise.com/v1/cards/{id}/limits",
strings.NewReader(`{
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
}`))
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("x-on-behalf-of", "$MEMBER_ID")
req.Header.Set("content-type", "application/json")
res, err := http.DefaultClient.Do(req)
// 金额字段用 string 接,不要 float64HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.zise.com/v1/cards/{id}/limits"))
.header("x-auth-token", "Bearer $TOKEN")
.header("x-on-behalf-of", "$MEMBER_ID")
.header("content-type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("""
{
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
}
"""))
.build();
// 金额字段用 String / BigDecimal,不要 double$ch = curl_init('https://api.zise.com/v1/cards/{id}/limits');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-auth-token: Bearer $TOKEN',
'x-on-behalf-of: $MEMBER_ID',
'content-type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"single": "500.00",
"daily": "2000.00",
"monthly": "10000.00"
}
JSON,
]);
$res = curl_exec($ch);
// 金额用 bcmath / 字符串,不要 floatval
200
{
"id": "crd_9f2c1b7a-3d51-4a2e-9c08-6b1f0d4e77aa",
"accepted": true
}