## 获取预提交订单表单数据集合(orderBuild) >[info] 场景说明:获取通过购物车商品、搭配套餐商品进行结算的订单复合数据,包含收货人地址、配送方式及运费、订单商品、订单优惠策略、可用优惠券列表、可用积分策略等。当购物车商品归属于多个卖家时,以卖家ID来归类返回数据。 ### 是否需要获取用户TOKEN `是` ***** ### 请求地址 ``` POST http://api.xxx.com/order/build ``` ### 公共请求参数 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | appid | string | 必须 | 平台提供的唯一APPID | | version | string | 必须 | 接口版本号,固定填:v3 | | sign\_type | string | 必须 | 签名类型,目前只支持md5 | | timestamp | string | 必须 | 发起时间戳,格式为:yyyy-mm-dd hh::ii::ss | | format | string | 必须 | 返回的数据格式,只支持json | | sign | string | 必须 | 请求参数的签名,请参考:[签名规则](signature.md) | | token | string | 必须 | 用户TOKEN | | params | string | 必须 | 请求参数的集合,除公共参数外,所有请求参数都必须放在这个参数中传递,json\_encode后送入 | 应用请求参数`params`格式 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | otype | string | 必须 | 订单类型,取值:"normal"=普通订单、"meal"=搭配购订单、"teambuy"=拼团订单、"guidebuy"=社区团购订单。普通订单即从购物车取出商品来结算 | | store\_id | integer | 可选 | 店铺ID,如果传值只结算该店铺的商品,当otype="normal"时有效 | | specs | json | 可选 | 购买的商品SKUID组合,格式如:JSON.stringify(\[{spec\_id1: quantity1},{spec\_id2: quantity2}\]),当otype="meal" 和 otype="localbuy" 时有效 | | \+ extraParams | array | 可选 | 其他参数 | | └ meal\_id | integer | 可选 | 搭配购活动ID,当otype="meal"时必须 | | └ spec\_id | integer | 可选 | 商品SKUID,当otype="teambuy"时必须 | | └ quantity | integer | 可选 | 购买数量,当otype="teambuy"时必须 | ### 请求示例 ``` { "appid": "您的APPID", "version": "v3", "sign_type": "md5", "timestamp": "2020-8-10 12:00:00", "format": "json", "sign": "op0987yhjmngt54rtg2wgdfvcder2765", "params": { "otype": "normal" } } ``` ***** ### 公共返回参数 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | code | integer | 必须 | 0=成功,其它值代表请求失败的错误代码,请参考:[公共错误码](response-code.md) | | message | string | 必须 | 请求成功/失败的描述信息 | | \+ data | array | 必须 | 返回结果,如果没有指定用返回空 | | └ list | array | 必须 | 商品数据集合 | | └ my\_address | list | 必须 | 收货地址列表,注意:索引值为地址ID,非从0开始 | | └ shipping\_methods | list | 必须 | 配送方式,注意:索引值为店铺ID,非从0开始 | 返回`data->list`参数格式 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | amount | decimal | 必须 | 所有商品价格总额(未减掉满减满折优惠、优惠券优惠、积分抵扣) | | \+ orderList | list | 必须 | 订单按店铺归类数据列表,注意:索引值为店铺ID,非从0开始 | | └+ items | list | 必须 | 购买商品列表信息 | | <span>   </span>└ rec\_id | integer | 必须 | 记录ID | | <span>   </span>└ spec\_id | integer | 必须 | 商品SKUID | | <span>   </span>└ goods\_id | integer | 必须 | 商品ID | | <span>   </span>└ goods\_name | string | 必须 | 商品名称 | | <span>   </span>└ goods\_image | string | 必须 | 商品图片 | | <span>   </span>└ specification | string | 可选 | 商品规格组合 | | <span>   </span>└ price | decimal | 必须 | 购买价格 | | <span>   </span>└ quantity | integer | 必须 | 购买数量 | | <span>   </span>└ subtotal | decimal | 必须 | 价格小计 | | <span>   </span>└ stock | integer | 必须 | 该规格库存量 | | <span>   </span>└ spec\_1 | string | 可选 | 规格1的值 | | <span>   </span>└ spec\_2 | string | 可选 | 规格2的值 | | <span>   </span>└ userid | integer | 必须 | 买家ID | | <span>   </span>└ store\_id | integer | 必须 | 卖家ID | | <span>   </span>└ product\_id | string | 可选 | 购物车商品编号,otype=normal时才有值 | | └ amount | decimal | 必须 | 购买该卖家的商品价格总额(未减任何优惠策略) | | └ quantity | integer | 必须 | 购买该卖家的商品数量 | | └ store\_id | integer | 必须 | 该卖家店铺ID | | └ store\_name | string | 必须 | 该卖家店铺名称 | | └ sgrade\_id | integer | 必须 | 该卖家店铺等级 | | └ im\_qq | string | 可选 | 该卖家联系QQ | | └ allow\_coupon | integer | 必须 | 该店铺是否支持使用优惠券,1=支持、0=不支持 | | └+ coupon\_list | list | 可选 | 优惠券列表,当allow\_coupon=1时有效 | | <span>   </span>└ coupon\_sn | string | 必须 | 优惠券编号 | | <span>   </span>└ coupon\_value | decimal | 必须 | 优惠券价格 | | <span>   </span>└ coupon\_name | string | 必须 | 优惠券名称 | | └+ fullprefer | array | 可选 | 该店铺满折满减优惠 | | <span>   </span>└ text | string | 必须 | 满优惠文本信息 | | <span>   </span>└ price | decimal | 必须 | 优惠价格 | | storeIds | string\[\] | | 当前购买商品有多少个卖家,如:\[店铺ID1,店铺ID2\] | | gtype | string | 必须 | 商品类型,目前只有值="material" 代表实物商品 | | otype | string | 必须 | 订单类型,目前有:"normal"=普通订单、"meal"=搭配购订单、"teambuy"=拼团订单、"guidebuy"=社区团购订单 | | allow\_integral | integer | 必须 | 是否支持积分抵扣,1=支持、0=不支持 | | \+ integralExchange | array | 可选 | 积分抵扣策略,当:allow\_integral=1是有值 | | └ maxPoints | integer | 必须 | 允许使用的积分最大值 | | └ userIntegral | integer | 必须 | 买家可用积分值 | | └ getPoints | integer | 必须 | 购买后可获得的的积分值 | | └ rate | decimal | 必须 | 积分兑换比率 | | └+ orderIntegral | array | 必须 | 每个订单积分抵扣数组 | | <span>   </span>└ totalPoints | integer | 必须 | 所有订单可抵扣的积分总额 | | <span>   </span>└ items | object | 必须 | 每个订单分别允许抵扣的积分值,如:{店铺ID1:可抵扣积分值1,店铺ID2:可抵扣的积分值2} | 返回`data->my_address`参数格式 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | addr\_id | integer | 必须 | 地址ID | | consignee | string | 必须 | 收件人姓名 | | region\_id | integer | 必须 | 收件人地址末级地区ID | | province | string | 必须 | 省 | | city | string | 必须 | 市 | | district | string | 必须 | 区 | | address | string | 必须 | 详细地址(不含省市区) | | zipcode | string | 可选 | 邮政编码 | | phone\_tel | string | 可选 | 联系人电话 | | phone\_mob | string | 必须 | 联系人手机号 | | defaddr | integer | 必须 | 是否默认地址,1=是、0=否 | | userid | integer | 必须 | 用户ID | 返回`data->shipping_methods`参数格式 | 字段 | 类型 | 是否必填 | 描述 | | --- | --- | --- | --- | | \+ express | array | 必须 | 物流信息数组 | | └ logistic\_fees | decimal | 必须 | 运费 | | └ type | string | 必须 | 取值:express | | └ name | string | 必须 | 物流标题 | | └ start\_standards | integer | 必须 | 首费多少件 | | └ start\_fees | decimal | 必须 | 首费金额 | | └ add\_standards | integer | 必须 | 续费多少件 | | └ add\_fees | decimal | 必须 | 续费金额 | | \+ ems | array | 必须 | 物流信息数组 | | └ logistic\_fees | decimal | 必须 | 运费 | | └ type | string | 必须 | 取值:ems | | └ name | string | 必须 | 物流标题 | | └ start\_standards | integer | 必须 | 首费多少件 | | └ start\_fees | decimal | 必须 | 首费金额 | | └ add\_standards | integer | 必须 | 续费多少件 | | └ add\_fees | decimal | 必须 | 续费金额 | | \+ post | array | 必须 | 物流信息数组 | | └ logistic\_fees | decimal | 必须 | 运费 | | └ type | string | 必须 | 取值:post | | └ name | string | 必须 | 物流标题 | | └ start\_standards | integer | 必须 | 首费多少件 | | └ start\_fees | decimal | 必须 | 首费金额 | | └ add\_standards | integer | 必须 | 续费多少件 | | └ add\_fees | decimal | 必须 | 续费金额 | >[info] 注意:shipping\_methods数组会包括多个店家,多个配送地址的数据,如:{店铺ID:\[{配送地址ID:{"express":{...}}}\]},每个配送地址都会有如上表所示的参数格式,这样可以方便前端根据业务逻辑实现切换收货地址后,改变运费的效果。这里的配送地址ID不是addr\_id,而是region\_id 即每个配送目的地对应一条记录,如果每个收货地址的配送地址(region\_id)一样,那么只有一条记录。 ### 返回数据示例 ``` { "code": 0, "message": "成功", "data": { "list": { "amount": 2687.60, "orderList": [ 2: { "items": [ { "rec_id": 1, "spec_id": 2, "goods_id": 4, .... "subtotal": 1777.60 } ], "amount": 2597.60, "quantity: 5, "store_id": 2, "store_name":"演示店铺", "allow_coupon": 1, "coupon_list": [ { "coupon_sn": 02660099, "coupon_value": 10.00, "coupon_name": "双十一优惠券" }, ... ] }, 4: { "items: [ { "rec_id": 16, "spec_id": 16, "goods_id": 18, ... } ], "amount": 90.00, "quantty": 1, "store_id": 4, "store_name": "华为旗舰店", "allow_coupon": 0, "fullprefer": { "text": "购满50元,享8折", "price": 18.00 } } ], "storeIds":[2,4], "otype": "normal", "gtype": "material", "allow_integral": 1, "integralExchange": { "maxPoints": 1690, ... "orderIntegral": { "totalPoints": 1690, "items": { 2: 1600, 4: 90 } } } }, "my_address": [ { "addr_id": 1, "consignee": "牛人不怕虎", "region_id": 477, ... } ], "shipping_methods": { 2: [ 477:{ "express": { "logistic_fees": 10.00, "region_id": 477 ... }, "ems": { "logistic_fees": 14.00, "region_id": 477 ... }, "post": { "logistic_fees": 5.00, "region_id": 477 ... } }, ...(每个配送地址region_id对应一个list,并非每个收货地址对一个) ], 4: [ // 每个卖家一个list ...(每个配送地址一个list) ] } } } ```