在合计接口请求参数中的extra(Map类型)字段添加一个标志:calculateMode,用来区分是普通合计,还是营销合计。只有营销合计才会触发换购和赠品计算。
在合计接口中新增promotions字段,返回命中的赠品和换购商品。
{ "traceId":"19091874165841038811136", "retCode":"0", "data":{ "discountFee":"0", "totalFee":"2177", "actualFee":"2177", "items":[ { "actualFee":2177, "barcode":"2021965000000", "discountFee":0, "extra":"", "isWeight":true, "isvSkuCode":"0202074001", "name":"爱森猪肝", "picUrl":"", "price":11962, "promotionPrice":11962, "quantity":1, "rowNo":"74165811871625216", "sellStatus":true, "totalFee":2177, "unit":"", "weight":"0.182", "saleType":0 } ], "promotions":{ "promotionGoods":[ { "barcode":"2021965000000", "extra":"", "isWeight":true, "isvSkuCode":"0202074001", "name":"血吼之斧", "picUrl":"https://pic.tabao.com", "price":11962, "promotionPrice":0, "maxQuantity":1, "rowNo":"74165811871625216", "unit":"柄", "weight":"0.182", "saleType":1 }, { "barcode":"2021965000000", "extra":"", "isWeight":false, "isvSkuCode":"0202074001", "name":"埃辛诺斯战刃", "picUrl":"https://pic.tabao.com", "price":119620, "promotionPrice":100, "maxQuantity":1, "rowNo":"74165811871625216", "unit":"把", "weight":"", "saleType":2 } ], "maxTotalQuantity":1, "promotionMode":"single", "activityId":"12345678", "title":"您可享受换购和买赠活动" } }, "retMsg":"success" }
items字段返回购物车商品列表。如果添加了优惠商品,购物车商品对象必须返回saleType(0 - 正常商品,1 - 赠品,2 - 换购商品),用以区分购物车中的普通商品和优惠商品。
promotionGoods字段返回优惠商品列表。
新增优惠商品对象。一些字段说明一下:
目前只有两个条件:
新增一个接口:cancelsubtotal。
参数 |
参数名称 |
类型 |
必须 |
参数说明 |
|
tradeFlowNo |
交易流水号 |
String |
Y |
交易流水号/购物车ID |
|
userId |
会员ID |
String |
N |
||
userType |
会员类型 |
String |
N |
|
|
extra |
额外信息 |
String |
N |
备用 |
参数 |
参数名称 |
类型 |
参数说明 |
||
data |
JSON Object |
||||
|
totalFee |
合计总金额 |
long |
单位:分 |
|
|
discountFee |
折扣总金额 |
long |
单位:分 |
|
|
actualFee |
折扣后实际总金额 |
long |
单位:分 |
|
|
items |
商品列表 |
JSON Array |
List<Commodity> |
对不同的ISV,接口入参和返回数据必须一致,但是ISV可根据自己的实际情况和需求,赋予接口不同的含义。
ISV的需求 |
ISV在cancelsubtotal中接口实现的特殊含义 |
说明 |
ISV需要合计中返回赠品和换购品 |
cancelsubtotal删除购物车中的赠品和换购品,返回新的合计金额和商品列表。 |
本次需求需要实现 |
ISV需要合计后锁定购物车 |
cancelsubtotal解锁购物车 |
|
ISV对合计接口无特殊需求 |
cancelsubtotal只返回购物车数据,不做特殊处理 |
|
对于赠品和换购品的批量加购,复用现在的批量加购接口 - buycommodities。ISV要确保buycommodities接口能兼容赠品和换购品。
buycommodities接口做相应修改,适配通用优惠方案:
参数 |
参数名称 |
类型 |
必须 |
参数说明 |
|
tradeFlowNo |
交易流水号 |
String |
Y |
交易流水号/购物车ID |
|
data |
商品列表 |
JSON Array |
Y |
接口单次上限支持100行 |
|
rowNo |
商品行号 |
String |
Y |
rowNo == "-1":代表新加购商品,需要商品查询。 rowNo != "-1":代表已在购物车商品,按行号更新数量。 |
|
|
barcode |
商品条码 |
String |
Y |
|
quantity |
商品数量 |
String |
Y |
商品数量。 当商品数量为 0 时,删除该商品行。 |
|
|
isvSkuCode |
商品编码 |
String |
N |
ISV商品编码。为了保持rowNo字段含义清晰,代替rowNo传给服务端。 |
extra |
Map |
N |
activityId,活动id |
参数 |
参数名称 |
类型 |
参数说明 |
|
data |
JSON Object |
|||
totalFee |
合计总金额 |
long |
单位:分 |
|
discountFee |
折扣总金额 |
long |
单位:分 |
|
actualFee |
折扣后实际总金额 |
long |
单位:分 |
|
items |
商品列表 |
JSON Array |
List<Commodity> |
对于不参加优惠活动,接口request中不传商品列表参数,但是接口response仍然要正常返回数据。
由于小票上优惠商品要显示“换购”和“赠品”的标,所以小票接口返回的商品必须带有saleType字段表明商品类型。
saleType |
商品销售类型
|
int |
0 - 正常商品, 1 - 赠品, 2 - 换购商品 |
{ "actualFee":2177, "barcode":"2021965000000", "discountFee":0, "extra":"", "isWeight":true, "isvSkuCode":"0202074001", "name":"爱森猪肝", "picUrl":"", "price":11962, "promotionPrice":11962, "quantity":1, "rowNo":"74165811871625216", "sellStatus":true, "totalFee":2177, "unit":"", "weight":"0.182", "saleType":0 }
小票上要展示本次优惠活动说明,可按把文案放到小票接口的extra字段中。具体可参考《Rex轻POS对接方案》5.12部分。
extra字段说明:
extra |
额外信息
|
String |
商家营销,备注等文案。 可通过 '\n' 换行符,在小票上换行打印文案。 |