一、使用背景
-
业务涉及
-
自营的电商平台(自研的独立站)
-
各大电商平台的自营店铺
-
线下实体仓库(存放电商平台卖的货物)
简单介绍一下仓库,公司是找的我们本地的一家仓储公司来托管我们产品使用这家公司的仓库和系统。他们公司有一套系统,使用的类似于自研的一套系统,他们的仓库系统对接了吉客云平台
-
-
业务介绍
现在公司想将自己的电商平台的订单和各电商店铺的订单通过仓库发货,此时需要将我们自己的电商平台对接上菠萝派的自营商城
主流电商平台可以通过吉客云直连到我们仓库来进行发货,但是我们公司要求外部电商的订单需要同步一份到自己的库
二、什么是吉客云?
吉客云就是一个聚合平台,而菠萝派是吉客云系统对接的产品(吉客云把技术这块单独创建了个品牌就是菠萝派)以我们公司举例,公司仓库侧的平台关联了吉客云管家,我们自营的电商平台关联了吉客云管家,同时主流电商平台也可以关联吉客云,这样我们仓库侧的系统就对接上了我们的自营平台的订单和电商平台店铺的订单数据,然后仓库进行发货。
三、什么是菠萝派?
菠萝派是吉客云销售平台对接模块独立出来的产品,简单理解就是吉客云负责销售和其他,菠萝派这个东西就是专门用来系统对接的。
四、平台对接
-
平台对接可以理解为在吉客云创建公司账号等等内容,技术人员扫一眼即可,因为是我们仓库那边公司主导的,这个阶段实际我没有参与,这里只能给大家在官网找了文档给需要的人简单参考一下,不明白的项目人员可以直接跟吉客云官方对接即可,花钱毕竟是个好干的活,重点是下边的系统对接环节。
-
平台对接官方文档:https://jackyun.com/official/platform
五、系统对接
-
此步骤是为了拿到调用接口的公共参数,appkey、token
-
找到自己要对接的平台类型,对接电商还是仓储、还是物流等,然后看对应的接口文档,这我重点讲电商平台-自营商城
六、电商平台-自营商城对接介绍:
-
查看官方文档地址,首先介绍一下结构:
- 文档说明、接口逻辑图自己看看,这里介绍了调用流程、公共参数、接口的对接(接口是成套对接的,官方里有写比如;订单下载、退款检测、发货同步是必须对接的而且是成套来的不能单独对接其中的一个接口)和鉴权(我会复制出来Java的校验代码实例,贴过去直接用即可)
- 其他的几个是具体接口的对接文档,主要是入参和返回等内容。
2. 常量上哪里取:进入官方文档获取测试账号密码和appkey等关键信息,可以进行测试。
3. 官方测试工具进行测试接口:官方测试地址
4. 配合测试工具查询菠萝派日志,输入测试工具返回的polyapirequestid
七、Api对接:
-
重点:公共请求中的method字段是菠萝派调用的方法,意思就是我们自己的业务系统只暴露一个接口给菠萝派(这个地址如要配置在菠萝派里面),具体菠萝派使用哪个方法是通过这个method来判断的。
-
重点:appkey、token、AppSecret是配置项,开通吉客云账号拿到appkey和AppSecret,创建应用后拿到token。
-
重点:sign是签名,拿到签名后需要验证签名是否正确(签名加密方式逻辑可以看官方说明),下面是Java示例代码
import org.apache.commons.codec.digest.DigestUtils; abstract class BasePolyMallServiceImpl implements PolyMallService { public void checkSign(PolyMallCommonRequest request) throws PolyMallException { Map<String, String> map = new HashMap<>(4); //request是菠萝派传过来的公共参数,我这边进行了封装 map.put(PolyMallConstants.DeclaredField.APPKEY, request.getAppkey()); map.put(PolyMallConstants.DeclaredField.TOKEN, request.getToken()); map.put(PolyMallConstants.DeclaredField.METHOD, request.getMethod()); map.put(PolyMallConstants.DeclaredField.BIZCONTENT, request.getBizcontent()); List<Map.Entry<String, String>> list = new ArrayList<>(map.entrySet()); //排序 list.sort(Comparator.comparing(Map.Entry::getKey)); Iterator<Map.Entry<String, String>> iterator = list.stream().collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new )).entrySet().iterator(); StringBuilder signString = new StringBuilder(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); signString.append(entry.getKey()).append(entry.getValue()); } //AppSecret被我封装到了请求对象中,getAppSecret这里可以改为取你的配置文件 signString.insert(0, request.getAppSecret()); signString.append(request.getAppSecret()); //这里用的是阿帕奇的common公共包 #org.apache.commons.codec.digest.DigestUtils String localSign = DigestUtils.md5Hex(signString.toString().toLowerCase()); if (!request.getSign().equals(localSign)) { //不相等代表请求的签名和自己生成的签名不匹配,这里异常替换成自己系统的异常或自己的业务需要 throw new PolyMallException(PolyMallErrorCodeEnum.SIGN_ERROR.getCode(), PolyMallErrorCodeEnum.SIGN_ERROR.getDesc()); } } }
- 重点:在我调接口时,发现有些接口的返回参数和文档的对不上,但是没什么影响,对不上的都是选填参数,等大家用官网在线测试工具测试的时候就会发现了
- 官方没有SDK,别再找了
八、文档汇总
- 吉客云官方地址(项目经理等平台业务对接可以去这里):https://www.jackyun.com/
- 菠萝派官方地址(开发人员看具体的系统对接、api文档等):http://www.polyapi.com/Home/Index
- 平台对接官方文档:https://jackyun.com/official/platform
- 开发账号+接口调试工具+菠萝派日志查询(开发人员开这里,测试账号、api工具):https://api.jackyun.com/wkdoc/share/doc/doc.html?id=69EDA44383065D15F24A8BCCB22EC49A&insideParams=bW9kdWxlSWQ9ZG9jX2NlbnRlciZwYXJhbXM9ZnJvbVNlYXJjaFR5cGUlM0RzZWFyY2glMjZkb2NJ%20ZCUzRDEzMDE0MzE5MTE5MDYzNzkyNjQlMjZzcGFjZUlkJTNEODM4MzQzOTc2OTk5MDI4MDk2
九、demo代码
- demo代码github:https://github.com/Seneca-Vin/poly-demo
- demo代码gitee:https://gitee.com/seneca/poly-demo
有问题可以私我或留言看到都会回复