浦凱捷 趙娜
摘要:電能e購(gòu)工業(yè)品商城(以下簡(jiǎn)稱工業(yè)品商城)采用Spring-MVC框架基于JAVA語(yǔ)言開發(fā),與供貨商平臺(tái)集成時(shí)需要根據(jù)供貨商接口規(guī)范進(jìn)行接口調(diào)用的設(shè)計(jì)與開發(fā),以實(shí)現(xiàn)平臺(tái)互操作。論文以供貨商A為例,介紹了訂單類接口接入技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)。在今后平臺(tái)統(tǒng)一標(biāo)準(zhǔn)接口調(diào)用開發(fā)中,具有重要的參考價(jià)值。
關(guān)鍵詞:java;API接口;接口調(diào)用
中圖分類號(hào):TP311? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? 文章編號(hào):1007-9416(2020)10-0000-00
0序言
工業(yè)品商城是基于JAVA語(yǔ)言,采用springMVC+mybatis+springboot+solr+redis+dubbo+zookeeper+sqlserver框架實(shí)現(xiàn)的電商平臺(tái)。為與供應(yīng)商平臺(tái)密切合作,無(wú)縫對(duì)接,開發(fā)時(shí)需將工業(yè)品商城與供應(yīng)商平臺(tái)實(shí)現(xiàn)互操作。平臺(tái)開發(fā)需要提供統(tǒng)一接口規(guī)范以滿足互操作需求。具體需求如下:(1)商品詳細(xì)信息等需要由供貨商通用平臺(tái)導(dǎo)入;(2)訂單狀態(tài)類型等信息需要與供貨商平臺(tái)統(tǒng)一;(3)數(shù)據(jù)類型參數(shù)傳遞等需要與供貨商平臺(tái)一致。因此,工業(yè)品商城的開發(fā)強(qiáng)化了API接口的服務(wù)調(diào)用設(shè)計(jì)以滿足與供貨商平臺(tái)對(duì)接需求。
1供貨商平臺(tái)接口規(guī)范
1.1接入技術(shù)介紹
工業(yè)品商城是集成供貨商A的MRO產(chǎn)品采購(gòu)B2B電子商務(wù)平臺(tái)獨(dú)立開發(fā)。供貨商A電子商務(wù)平臺(tái)提供了統(tǒng)一的接口服務(wù)。它支持兩種接入方式:實(shí)時(shí)接口、文件接口,并提供先關(guān)自服務(wù)功能,向外部業(yè)務(wù)系統(tǒng)提供信息公告、結(jié)算對(duì)賬等服務(wù)。
1.2傳輸協(xié)議需求
根據(jù)供貨商A電子商務(wù)平臺(tái)的接入規(guī)范,服務(wù)調(diào)用需要采用HTTPS傳輸協(xié)議,并采用RESTFUL風(fēng)格的服務(wù)訪問方式。
為了提供簡(jiǎn)單、規(guī)范化的技術(shù)實(shí)現(xiàn),使用POST方式發(fā)起API請(qǐng)求;GET請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后,以問號(hào)(?)分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連。POST把提交的數(shù)據(jù)則放置在HTTP包的包體中。所有參數(shù)值需要轉(zhuǎn)換為UTF-8編碼。
1.3 API調(diào)用方式
1.3.1 調(diào)用機(jī)制
API調(diào)用機(jī)制分為同步、異步兩種方式,根據(jù)業(yè)務(wù)的不同,選擇不同的交互機(jī)制,以業(yè)務(wù)系統(tǒng)到工業(yè)品商城的異步調(diào)用為例,商城發(fā)起HTTPS請(qǐng)求,業(yè)務(wù)系統(tǒng)返回響應(yīng)結(jié)果后開啟獨(dú)立的業(yè)務(wù)處理進(jìn)程,處理完成后由業(yè)務(wù)系統(tǒng)發(fā)起HTTPS請(qǐng)求,返回異步處理結(jié)果。調(diào)用細(xì)節(jié)如圖1所示。
1.3.2 API調(diào)用參數(shù)說明
API調(diào)用開發(fā)中,需要使用供貨商A規(guī)范化的參數(shù)格式,其中名稱參數(shù),用于HTTP-POST方式JSON報(bào)文中節(jié)點(diǎn)的名稱和HTTP-GET方式鏈接中的節(jié)點(diǎn)名稱,所有節(jié)點(diǎn)名稱都小寫;類型參數(shù)用于標(biāo)識(shí)此節(jié)點(diǎn)的參數(shù)類型;必填?參數(shù)標(biāo)識(shí)此參數(shù)是否必填,Y為必填,N為選填。具體格式與樣例如表1所示。除獲取token接口之外,其他API接口都需要傳遞公共參數(shù),以保證接口數(shù)據(jù)可查。公共參數(shù)格式說明限于篇幅不再介紹。
2供貨商訂單類平臺(tái)接口調(diào)用實(shí)現(xiàn)
工業(yè)品商城開發(fā)中,需要實(shí)現(xiàn)鑒權(quán)、商品、地址、價(jià)格、訂單等不少于十類的接口服務(wù)對(duì)接,以訂單類服務(wù)為例,對(duì)下單、確認(rèn)、取消、查詢、發(fā)貨配送、訂單完結(jié)等等接口都有規(guī)范化的接口服務(wù)。
2.1 訂單模塊接口服務(wù)設(shè)計(jì)
本模塊包括統(tǒng)一下單、訂單確認(rèn)、訂單取消、訂單接口反差、查詢訂單信息、發(fā)貨單配送信息、訂單完結(jié)通知等具體服務(wù)接口。API接口請(qǐng)求說明如表2所示。
2.1.1統(tǒng)一下單接口
工業(yè)品將需要購(gòu)買的商品傳遞給供貨商A,供貨商A進(jìn)行下單校驗(yàn)返回下單結(jié)果。統(tǒng)一下單是下的預(yù)訂單,供貨商A只會(huì)鎖定價(jià)格和庫(kù)存,不會(huì)執(zhí)行配貨物流工作。統(tǒng)一下單接口需要做冪等性校驗(yàn),如果訂單號(hào)相同,需要返回訂單號(hào)重復(fù),不能重復(fù)下單。下單時(shí)需要按照下單價(jià)格模式要求做價(jià)格校驗(yàn),價(jià)格不一致不能下單,以免后續(xù)訂單確認(rèn)失敗。由于工業(yè)品商城采用集中開票模式,統(tǒng)一下單接口中的發(fā)票信息只做參考使用,實(shí)際的開票信息需要按照發(fā)票申請(qǐng)接口確定。
2.1.2查詢訂單信息接口
根據(jù)電商的訂單號(hào),查詢訂單詳細(xì)信息。如果發(fā)生拆單時(shí),用父訂單號(hào)可以查詢所有拆分的子訂單信息。訂單查詢的結(jié)果中的金額信息也需要滿足統(tǒng)一下單接口中的金額信息要求。
2.1.3查詢訂單、發(fā)貨單配送信息接口
根據(jù)訂單號(hào)查詢訂單的配送信息,按照時(shí)間給配送信息明細(xì)。供貨商A支持發(fā)貨單查詢,訂單查詢目前數(shù)據(jù)不完整。
2.2訂單模塊接口調(diào)用實(shí)現(xiàn)
在我方平臺(tái)訂單付款成功后,系統(tǒng)調(diào)用供應(yīng)商第三方訂單確認(rèn)預(yù)占庫(kù)存接口。此時(shí),調(diào)用成功后,第三方會(huì)給我們返回一個(gè)訂單號(hào),根據(jù)這個(gè)訂單號(hào)可以和我方平臺(tái)訂單號(hào)相互對(duì)應(yīng)。獲取信息后,實(shí)現(xiàn)數(shù)據(jù)傳遞的具體代碼片段如下:
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贈(zèng)品,oid為主商品skuid,如果本身是主商品,則oid為0。
12. emallOrderWithBLOBs.setOrderPrice(fromObject.getString("orderPrice")?==?null???0.0f?:?fromObject.getDouble("orderPrice"));//訂單總價(jià)格(含稅)
數(shù)據(jù)傳遞實(shí)現(xiàn)后,更新供貨商A的訂單信息,若更新訂單表成功,則給供應(yīng)商推送信息,供應(yīng)商更新庫(kù)存。如果供貨商無(wú)庫(kù)存等原因?qū)е率?,則提示供貨商A下預(yù)占庫(kù)存操作失敗。
訂單生成后,供應(yīng)商再推送訂單發(fā)貨,妥投,拒收,取消,售后等消息。我方平臺(tái)獲取后,調(diào)用相應(yīng)的訂單詳情等接口。得到所需數(shù)據(jù)來修改我方平臺(tái)相應(yīng)數(shù)據(jù)庫(kù)信息。以訂單妥投、拒收為例,type=5為訂單妥投、拒收類型。在文件GajMessageTask.java中調(diào)用一個(gè)方法
3結(jié)論
通過接口調(diào)用代碼的開發(fā),實(shí)現(xiàn)用戶商品下單、供應(yīng)商預(yù)占庫(kù)存,平臺(tái)互操作。在工業(yè)品商城中,使用API接口的服務(wù)調(diào)用設(shè)計(jì),調(diào)用供應(yīng)商平臺(tái)的數(shù)據(jù)和接口,實(shí)現(xiàn)雙方平臺(tái)間的用戶信息、訂單信息、物流信息等的實(shí)時(shí)同步,使工業(yè)品商城平臺(tái)實(shí)現(xiàn)與供應(yīng)商配平臺(tái)的接口對(duì)接,使工業(yè)品商城實(shí)現(xiàn)實(shí)現(xiàn)平臺(tái)之間得靈活互操作,滿足了開發(fā)需求。
收稿日期:2020-07-22
作者簡(jiǎn)介:浦凱捷(1985—),男,北京人,工學(xué)學(xué)士,研究方向:軟件技術(shù),電子商務(wù)。
通訊作者:趙娜(1982—),女,北京人,工學(xué)碩士,講師,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),網(wǎng)絡(luò)安全。
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