江西應用技術職業學院 彭 霖
江西應用科技學院 彭忠全
江西應用技術職業學院 譚倩妮
Odoo是一個輕量級的開源ERP系統,相比同類產品而言,有著軟件體積小、系統要求低、支持多平臺、便于部署、多種軟件架構、可擴展模塊、快速二次開發等特點[7]。目前,Odoo暫無對接各大電子商務平臺的開源模塊,原生Odoo的訂單只能從自帶的網店平臺獲取或手工錄入,要實現與各大電子商務平臺的對接,必須自定義對接模塊,實現包含獲取訂單、訂單發貨、商品更新、退換貨處理、回復評價等功能,使其符合國內電子商務銷售模式。本文以蘇寧開放平臺為例,實現與Odoo系統的對接。
Odoo是一個高度模塊化、低耦合的跨平臺開源ERP系統,頂層功能由“網站應用管理、銷售管理、財務管理、運營管理、生產管理、人力資源管理”構成,提供一站式解決方案,其中涵蓋了幾乎所有常見的業務需求,不再需要不同軟件之間的接口,模塊化的設計使得各個應用彼此之間完美集成。同時,開源模式讓開發人員可以自由的定制自己的應用,為在所有應用中擴展提供了頂級可用性[8]。
為了滿足Odoo對接電子商務開放平臺,實現訂單在Odoo系統內的操作與平臺同步,Odoo對接模塊應當包含以下基本功能(如圖1所示):

圖1
訂單獲取:主要包含訂單定時批量獲取、單筆訂單查詢等功能。如果獲取的是新訂單信息,將從電子商務開放平臺獲取的已付款新訂單信息保存在Odoo系統內,如果獲取的是已有訂單信息,及時將訂單狀態轉為退款等異常訂單進行及時處理,避免訂單的錯發。
訂單發貨:主要包含訂單發貨信息推送功能。通過Odoo系統調用物流公司開放平臺對接模塊,向對接物流公司開放平臺下單,獲取物流單等信息,將所獲得的信息推送給電子商務開放平臺。
商品更新:主要包含商品上、下架、商品信息維護、商品庫存維護等功能。對商品的名稱、類別、價格、簡介等信息進行統一管理,實現商品的自由上、下架,將ERP系統中的商品庫存信息及時同步到電子商務開放平臺。
退換貨處理:主要包含退換貨訂單定時批量獲取、單筆退換貨訂單獲取、同意或拒絕退換貨等功能。與獲取訂單類似,但是由于退換貨訂單的特殊性,需要及時的將退款訂單截下,避免退款訂單發貨。同時,工作人員可以快速的進行退換貨審批,減少在電子商務網站后臺的操作。
回復評價:主要包含獲取買家評價、回復買家評價等功能。客服等工作人員可以快速的、批量的進行評價回復,避免回復不及時的現象。
Odoo系統在數據持久層上使用了ORM(對象到關系的映射)技術,使得我們操作實體對象的時候,就不需要再去和復雜的SQL語句打交道,只需簡單的操作實體對象的屬性和方法。Odoo系統內置了完善的ORM API供開發者調用,常用方法如下。
create方法:在數據表中插入一條記錄search方法:查詢符合條件的記錄。
read方法:返回記錄的指定字段值列表。
browse方法:瀏覽對象及其關聯對象。從數據庫中讀取指定的記錄,并生成對象返回。
write方法:保存一個或幾個記錄的一個或幾個字段。unlink方法:刪除一個或幾個記錄。
調用蘇寧開放平臺(下稱SOP)的API接口時,即是與SOP服務器的數據進行一次交互的過程。
3.2.1 API調用流程
根據SOP的協議,API的HTTP調用主要有以下幾個步驟:拼接參數、生成簽名、拼接HTTP請求,發起HTTP請求、解析獲取的XML/JSON結果。
SOP目前提供2個運行環境供開發者調用:
(1)測試環境。數據涵蓋所有API服務,所有開放的API已經部署到該環境,供開發者進行API的功能測試。
(2)正式環境。正式環境是蘇寧開放服務平臺提供給供應商及軟件服務商的線上試運行環境。根據應用標簽不同,每個應用將受到接口調用次數及流量的限制,并且根據應用標簽不同,能調用的接口也不同。
3.2.2 API調用參數說明
appKey是開發者創建應用時,SOP頒發的唯一標識,SOP通過App Key來鑒別應用的身份。appSecret是SOP給應用分配的密鑰,這個密鑰用來保證應用來源的可靠性,防止被偽造。appRequestTime是請求該接口的時間,SOP使用北京時間。
3.2.3 簽名算法
調用API接口時,為了防止調用過程中被黑客獲取并篡改,各大電商開放平臺均要求在調用任何一個API時,都必須攜帶簽名,開放平臺會請求的參數,對簽名進行相應的驗證,簽名不合法的請求會被拒絕。本文以SOP為例,SOP目前支持的簽名算法為MD5,簽名大致過程如下(SOPV1.2版本):
(1)業務數據進行base64編碼
(2)按照順序依次拼接appSecret的值,appMethod的值,appRequestTime的值,appkey的值,versionNo的值和第一步編碼后的值 。
(3)將第二步的數據進行md5加密,得到簽名信息
3.2.4 拼接HTTP請求,發起HTTP請求
將所有參數名和參數值采用utf-8進行URL編碼,然后通過GET或POST發起請求。調用接口(API)時,必須傳入的系統級參數以及應用級參數,參見SOP API文檔 中每個API接口詳細頁面的公共參數。
3.2.5 解析返回的XML/JSON數據
XML:python中用xml.dom.minidom來解析xml返回數據,DOM 的解析器在解析XML 文檔時,一次性讀取整個文檔,把文檔中所有元素保存在內存中的一個樹結構里,之后可以利用DOM 提供的不同的函數來讀取文檔的內容和結構。
JSON:python的json模塊提供了一種很簡單的方式來編碼和解碼JSON數據。 其中兩個主要的函數是 json.dumps() 和 json.loads() ,json.dump()用來編碼JSON數據, json.loads()用來解碼JSON數據。
3.2.6 數據定時獲取
Odoo為所有定時任務而專門準備了一個模型,即ir_cron類,通過實例化ir_cron對象,改變對象的的以下屬性,來達到定時執行某項任務的目的:
active屬性,決定是否激活該定時任務,類型為布爾型,默認為True。
interval_number屬性,定義間隔時間,類型為整型。
interval_type屬性,定義執行定時任務的周期類型,只能選擇分鐘、小時、天、周、月,可惜沒有秒。
function屬性,定義定時任務需要執行的方法。
為了本文以蘇寧開放平臺為例,設計和實現了Odoo系統中的電子商務開放平臺對接模塊。該模塊滿足Odoo對接電子商務開放平臺的需求,實現了訂單在Odoo系統內的操作與平臺同步,大大簡化了電子商務企業后臺人員的操作,解決了電子商務平臺與企業ERP系統的信息孤島現象。