下载文档

配置项

HTTP请求地址
app_key
secret
access_token
jwt

登录模块

登录获取接口token

登录获取接口token
接口名(name):loginApi.login
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
tokenstringeyJhbGciOiJIUzUxMiJ9用户token
tokenExpireTimestring5000token过期时间,单位:min


文件上传

文件上传,不确定数量

接口名(name):file.upload
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
filesarray 上传文件
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
mapstring{'test.jpg':'https://a.b.com/test.jpg'}map,key:源文件名; value:上传文件的阿里云oss的url


物料品牌

根据品牌名称分页查询品牌信息

根据品牌名称分页查询品牌信息
接口名(name):brand.name
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
namestring品牌名称
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
idlong201663488354269437954主键ID
namestring品牌名称


分类和属性模块

根据分类名称精准匹配分类信息

根据分类名称精准匹配分类信息
接口名(name):cate.getGoodsCateByName
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
cateNamestring物料分类名称
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
idlong201292737236物料分类Id
namestring石材分类名称


根据分类id查询sku物料属性

根据分类id查询sku物料属性
接口名(name):cate.querySkuAttrByCateId
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
cateIdlong20分类id
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
attrSelectVoListarray
名称类型最大长度示例值描述
idlong201292737236attrId
namestring颜色属性名
customFlaginteger111是否支持自定义参数 0-否;1是;
inputTypeinteger111供端填写方式 1单选;2复选;3输入框;4图片上传;5附件上传
supplierRequiredinteger111供端是否必填 0-否;1是;
itemsarray
名称类型最大长度示例值描述
idlong201231123222属性数据项id
namestring红色属性数据项名称
属性数据项集合
属性集合


根据分类id查询spu物料属性

根据分类id查询spu物料属性
接口名(name):cate.querySpuAttrByCateId
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
cateIdlong20物料分类id
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
attrSelectVoListarray
名称类型最大长度示例值描述
idlong201292737236attrId
namestring颜色属性名
customFlaginteger111是否支持自定义参数 0-否;1是;
inputTypeinteger111供端填写方式 1单选;2复选;3输入框;4图片上传;5附件上传
supplierRequiredinteger111供端是否必填 0-否;1是;
itemsarray
名称类型最大长度示例值描述
idlong201231123222属性数据项id
namestring红色属性数据项名称
属性数据项集合
属性集合


根据分类id查询相关下载属性

根据分类id查询相关下载属性
接口名(name):cate.querySpuFileAttrByCateId
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
cateIdlong20物料分类id
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
attrSelectVoListarray
名称类型最大长度示例值描述
idlong201292737236attrId
namestring颜色属性名
customFlaginteger111是否支持自定义参数 0-否;1是;
inputTypeinteger111供端填写方式 1单选;2复选;3输入框;4图片上传;5附件上传
supplierRequiredinteger111供端是否必填 0-否;1是;
itemsarray
名称类型最大长度示例值描述
idlong201231123222属性数据项id
namestring红色属性数据项名称
属性数据项集合
属性集合


字典

计量单位字典

计量单位字典
接口名(name):dict.pub_goods_unit
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
listarray
名称类型最大长度示例值描述
valuestringdollar字典value
textstring美元字典文本
计量单位字典列表


货币单位字典

货币单位字典
接口名(name):dict.unit
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
listarray
名称类型最大长度示例值描述
valuestringdollar字典value
textstring美元字典文本
货币单位字典列表


物料材质

查询供应商对应的材质库材质信息

查询供应商对应的材质库材质信息
接口名(name):goods.materialComponentInfo
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述
materialTypeGroupListarray
名称类型最大长度示例值描述
idlong201663488354269437954材质分组id
namestring金属材质分组名称
childrenarray
名称类型最大长度示例值描述
materialQualityIdlong201663488354269437954材质id
namestring玻璃材质A材质名称
qualityCodestringA编号
colorNamestring色系名称
材质分组下的材质列表
材质分组列表


物料模块

添加spu

