基于Spring-MVC的电能e购工业品商城接口调用的设计与实现
2020-12-09浦凯捷赵娜
浦凯捷 赵娜
摘要:電能e购工业品商城(以下简称工业品商城)采用Spring-MVC框架基于JAVA语言开发,与供货商平台集成时需要根据供货商接口规范进行接口调用的设计与开发,以实现平台互操作。论文以供货商A为例,介绍了订单类接口接入技术的设计与实现。在今后平台统一标准接口调用开发中,具有重要的参考价值。
关键词:java;API接口;接口调用
中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2020)10-0000-00
0序言
工业品商城是基于JAVA语言,采用springMVC+mybatis+springboot+solr+redis+dubbo+zookeeper+sqlserver框架实现的电商平台。为与供应商平台密切合作,无缝对接,开发时需将工业品商城与供应商平台实现互操作。平台开发需要提供统一接口规范以满足互操作需求。具体需求如下:(1)商品详细信息等需要由供货商通用平台导入;(2)订单状态类型等信息需要与供货商平台统一;(3)数据类型参数传递等需要与供货商平台一致。因此,工业品商城的开发强化了API接口的服务调用设计以满足与供货商平台对接需求。
1供货商平台接口规范
1.1接入技术介绍
工业品商城是集成供货商A的MRO产品采购B2B电子商务平台独立开发。供货商A电子商务平台提供了统一的接口服务。它支持两种接入方式:实时接口、文件接口,并提供先关自服务功能,向外部业务系统提供信息公告、结算对账等服务。
1.2传输协议需求
根据供货商A电子商务平台的接入规范,服务调用需要采用HTTPS传输协议,并采用RESTFUL风格的服务访问方式。
为了提供简单、规范化的技术实现,使用POST方式发起API请求;GET请求的数据会附在URL之后,以问号(?)分割URL和传输数据,参数之间以&相连。POST把提交的数据则放置在HTTP包的包体中。所有参数值需要转换为UTF-8编码。
1.3 API调用方式
1.3.1 调用机制
API调用机制分为同步、异步两种方式,根据业务的不同,选择不同的交互机制,以业务系统到工业品商城的异步调用为例,商城发起HTTPS请求,业务系统返回响应结果后开启独立的业务处理进程,处理完成后由业务系统发起HTTPS请求,返回异步处理结果。调用细节如图1所示。
1.3.2 API调用参数说明
API调用开发中,需要使用供货商A规范化的参数格式,其中名称参数,用于HTTP-POST方式JSON报文中节点的名称和HTTP-GET方式链接中的节点名称,所有节点名称都小写;类型参数用于标识此节点的参数类型;必填?参数标识此参数是否必填,Y为必填,N为选填。具体格式与样例如表1所示。除获取token接口之外,其他API接口都需要传递公共参数,以保证接口数据可查。公共参数格式说明限于篇幅不再介绍。
2供货商订单类平台接口调用实现
工业品商城开发中,需要实现鉴权、商品、地址、价格、订单等不少于十类的接口服务对接,以订单类服务为例,对下单、确认、取消、查询、发货配送、订单完结等等接口都有规范化的接口服务。
2.1 订单模块接口服务设计
本模块包括统一下单、订单确认、订单取消、订单接口反差、查询订单信息、发货单配送信息、订单完结通知等具体服务接口。API接口请求说明如表2所示。
2.1.1统一下单接口
工业品将需要购买的商品传递给供货商A,供货商A进行下单校验返回下单结果。统一下单是下的预订单,供货商A只会锁定价格和库存,不会执行配货物流工作。统一下单接口需要做幂等性校验,如果订单号相同,需要返回订单号重复,不能重复下单。下单时需要按照下单价格模式要求做价格校验,价格不一致不能下单,以免后续订单确认失败。由于工业品商城采用集中开票模式,统一下单接口中的发票信息只做参考使用,实际的开票信息需要按照发票申请接口确定。
2.1.2查询订单信息接口
根据电商的订单号,查询订单详细信息。如果发生拆单时,用父订单号可以查询所有拆分的子订单信息。订单查询的结果中的金额信息也需要满足统一下单接口中的金额信息要求。
2.1.3查询订单、发货单配送信息接口
根据订单号查询订单的配送信息,按照时间给配送信息明细。供货商A支持发货单查询,订单查询目前数据不完整。
2.2订单模块接口调用实现
在我方平台订单付款成功后,系统调用供应商第三方订单确认预占库存接口。此时,调用成功后,第三方会给我们返回一个订单号,根据这个订单号可以和我方平台订单号相互对应。获取信息后,实现数据传递的具体代码片段如下:
1. GajReturnData?gajReturnData?=?gajInterfaceService.mall_submitOrder(gajSubmit);
2. if(!StringUtils.isNull(gajReturnData)){
3. boolean?success?=?gajReturnData.isSuccess();
4. String?gajSubmitResult?=?gajReturnData.getResult();
5. System.out.println("接口返回信息=======》"+gajSubmitResult);
6. if(success){
7. orderResult?=?true;
8. JSONObject?fromObject?=?JSONObject.fromObject(gajSubmitResult);
9. String?gajOrderId?=?fromObject.getString("orderId");
10. emallOrderWithBLOBs.setSupplierOrderid("GAJ"+gajOrderId);
11. emallOrderWithBLOBs.setSkuGoodsBody(fromObject.getString("sku"));//訂单详情??Sku返回信息中type为0普通、1附件、2赠品,oid为主商品skuid,如果本身是主商品,则oid为0。
12. emallOrderWithBLOBs.setOrderPrice(fromObject.getString("orderPrice")?==?null???0.0f?:?fromObject.getDouble("orderPrice"));//订单总价格(含税)
数据传递实现后,更新供货商A的订单信息,若更新订单表成功,则给供应商推送信息,供应商更新库存。如果供货商无库存等原因导致失败,则提示供货商A下预占库存操作失败。
订单生成后,供应商再推送订单发货,妥投,拒收,取消,售后等消息。我方平台获取后,调用相应的订单详情等接口。得到所需数据来修改我方平台相应数据库信息。以订单妥投、拒收为例,type=5为订单妥投、拒收类型。在文件GajMessageTask.java中调用一个方法
3结论
通过接口调用代码的开发,实现用户商品下单、供应商预占库存,平台互操作。在工业品商城中,使用API接口的服务调用设计,调用供应商平台的数据和接口,实现双方平台间的用户信息、订单信息、物流信息等的实时同步,使工业品商城平台实现与供应商配平台的接口对接,使工业品商城实现实现平台之间得灵活互操作,满足了开发需求。
收稿日期:2020-07-22
作者简介:浦凯捷(1985—),男,北京人,工学学士,研究方向:软件技术,电子商务。
通讯作者:赵娜(1982—),女,北京人,工学硕士,讲师,研究方向:计算机网络技术,网络安全。
Design and Implementation of Electrical Power E-shopping
Mall Interface Call Based on Spring-MVC
PU Kai-jie,ZHAO Na
(1. SPIC China Power Complete Equipment co., ltd. Beijing 100080;
2. Beijing Polytechnic,Beijing 100176)
Abstract: Electric power E-Shopping Industrial Products Mall (hereinafter referred to as industrial Products mall) adopts Spring-MVC framework based on JAVA language development. When integrating with supplier platform, it needs to design and develop interface calls according to supplier interface specifications to achieve platform interoperability.Taking supplier A as an example, this paper introduces the design and implementation of the order-type interface access technology. It may have a significant reference to the development of platform unified standard interface invocation.
keywords:Java;api interface;api invoking