365外围用手机注册吗

微盟接口对接记录

微盟接口对接记录

1.简介

微盟云-智慧商业生态平台

微盟商家 微盟

2.微盟接口

微盟商品、订单涉及到的接口有

查询类目 /category/queryChildrenCategory 查询规格值 ec/category/queryCategoryAttrInfo 获取配送方式 /goods/findDeliveryTypeList 获取运费模板 /goods/findFreightTemplateList 添加规格值 ec/category/addAttrValue 添加商品 ec/goods/addGoods 上传图片 ec/goodsImage/uploadImg 获取分组 ec/goodsClassify/queryClassifyInfoList 添加分组 ec/goodsClassify/addClassify 批量上下架 ec/goods/updateGoodsShelfStatus 查询订单列表 ec/order/queryOrderList 查询订单详情 ec/order/queryOrderDetail

微盟http请求方法

public JSONObject httpPostRaw(String url, JSONObject bodyJson, JSONObject headerMap)

{

// post请求返回结果

CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 获取DefaultHttpClient请求

HttpPost httpPost = new HttpPost(url);

try {

// 设置http头

httpPost.setHeader("Content-Type", "application/json"); // 默认json

if (null != headerMap && headerMap.size() > 0){

for (String name : headerMap.keySet())

{

httpPost.setHeader(name, headerMap.getString(name));

}

}

// 设置body

if(bodyJson != null){

StringEntity entity = new StringEntity(bodyJson.toJSONString(),"UTF-8");

entity.setContentEncoding("UTF-8");

entity.setContentType("application/json");

httpPost.setEntity(entity);

}

HttpResponse result = httpClient.execute(httpPost);

url = URLDecoder.decode(url, "UTF-8");

// 请求发送成功,并得到响应

try {

String str = EntityUtils.toString(result.getEntity());

return JSON.parseObject(str);

} catch (Exception e) {

logger.error("post请求提交失败:" + url, e);

}

} catch (IOException e) {

logger.error("post请求提交失败:" + url, e);

}

finally {

try {

httpClient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

public static void main(String[] args) {

HttpRequestUtils httpRequestUtil = new HttpRequestUtils();

String weiMengBaseUrl = "https://dopen.weimob.com";

String addAttrValue = "/api/1_0/ec/category/addAttrValue";

JSONObject bodyJson = new JSONObject();

bodyJson.put("categoryId", 44);

bodyJson.put("attrId", 53000);

JSONArray noExistJson = new JSONArray();

JSONObject tmp = new JSONObject();

tmp.put("value", "01白色");

noExistJson.add(tmp);

bodyJson.put("attrValueList", noExistJson);

JSONObject retJson = httpRequestUtil.httpPostRaw(weiMengBaseUrl + addAttrValue + "?accesstoken=87186ee0-b557-47f8-89d9-230cb3a1669f", bodyJson, null);

System.out.println(retJson.toJSONString());

}

添加商品

https://dopen.weimob.com/api/1_0/ec/goods/addGoods?accesstoken=a9dc920d-c488-4354-9c09-1c0d0463ceb5

传参:

{"goods":{"b2cGoods":{"b2cGoodsType":0,"deliveryTypeIdList":[3920196],"freightTemplateId":229050849},"categoryId":44,"deductStockType":1,"goodsDesc":"仙女裙","goodsImageUrl":["https://image-c.weimobwmc.com/openruntime/3ea7f5949c50488a8c436fa3073eea20.jpg"],"isMultiSku":1,"isPutAway":1,"selectedSaleAttrList":[{"attrValueList":[{"key":"148252623149"}],"attributeId":"53000"},{"attrValueList":[{"key":"148250430149"},{"key":"148250431149"}],"attributeId":"52000"}],"sellModelType":1,"skuList":[{"b2cSku":{"volume":"0.1","weight":"0.4"},"editStockNum":"0","outerSkuCode":"6018#","salePrice":"154.00","skuAttrMap":{"53000":{"name":"颜色","value":"40杏色","key":"148252623149"},"52000":{"name":"尺寸","value":"S","key":"148250430149"}}},{"b2cSku":{"volume":"0.1","weight":"0.4"},"editStockNum":"0","outerSkuCode":"6018#","salePrice":"154.00","skuAttrMap":{"53000":{"name":"颜色","value":"40杏色","key":"148252623149"},"52000":{"name":"尺寸","value":"M","key":"148250431149"}}}],"title":"6018#秋装新款可盐可甜亮片连衣裙网纱仙女裙性感晚礼服超仙"}}

返回数据:

{"globalTicket":"907260111855793408","code":{"errcode":"0","errmsg":"处理成功"},"data":{"result":true,"applyId":null,"skuList":[{"goodsId":null,"validateId":null,"imageUrl":null,"outerSkuCode":"6018#","storeId":null,"title":null,"skuId":2082944090149},{"goodsId":null,"validateId":null,"imageUrl":null,"outerSkuCode":"6018#","storeId":null,"title":null,"skuId":2082944100149}],"distributorId":null,"goodsId":1370590010149,"notDelDeliveryGoodsIds":null,"outerGoodsIdList":null,"deletedGoodsIds":null,"distributorResponse":null}}

3.获取微盟订单列表

获取微盟订单列表结构如下,pageList为订单数组。

itemList为商品列表,

商品中goodsCode为商品中的SPU编码,groupList为分组信息列表(可以在商品中进行设置,订单商品的这里也可以获取到,可用于区分不同平台商品)。

4.附录

应网友要求,把迭代生成微盟规格的方法放上来,供大家参考。

/**

* <一句话功能简述> 递归遍历所有规格的规格值,并生成微盟所需的saleStandard和skuList

* <功能详细描述>

* author: zhanggw

* 创建时间: 2021/12/15

* @param allStandardPriceArray json格式的所有规格

* [{

* "children": [{

* "children": [{

* "imgUrl": "",

* "isShow": true,

* "name": "中级",

* "price": 180,

* "specifications": "等级"

* }],

* "imgUrl": "",

* "isShow": true,

* "name": "S",

* "specifications": "尺码" * }],

* "imgUrl": "",

* "isShow": true,

* "name": "01白色",

* "specifications": "颜色"

* }]

* @param weiMengStandardJson 微盟规格和规格值映射{"treeStandard":{"颜色":{"attributeId":"53000","attr":{"01白色":"148597579149"}}}}

* @param retMap 用于迭代保存数据和传入特定数据

*/

private void processWmStandardRecursion(JSONArray allStandardPriceArray, JSONObject weiMengStandardJson, Map retMap) {

try{

// 递归层数

Integer layerNum = retMap.get("layerNum") == null ? 1 : Integer.parseInt(retMap.get("layerNum").toString()) + 1;

retMap.put("layerNum", layerNum);

// 保存递归层数路径,方便最后一层按顺序取到前面规格数据

List routeList = retMap.get("route") == null ? new ArrayList<>() : (ArrayList)retMap.get("route");

routeList.add(layerNum);

retMap.put("route", routeList);

// 遍历当前规格的所有规格值,注意当存在多种规格时,会通过链表的方式关联下一种规格,children为下一种规格的所有信息

for(int i=0; i < allStandardPriceArray.size(); i++){

JSONObject childStandardJson = allStandardPriceArray.getJSONObject(i);

String mainStandardName = childStandardJson.getString("specifications"); // 规格名称 颜色

String mainStandardValue = childStandardJson.getString("name"); // 规格值 01白色

JSONObject mainStandard = weiMengStandardJson.getJSONObject("treeStandard").getJSONObject(mainStandardName); // 规格对象 {"attributeId":"53000","attr":{"01白色":"148597579149"}}

String attributeId = mainStandard.getString("attributeId"); // 规格名称(颜色)对应微盟id

String mainStandardValueId = mainStandard.getJSONObject("attr").getString(mainStandardValue); // 规格值(01白色)对应微盟id

logger.debug("开始递归循环规格,递归层数:{},for次序:{},规格名称:{},规格值:{}", layerNum, i, mainStandardName, mainStandardValue);

// 业务:设置迭代每层规格对象 "53000":{"name":"颜色","value":"01白色","key":148597579149}

Map subSkuAttrMap = new HashMap<>();

JSONObject skuAttr = new JSONObject();

skuAttr.put("name", mainStandardName);

skuAttr.put("value", mainStandardValue);

skuAttr.put("key", mainStandardValueId);

subSkuAttrMap.put(attributeId, skuAttr);

retMap.put("layerSku_"+layerNum, subSkuAttrMap);

// 业务:添加销售规格

Object saleStandardObj = retMap.get("saleStandard");

JSONObject saleStandard;

if(saleStandardObj == null){

saleStandard = new JSONObject();

}else{

saleStandard = (JSONObject)saleStandardObj;

}

JSONObject selectedSaleAttr = saleStandard.getJSONObject(mainStandardName);

if(selectedSaleAttr == null){

selectedSaleAttr = new JSONObject();

selectedSaleAttr.put("attributeId", attributeId);

}

// 业务:销售规格中添加规格值

JSONArray attrValueArray = selectedSaleAttr.getJSONArray("attrValueArray"); // 与attrValueList不同

if(attrValueArray == null){

attrValueArray = new JSONArray();

}

if(!attrValueArray.contains(mainStandardValueId)){

attrValueArray.add(mainStandardValueId);

}

selectedSaleAttr.put("attrValueArray", attrValueArray);

saleStandard.put(mainStandardName, selectedSaleAttr);

retMap.put("saleStandard", saleStandard);

logger.debug("retMap:{}", retMap);

JSONArray childrenArray = childStandardJson.getJSONArray("children");

if(childrenArray != null){ // 还有其它规格未遍历,递归遍历其它规格

processWmStandardRecursion(childrenArray, weiMengStandardJson, retMap);

}else{ // 没有其它规格,已关联上所有规格

BigDecimal price = childStandardJson.getBigDecimal("price"); // 规格价格,只有最底层有

if(price != null){ // 具有价格才有意义

boolean isShow = childStandardJson.getBooleanValue("isShow"); // 是否展示,true:显示,默认库存量50 false:不显示,库存量0

// 开始生成skuMap

JSONObject skuAdditional = weiMengStandardJson.getJSONObject("skuAdditional");

Map skuMap = new HashMap<>();

skuMap.put("b2cSku", skuAdditional.get("b2cSku"));

skuMap.put("salePrice", skuAdditional.getBigDecimal("salePrice"));

skuMap.put("costPrice", skuAdditional.getBigDecimal("costPrice"));

skuMap.put("outerSkuCode", skuAdditional.get("productCode"));

if(isShow){

skuMap.put("editStockNum", 50);

}else{

skuMap.put("editStockNum", 0);

}

Map skuAttrMap = new HashMap<>();

for(Integer routeNum:routeList){

skuAttrMap.putAll((Map)retMap.get("layerSku_"+routeNum));

}

skuMap.put("skuAttrMap", skuAttrMap);

// 将skuMap保存到skuList

List> skuList = retMap.get("skuList") == null ? new ArrayList<>() : (List>)retMap.get("skuList");

skuList.add(skuMap);

retMap.put("skuList", skuList);

}

}

}

// 返回上一层或结束

retMap.put("layerNum", layerNum-1); // 层级上升

// 更新递归层数路径,去掉当前这一层(也就是最后)

routeList.remove(routeList.size()-1);

retMap.put("route", routeList);

}catch (Exception e){

logger.error("递归生成微盟商品规格信息异常!", e);

}

}