中国联通计费侧H2协议接口实现
業(yè)務(wù)需求,前幾天寫了一個跟聯(lián)通計費側(cè)的接口,具體要求參見局方規(guī)范:
1?????? H2協(xié)議
遵循軟件工程及制定協(xié)議標準的基本思想,本著接口易用、易理解、易交流的原則,為實現(xiàn)客服系統(tǒng)的規(guī)范性、開放性、擴展性、業(yè)務(wù)獨立性提供保證。
總部H2接口方式
采用事務(wù)交易設(shè)計,以保證傳輸數(shù)據(jù)的安全正確。
采用中間件技術(shù),使接口定義簡單明晰。
根據(jù)交易的類型,決定交易回應(yīng)的時限。
?
包頭定義:
包頭格式:內(nèi)容為一定長ASCII字符串(86位),具體內(nèi)容如下:
| 字段名稱 | 長度 | 說明 |
| A0版本號信息 | (2位) | 標識當(dāng)前使用的協(xié)議版本號 |
| A1數(shù)據(jù)包大小 | (5位) | 以字節(jié)為單位,不足右補空格 |
| A2流水號 | (20位) | 業(yè)務(wù)流水號,標志每筆具體交易。數(shù)據(jù)校驗包可以無流水號 |
| A3標志 | (1位) | 1表示成功 0表示失敗,僅適用于響應(yīng)包 |
| A4服務(wù)類型 | (12位) | 編碼規(guī)則參見《》 |
| A5業(yè)務(wù)號碼 | (20位) | 移動電話號碼 |
| A6業(yè)務(wù)號碼類型 | (1位) | 1電話號碼;2帳號;3其他 |
| A7營業(yè)點 | (6位) | 業(yè)務(wù)受理地點 |
| A8營業(yè)員 | (8位) | 業(yè)務(wù)受理人 |
| A9包編號 | (5位) | 標志該筆流水的第幾包數(shù)據(jù) |
| A10最后一包標志 | (1位) | 在進行多包發(fā)送的情況下,該標志用以標明是否為最后一數(shù)據(jù)包。1最后一包數(shù)據(jù),無后續(xù)包;0非最后一包數(shù)據(jù),有后續(xù)包,連接錯誤,I/O錯誤等 |
| A11錯誤碼 | (5位) | 在標志為失敗時需要檢查該錯誤碼。錯誤碼包括系統(tǒng)操作錯誤和業(yè)務(wù)處理錯誤 |
?
包體定義:
一個數(shù)據(jù)包總長度不可大于4K。對存在多條返回記錄的業(yè)務(wù),一數(shù)據(jù)包可含多條記錄。長度如超過4K,就以多包數(shù)據(jù)發(fā)送。每字段之間用“TAB鍵0x09”分隔,每記錄之間用“回車鍵0x0d,0x0a”分隔,包結(jié)束用“0x1a”。對于不同的服務(wù)類型,其請求包和應(yīng)答包的包體具有不同的內(nèi)容。無論數(shù)據(jù)有無包體返回,一定需要添加包結(jié)束符。對于任何非正常返回的數(shù)據(jù)包應(yīng)該沒有包體,只有包頭與包結(jié)束符。包體字段為定長字符串,非變長字符串,字段內(nèi)容不應(yīng)該出現(xiàn)不可打印字符串。
補空格原則:
凡字段的數(shù)據(jù)表示的是金額的,既其字段類型是Number(10)的,這樣的字段是左補空格,其它字段都是右補空格。注:如果省分是按分隔符處理數(shù)據(jù),此規(guī)則無效。如果省分按定長處理數(shù)據(jù),則遵循些規(guī)則補空格。
接口采用嚴格的數(shù)據(jù)長度確認傳輸數(shù)據(jù)正確性!其間采用的Socket編程沒有什么說的,主要是在開發(fā)中遇到以下問題:
1.數(shù)據(jù)包頭+包體構(gòu)成,請求數(shù)據(jù)不能沒有包頭,可以無包體
2.包頭必須采用86位長度,不能長,不能短
3.服務(wù)端解析報文必須先讀取報文結(jié)束標志,否則,不解析,Socket一直處于read模式,導(dǎo)致客戶端超時
4.文檔說的包以0x1a結(jié)束,正確的無包體報文的長度為87位,即結(jié)束位長度為1,如果根據(jù)文檔描述的,報文長度為90,進入報文解析直接報錯,不解析!
如果全部轉(zhuǎn)化為16進制,長度完全超出要求。
最后,根據(jù)十六進制計算該結(jié)束標志為SUB(ASCII),通過將該SUB加上前面報文正常解析.
總結(jié)
以上是生活随笔為你收集整理的中国联通计费侧H2协议接口实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对接银联商务公众号+服务窗支付(
- 下一篇: java--for循环及相关案例