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