添加spu
接口名(name):xizhaoGoodsSpu.saveSpu
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
spuIdlong20物料主键spuId,有着编辑,无则新增
goodsInfoobject
名称类型是否必须最大长度示例值描述
spuIdlong20物料主键spuId,有则编辑,无则新增
cateIdlong20物料分类Id, 依赖cate.getGoodsCateByName接口
cateNamestring物料分类名称, 依赖cate.getGoodsCateByName接口
spuNamestring物料名称
customFlaginteger11是否允许定制(0否1是)
brandIdlong20品牌id, 依赖cate.getGoodsCateByName接口
seriesNamestring产品系列
unitstring货币单位, 依赖dict.unit接口
pubGoodsUnitstring计量单位, 依赖dict.pub_goods_unit接口
spuSpecListarray
名称类型是否必须最大长度示例值描述
attrIdlong20物料属性ID xizhao_goods_attr->id
attrValueobject物料属性值,单选传String, 多选传数组
inputTypeinteger11输入框类型,1单选;2复选;3输入框;4图片上传;5附件上传
spu属性列表, 依赖cate.querySpuAttrByCateId接口
产品信息
skuListDTOobject
名称类型是否必须最大长度示例值描述
skuListarray
名称类型是否必须最大长度示例值描述
idlong20skuId或者draftSkuId, 第一新增都是skuId,编辑才有可能是draftSkuId, 有则修改,无则编辑
skuNostring产品型号
minPricedouble最低价格
maxPricedouble最高价格
orderNointeger11序号
productImageListarray
名称类型是否必须最大长度示例值描述
idlong20id
imagestring图片路径
imageTypeinteger11图片类型 1-产品图;2-产品详情/案例/细节图
orderNointeger11排序
物料产品图片列表
specListarray
名称类型是否必须最大长度示例值描述
attrIdlong20物料属性ID
attrValueobject物料属性值,有可能为字符串,也有可能为数组
规格属性列表,依赖cate.querySkuAttrByCateId接口
detailImageListarray
名称类型是否必须最大长度示例值描述
idlong20id
imagestring图片路径
imageTypeinteger11图片类型 1-产品图;2-产品详情/案例/细节图
orderNointeger11排序
分类详情图片列表
物料型号列表
sku列表
goodsDetailobject
名称类型是否必须最大长度示例值描述
goodsImageListarray
名称类型是否必须最大长度示例值描述
idlong20id
imagestring图片路径
imageTypeinteger11图片类型 1-三视图;2-大版图;3结构图;4-案例图
fileNamestring文件名称
三视图、大版图、结构图、案例图等
cautionstring注意事项, 富文本格式
detailstring详情介绍, 富文本格式
产品详情
xizhaoGoodsMaterialComponentobject
名称类型是否必须最大长度示例值描述
qualityImagestring产品材质图片
componentListarray
名称类型是否必须最大长度示例值描述
namestring坐标点材质名称
coordinatestring材质点坐标
spuQualityListarray
名称类型是否必须最大长度示例值描述
materialQualityIdlong20材质库材质Id
材质列表
材质点列表
产品材质,依赖goods.materialComponentInfo接口
goodsReportobject
名称类型是否必须最大长度示例值描述
fileTypeinteger11文件类型 1-产品报告;2-相关下载;
fileListarray
名称类型是否必须最大长度示例值描述
attrIdlong20attrId, 当file_type=2时有值, 依赖cate.querySpuFileAttrByCateId接口
filePathstring文件路径
fileTypeinteger11文件类型 1-质检报告/环保报告/专利证书等;2-相关下载
fileNamestring文件名称
文件列表
产品报告
relatedDownloadobject
名称类型是否必须最大长度示例值描述
fileTypeinteger11文件类型 1-产品报告;2-相关下载;
fileListarray
名称类型是否必须最大长度示例值描述
attrIdlong20attrId, 当file_type=2时有值, 依赖cate.querySpuFileAttrByCateId接口
filePathstring文件路径
fileTypeinteger11文件类型 1-质检报告/环保报告/专利证书等;2-相关下载
fileNamestring文件名称
文件列表
相关下载
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述


撤回物料审核

撤回物料审核
接口名(name):xizhaoGoodsSpu.withDrawSpu
版本号(version):
请求参数/ 数据模型
名称 类型 是否必须 最大长度 示例值 描述
spuIdlong20物料spuId
返回结果/数据模型
名称 类型 描述
code string 状态值,"0"表示成功,其它都是失败
msg string 错误信息,出错时显示
data object 返回的数据,没有则返回{}
名称 类型 最大长度 示例值 描述


