纷来商城系统接入引导

纷来商城系统接入引导

 文档版本号:V1.0.0 文档编号 : 20191106
 密级: 保密 归属部门: 研发部
 产品名: 纷来商城 子系统: 
 编写人: 阳前云 日期: 2020-04-26

1、引言

1.1文档概述

本文档提供商品同步和订单同步等能力

1.2阅读对象

本文档阅读对象:纷来商城对接的第三方渠道开发人员

2、接口调用

2.1接口规则

名称 对应内容值 
 测试请求地址http://channel.51zheli.com/  
 生产请求地址

http://channel.fenlaishop.com/

 传输方式 采用HTTP传输
 提交方式 提交数据采用POST提交方式  application/json,拉取数据使用GET提交方式
 字符编码 统一采用UTF-8字符编码
 签名算法 ascll排序+MD5加密签名
 签名要求 请求和接收数据均需要校验签名

2.2 统一请求参数  

字段名 变量名  必填类型  示例值说明 
 渠道 channelSaleId string 1000018  分配给该销售渠道的渠道编码
 sign sign是(无参数为否) string  8ee69888cef44e030721fd304508672 加密算法获取

2.3 统一返回响应参数 

返回值类型:JSON ( application/json )

返回码描述:

{

    "code":"0",

    "msg":"success"

}

返回码  code  返回信息   msg 说明 
 0 success 成功
 -1  程序猿小哥哥刚才摔倒啦!请等他爬起来~ 失败

2.4 签名规则 

无论是请求还是应答,签名原始串按以下方式组装成字符串:
    post请求头需包含 channelSaleId(渠道号,该信息由纷来定义分配)和 sign  (签名字段,该信息由body内容数组按照键名的升序排序后拼接成字符串再拼接  signKey  值再md5加密而成,最后转为小写);

java签名工具类

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

import javax.servlet.ServletRequest;
import java.util.Enumeration;
import java.util.Map.Entry;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

/**
* 签名工具
*/
public class SignUtils {
public static String getMD5Sign(JSONObject paramJson, String signKey) {
Assert.notNull(paramJson, "request params must not be null");
Set<String> set = paramJson.keySet();
TreeMap<String,String> treeMap = new TreeMap<>();
for(String key:set){
if(!"sign".equals(key)){
treeMap.put(key, paramJson.getString(key));
}
}
treeMap.put("signKey", signKey);
Set<Entry<String, String>> setKey = treeMap.entrySet();
StringBuilder sb = new StringBuilder();
setKey.forEach(e -> {
sb.append(e.getKey()).append(e.getValue());
});
return DigestUtils.md5Hex(sb.toString());
}
}

调用案例

import com.alibaba.fastjson.JSONObject;
import com.funlike.channel.util.SignUtils;
import com.funlike.framework.core.utils.HttpClientUtil;

import java.util.HashMap;
import java.util.Map;

public class 接口调用案例 {

private void pushDemo() {
Long channelSaleId = 0L; // 渠道编号
JSONObject paramJson = null; // 请求数据对象
String param = paramJson.toJSONString();
String signKey = ""; // 秘钥
String url = ""; // 请求地址
String sign = SignUtils.getMD5Sign(paramJson, signKey); // 获得sign
Map<String, String> headMap = new HashMap<>(); // 组装head
headMap.put("sign", sign);
headMap.put("channelSaleId", String.valueOf(channelSaleId));
String resp = HttpClientUtil.httpPost(url, headMap, param); //调用
System.out.println(resp);
}
}




注意: 校验时,字符串转换JSONObject 需传排序参数 ==> JSONObject  paramJson  = JSONObject.parseObject("json字符串", Feature.OrderedField);


错误码定义 
 "100", "参数错误"
"109", "签名错误"

"10016","渠道商不存在或已冻结!"
"10034","商品列表信息异常"
"10054","请勿重复下单!"
"10009", "订单不存在"
"10030","商品库存不足"
"10058","商品已下架!"
"10059","商品不存在!"
"10039","海淘商品必须一单一个sku"
"10040","海淘商品必须添填客户真实姓名与身份证编号"
"10038","商品列表中包含未在你的销售范围内的商品"
"10052","收货地址商品不支持配送"
"10045","账户余额不足以支付订单金额,请充值..."
"10016", "当前状态不可支付!"
"10017", "当前状态不可取消!"
"10046","订单状态不合法"
"10018", "已支付且发货才能确认收货"
"10057","订单已发货,不可更新收件人相关信息!"
"10055","更新订单收货人地址时,省市区详细地址参数必须同时不可为空"
"10056","更新订单收货人地址时,收货人和手机号参数必须同时不可为空"
"12100", "渠道超过访问接口次数限制!"

"10031","订单已申请过售后,不可重复申请!"

"10053","您申请的订单售后不符合纷来售后规则。"

"10061","商品正在云仓调货中,请稍后下单!"