平台规则官方

小红书调整酒类商品保质期填写校验,按酒精度区分要求

小红书电商开放平台 · 2026-09-01

背景 根据食品标签标识监管要求,酒类商品需准确展示标签标识信息。现行 GB 7718-2011 规定,酒精度 ≥10%vol 的酒类可豁免标注保质期;酒精度<10%vol 时,保质期需从选填调整为必填。为支持接入方按酒精度动态处理保质期要求,开放平台新增类目属性单位透出能力,并扩展属性联动规则,支持基于数值大小触发必填、选填或隐藏状态。保健酒按保健食品要求,无论酒精度均需要标注保质期。 重要:规则按类目配置逐步生效。接入方必须使用叶子类目 ID 查询属性规则,并以接口实时返回结果为准。命中规则的商品在创建或更新时会执行服务端强校验,预计于 2026 年 9 月 7 日开启创建和更新的强校验。 食品属性、营养成分表等通用接入说明可参考:【重要】规范食品标签标识信息开放平台接入说明 概览 接入方需要完成以下改造: 调用 common.getAttributeLists 时传入叶子类目 ID,读取属性、可选单位、属性值校验规则和属性联动规则。 识别 attributeV3s[].units,引导商家选择合法单位;提交时将属性值和单位拼接到 attributeValue。 识别 conditionalRequiredRules[].conditions[].operate,支持 EQ、LT、LTE、GT、GTE 数值比较。 在创建、更新商品前执行同等校验,避免请求被服务端拦截。 1. 查询类目属性规则 接口:common.getAttributeLists 该接口用于按类目查询可填写属性,并返回属性单位、属性值校验规则和属性联动规则。调用时必须传入叶子类目 categoryId。 1.1 属性可选单位:attributeV3s[].units 字段类型说明 unitsList<String>当前类目属性允许使用的单位列表。为空时表示该属性没有单位要求;非空时,需从列表中选择单位。 例如酒精度属性返回 ["%vol"],表示商家填写酒精度时必须使用 %vol。 提交要求:对于返回了可选单位的属性,单位必须拼接在 attributeValue 末尾,例如 9%vol。仅提交 9 会被判定为缺少单位。 1.2 属性值校验:propertyValueValidateRules propertyValueValidateRules 用于描述属性值格式。返回空数组时,表示当前类目暂无额外属性值校验规则。 字段类型说明 propertyNameString规则生效的属性名称。 regexString属性值校验正则,Java 正则格式。 messageString校验失败时可展示给商家的提示文案。 当属性同时返回 units 和正则规则时,接入方应先识别并移除合法单位,再使用剩余的属性值匹配 regex。例如 9%vol 先识别单位 %vol,再使用 9 匹配酒精度正则。 1.3 属性联动条件:conditionalRequiredRules[].conditions[] 字段类型说明 propertyNameString触发条件对应的属性名称。 valuesList<String>未返回 operate 时为待匹配的属性值列表;返回数值运算符时,取第一项作为比较阈值,阈值不包含单位。 operateString可选。数值比较运算符:EQ、LT、LTE、GT、GTE。未返回时沿用原有文本匹配逻辑。 operate 枚举说明 operate含义判断方式示例(values[0] = 10) EQ等于商品值 = 阈值10、10.0 命中 LT小于商品值 < 阈值9.5 命中,10 不命中 LTE小于等于商品值 ≤ 阈值9.5、10 命中 GT大于商品值 > 阈值10.1 命中,10 不命中 GTE大于等于商品值 ≥ 阈值10、10.1 命中 匹配规则: 一条联动规则内的多个 conditions 为 AND 关系,需要全部满足才触发。 operate 未返回时,商家填写值命中 values 中任一文本即满足该条件。 operate 为 EQ/LT/LTE/GT/GTE 时,仅使用 values[0] 作为数值阈值。 规则触发后,按 requiredPropertyNames、optionalPropertyNames、hiddenPropertyNames 调整属性状态;未被规则涉及的属性继续使用 attributeV3s[].isRequired。 2. 【酒精度】规则示例 以下示例表示:酒精度使用 %vol,取值范围为大于 0 且不超过 96、最多两位小数;当酒精度小于 10 时,保质期必填。 { "attributeV3s": [ { "attributeId": "6a85940d8791a5000191abb4", "attributeName": "酒精度", "isRequired": true, "units": ["%vol"] } ], "propertyValueValidateRules": [ { "propertyName": "酒精度", "regex": "^(?:0\\.(?:0[1-9]|[1-9]\\d?)|(?:[1-9]|[1-8]\\d|9[0-5])(?:\\.\\d{1,2})?|96(?:\\.0{1,2})?)$", "message": "酒精度需填写大于0且不超过96的数字,最多保留2位小数" } ], "conditionalRequiredRules": [ { "conditions": [ { "propertyName": "酒精度", "values": ["10"], "operate": "LT" } ], "requiredPropertyNames": ["保质期"], "optionalPropertyNames": [], "hiddenPropertyNames": [] } ] }解释: 商家填写 9%vol:单位合法,数值部分为 9,满足 LT 10,因此保质期必填。 商家填写 10%vol:数值部分为 10,不满足 LT 10,该联动规则不触发;保质期是否必填继续以其他规则及属性原始必填状态为准。 商家填写 100%vol:单位合法,但数值超过 96,不满足属性值正则,发品会被拦截。 商家填写 9:缺少 %vol,发品会被拦截。 3. 创建和更新商品 以下接口会根据类目最新配置校验属性单位、属性值格式、属性原始必填状态和属性联动规则: product.createItemAndSku product.updateItemAndSku attributes[].attributeValue 填写方式 场景示例是否通过说明 合法酒精度9%vol通过数值合法且携带接口返回的单位。 缺少单位9不通过属性返回了 units,提交值必须携带合法单位。 单位不匹配9度不通过单位不在当前属性的 units 列表中。 超过最大值100%vol不通过移除单位后的数值不满足 regex。 小数位过多9.123%vol不通过酒精度最多保留两位小数。 发品请求示例 { "categoryId": "类目ID", "attributes": [ { "attributeId": "6a85940d8791a5000191abb4", "attributeName": "酒精度", "attributeValueType": 0, "attributeValue": "9%vol" }, { "attributeId": "保质期属性ID", "attributeName": "保质期", "attributeValueType": 0, "attributeValue": "12个月" } ] }编辑存量商品时同样按当前类目最新规则校验。如果历史属性值缺少单位,或命中联动规则后缺少必填属性,需要补充完整后才能提交。 4.常见错误及处理建议 错误码示例提示处理建议 60115酒精度属性缺少单位,可选单位列表为[%vol]重新调用 common.getAttributeLists 获取 units,并将合法单位拼接在 attributeValue 末尾。 60121酒精度需填写大于0且不超过96的数字,最多保留2位小数移除单位后检查属性值是否满足 propertyValueValidateRules.regex。 60185根据已填写的属性,保质期为必填项,请补充填写重新计算 conditionalRequiredRules;补充命中规则后的必填属性。 5. 兼容性说明 operate 是可选字段。未返回时必须保持原有 values 文本匹配逻辑,不能按数值比较。 units 为空时不新增单位要求;非空时才需要按返回列表选择并提交单位。 LT、LTE、GT、GTE、EQ 规则只读取 values[0] 作为阈值。 接口字段为 operate,运算符枚举使用 LTE/GTE,不使用 LE/GE。 规则会随类目运营配置动态调整,不应在接入方代码中写死类目 ID、阈值、单位或必填属性。 6. 常见问题 Q&A Q1:怎么判断某个属性是否需要填写单位? 读取 attributeV3s[].units。为空时无单位要求;非空时必须从列表中选择,并将单位拼接在 attributeValue 末尾。 Q2:regex 校验的是 9 还是 9%vol? 校验数值部分。接入方应先根据 units 识别并移除合法单位,再用剩余值匹配 propertyValueValidateRules.regex。 Q3:为什么 9%vol 会要求填写保质期? 示例规则为 operate=LT、values[0]=10。9 小于 10,规则触发,因此 requiredPropertyNames 中的保质期变为必填。 Q4:10%vol 会命中 LT 10 吗? 不会。LT 是严格小于;如果规则配置为 LTE,10 才会命中。 Q5:EQ 比较时 10 和 10.0 是否相等? 相等。数值比较按十进制数值语义执行,不按字符串格式比较。 Q6:operate 没有返回怎么办? 保持历史逻辑:当前属性值命中 values 中任一文本时,该条件满足。 Q7:一条规则有多个 conditions,满足一个就触发吗? 不是。多个 conditions 为 AND 关系,全部满足才触发该规则。 Q8:规则没有提到的原必填属性还需要填吗? 需要。联动规则只调整其明确列出的属性;其他属性继续使用 attributeV3s[].isRequired 和其他平台规则。 Q9:可以缓存类目规则吗? 可以做短期缓存,但规则可能动态调整。发品前应确保使用当前叶子类目的最新规则,并设计合理的刷新机制。

RedNews放进你的手机主屏幕

像 App 一样,
随手刷小红书新闻

添加后,点主屏幕图标就能打开资讯和日报,不用每次找网址。用 Safari,跟着下面 3 步添加。

  1. 找到 Safari 的“分享”

    点地址栏旁的 按钮。若只看到“···”,先点它,再点“分享”。

  2. 下滑,点“添加到主屏幕”

    在弹出的分享菜单里向下滑动,找到这一项。

  3. 确认“添加”,就可以了

    若有“作为网页 App 打开”,保持开启,再点右上角的“添加”。

    回到手机主屏幕,点 RedNews 图标,开始读新闻。

没找到“添加到主屏幕”?

继续滑到分享菜单底部,点“编辑操作”,把“添加到主屏幕”加回来,再按上面的步骤操作。