附录

签名算法

签名算法描述如下:
1.将请求参数按参数名升序排序;
2.按请求参数名及参数值相互连接组成一个字符串:<paramName1><paramValue1><paramName2><paramValue2>...;
3.将应用密钥分别添加到以上请求参数串的头部和尾部:<secret><请求参数字符串><secret>;
4.对该字符串进行MD5(全部大写),MD5后的字符串即是这些请求参数对应的签名;
5.该签名值使用sign参数一起和其它请求参数一起发送给服务开放平台。

伪代码:
Map<String,Object> paramsMap = new ...; // 参数

Set<String> keySet = paramsMap.keySet();
List<String> paramNames = new ArrayList<String>(keySet);
// 1.
Collections.sort(paramNames);

StringBuilder paramNameValue = new StringBuilder();
// 2.
for (String paramName : paramNames) {
    paramNameValue.append(paramName).append(paramsMap.get(paramName));
}
// 3.
String source = secret + paramNameValue.toString() + secret;
// 4.
String sign = md5(source);
// 5.
paramsMap.put("sign",sign);

请求示例

Java版本:
import java.io.IOException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;

import com.alibaba.fastjson.JSON;

import junit.framework.TestCase;

public class PostTest extends TestCase {

    @Test
    public void testPost() throws IOException {
        String appKey = "test";
        String secret = "123456";
        // 业务参数
        Map<String, String> jsonMap = new HashMap<String, String>();
        jsonMap.put("goodsName", "iphoneX");

        String json = JSON.toJSONString(jsonMap);
        json = URLEncoder.encode(json, "utf-8");

        // 系统参数
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("name", "goods.get");
        param.put("app_key", appKey);
        param.put("data", json);
        param.put("timestamp", getTime());
        param.put("version", "");
        param.put("access_token", "");

        String sign = buildSign(param, secret);

        param.put("sign", sign);

        /*
        // 最终请求数据
        {
            "sign": "2AE534A15AACE112EE43B9CCF6BD4383",
            "timestamp": "2018-03-21 12:57:30",
            "name": "goods.get",
            "data": "%7B%22goodsName%22%3A%22iphoneX%22%7D",
            "app_key": "test",
            "version": ""
        }
        */
        System.out.println("=====请求数据=====");
        String postJson = JSON.toJSONString(param);
        System.out.println(postJson);
        // String resp = HttpUtil.post(postJson); // 发送请求
        /*
        响应结果:
        {
            "code":"0",
            "data":{
                "pageIndex":1,
                "pageSize":10,
                "rows":[
                    {
	                    "goods_name":"iPhoneX",
	                    "id":1,
	                    "price":8000
                    },
                    {
	                    "goods_name":"三星",
	                    "id":2,
	                    "price":7000
                    }
	           ],
	           "total":100
            }
        }
        */
    }

    /**
     * 构建签名
     *
     * @param paramsMap
     *            参数
     * @param secret
     *            密钥
     * @return
     * @throws IOException
     */
    public static String buildSign(Map<String, ?> paramsMap, String secret) throws IOException {
        Set<String> keySet = paramsMap.keySet();
        List<String> paramNames = new ArrayList<String>(keySet);

        Collections.sort(paramNames);

        StringBuilder paramNameValue = new StringBuilder();

        for (String paramName : paramNames) {
            paramNameValue.append(paramName).append(paramsMap.get(paramName));
        }

        String source = secret + paramNameValue.toString() + secret;

        return md5(source);
    }

    /**
     * 生成md5,全部大写
     *
     * @param message
     * @return
     */
    public static String md5(String message) {
        try {
            // 1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 2 将消息变成byte数组
            byte[] input = message.getBytes();

            // 3 计算后获得字节数组,这就是那128位了
            byte[] buff = md.digest(input);

            // 4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
            return byte2hex(buff);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 二进制转十六进制字符串
     *
     * @param bytes
     * @return
     */
    private static String byte2hex(byte[] bytes) {
        StringBuilder sign = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(bytes[i] & 0xFF);
            if (hex.length() == 1) {
                sign.append("0");
            }
            sign.append(hex.toUpperCase());
        }
        return sign.toString();
    }

    public String getTime() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
}

JavaScript版本:jssdk下载