項目總結24:海關179號(實時獲取跨境電子商務平台企業支付相關原始數據接入)開發流程和相關資料
歡迎大家留言探討
1、致謝
感謝:https://blog.csdn.net/ccbox_net/article/details/89031736;博主ccbox_net ;如果不是這篇文章,我可能還要話花一倍的的時間才能結束
2、吐槽
現在開發結束后,回過來總結,不怨海關,只能說自己經驗還不夠;但不可否認對接海關,是我目前對接的最難的第三方;以前總吐槽微信支付和阿里支付的文檔,但跟海關比起來,呵呵;
對接海關,除了看文檔,還需要必要的溝通,只看文檔是無法完成,因為其中有幾部是需要海關工作人員進行審核
另外,海關(或者本文)提供的全部文檔都需要仔細理解,否則,就是看了本文,也是雲里霧里的;此處沒有捷徑
接下來是干貨
3-前期准備
1-企業需要在海關備案,得到海關注冊編碼;
2-企業需要在海關注冊,按到一個加密用的ukey和一個法人卡(不是好人卡...)
3-在海關注冊后,海關會你先上跟相關人員對接,他們會將你拉入一個微信群,並講你需要的資料大禮包發你,但請記住光看大禮包是不夠的
4-需要的資料
4-1-相關網址
海關公告179文件:http://www.customs.gov.cn/customs/302249/302266/302269/2125253/index.html
中國電子口岸官網(這個網址很重要,並且需要UKEY才能登陸):http://ceb1.chinaport.gov.cn
4-2-相關文件和源碼
4-3-文件和源碼下載
鏈接:https://pan.baidu.com/s/1BWiudH00qngdB8rmlqDMrw
提取碼:ln17
5-正式開發
5-1-總體邏輯
從業務角度:(原因)現在進出口貿易越來越規范化,海關方面要求對進出口的訂單可以隨時進行數據抽查;(結果)海關要求跨境電商企業提供訂單數據實時查詢的功能;
從開發角度:海關要求電商企業提供一個接口,用於發送查詢訂單的請求;當企業收到海關發送的請求,則將相關的訂單信息加簽后,發送給海關;
開發邏輯明細:
1-電商企業提供一個公開的接口(接口A)給海關,該接口需要在指定網站進行配置;
2-(海關通過接口A發送請求,企業收到請求后), 封裝訂單數據,並對的數據加簽;
3-企業將加簽的后的數據按照指定的格式發送給海關
5-2-走通測試流程
這里需要說明:測試流程和正式流程的邏輯是一樣的,海關方面認為當你走通了測試流程,說明電商企業這邊的對實時數據查詢的業務已經從業務和代碼層面都已經准備好了;
測試流程的步驟:
1-請海關工作人員給你注冊測試環境:找到和你對接的海關工作人員,將企業相關信息發給他,讓他幫你開通測試環境;需要的數據如下;其中證書編號(就是證書的序列號)和證書的獲取,請參考《海關加簽調試步驟.docx》中的獲取證書操作;
2-實現接口A(海關請求企業的接口)
接口文檔,請參考《海關跨境電商進口統一版信息化系統平台數據實時獲取接口(試行).doc》中的1.6.1.企業實時數據獲取接口(部署在電商平台);服務定義——platDataOpen
這個接口海關時提供完整的DEMO(親測有效,謝天謝地),請參考《java_customs_demo.zip》,demo中的這個接口A的邏輯是:收到請求后將數據封裝並記錄在兩個ConcurrentHashMap中(數據用於后面的加簽),再返回成功,如果封裝數據失敗,則返回失敗;備注:這個demo其實已經實現了全部的完整的后台需要的邏輯(里面有三個接口,后面會會說明),接口A的部分代碼如下;
對於這個接口需要說明下:
1-本人是沒有直接跑通的這個接口的,這個也不重要;我只直接將這部分代碼移植到自己的項目中的;
2-DEMO重中封裝數據,需要實際訂單的信息,這個訂單數據是需要我們自己去植入的,只需要在DEMO的基礎上,參照《海關跨境電商進口統一版信息化系統平台數據實時獲取接口(試行).doc》文檔調整即可
3-demo中有一個AlipaySearchOrder類已經相關的和Alipay相關的類;這個alipay相關的代碼是為了組裝下一步加簽數據的initalRequest和initalResponsee兩個參數;因為我負責項目用的是微信支付,我是直接在商品訂單支付和支付回調是直接將initalRequest和initalResponsee需要的數據保存在數據庫,作為普通數據調用;注意initalRequest對應的微信支付統一下單的請求參數,是xml格式不是json格式,initalResponsee對應的微信支付成功后回調的返回參數;
4-這個接口寫好后,我們可以用postman進行測試,這里有兩個大坑
3-封裝需要加簽的數據(這一步其實在接口A中實現)
加簽的數據格式以及細節要求,請參考《海關加簽調試步驟.docx》中網頁加簽配置,以及《海關跨境電商進口統一版信息化系統平台數據實時獲取接口(試行).doc》中的加簽說明。
加簽數據的封裝,海關時提供DEMO(java_customs_demo.zip》),已經做好了封裝;
HaiGuanApi類中的Map<String, String> MAP_HAI =new ConcurrentHashMap()記錄的是待加簽數據;Map<String, JSONObject> MAP_VALUE = new ConcurrentHashMap()記錄的是接口B的請求數據(但是不完整,因為還沒加簽值),將數據打印到控制台,供4使用
4-加簽:
用了瀏覽器打開《asgn.rar》中的index.html(如下圖),請參考《海關加簽調試步驟.docx》中的網頁加簽配置,里面進行了詳細說明
5-將數據傳給海關(即接口B):(這里的前提是已經注冊了測試環境,見1)
將3中在控制台打印出來的接口B需要的請求數據,補充完整(補上certNo和signValue)
請求參數會有幾個坑需要避免,請參考《海關加簽調試步驟.docx》中的驗簽上傳篇
用post請求對應接口,url:https://swapptest.singlewindow.cn/ceb2grab/grab/realTimeDataUpload;服務定義realTimeDataUp,請參考《海關跨境電商進口統一版信息化系統平台數據實時獲取接口(試行).doc》中的1.3.1.數據上傳測試和1.6.2.企業返回實時數據接口(部署在通關服務系統);示例如下
如果接口返回success,那么恭喜你,測試階段;接下就是正式流程,正式流程對接就是在測試的基礎上,換上正式環境,並且代碼規范化;
5-3-走通正式流程
1.注冊
1.登錄ceb1.chinaport.gov.cn:我選擇是進口統一版,進入下圖,如果是第一次到這個頁面(默認已插上UKEY),需要安裝空間,按部就班做即可,使用IC卡登錄,初始密碼8個8;
2.注冊服務:請參考中《海關跨境電商進口統一版信息化系統平台數據實時獲取接口(試行).doc》的線上接入的服務注冊,見下圖
3.配置接口A的URL:見下圖;配置好后,跟海關工作人員說一聲,他們會調用接口,調用成功后,便會審核通過,通過之后啟用地址即可
2. 加簽,上傳數據給海關(接口B);
1. 先說明:其實大部分代碼開發工作在測試步驟中,已經完成;正式步驟只要進行配置
2.打開《asgn.rar》中的index.html源碼,修改兩個url,如下圖
3.啟動項目,用瀏覽器打開index.html,點擊開始輪詢;可以用POSTMAN調用接口A發起一個流程;,結果如下
6-特別需要避免的坑
1.大部分的坑在《數據抓取流程及常見問題.doc》和《海關加簽調試步驟.docx》中會進行說明
2.因為對接的微信支付,我碰到了連個新坑,就是initalRequest和initalResponse數據總是在接口B中驗簽失敗,在確認其他都沒有沒有問題的情況下(用控制變量法),發現:initalRequest中的/需要轉義;initalResponse中的“需要轉義
7-總結
1-如果能全部理解文檔和相關申請,其實對接起來還是很方便的;
2-海關目前已提供的完整的demo,所以不需要我們0基礎開發,只需要在的demo的基礎上的開發即可
3-碰到問題先看文檔,在上網查詢,最后問請教海關工作人員
4-最后上線的情況是:項目部署在線上服務器;js插件(《asgn.rar》)部署在企業本地一個服務器,然后UKEY是插在這個服務器上的;《asgn.rar》中的index.html開啟輪詢