摘要:利用銀行(UNIX平臺(tái))許多網(wǎng)點(diǎn)為企業(yè)( 一般WINDOWS平臺(tái))提供實(shí)時(shí)、便捷的服務(wù),必須開發(fā)接口軟件將兩個(gè)系統(tǒng)有機(jī)的聯(lián)系起來,使銀行各個(gè)網(wǎng)點(diǎn)完成水費(fèi)的實(shí)時(shí)查詢、交費(fèi)、沖帳、對(duì)帳、批量處理等代收代辦業(yè)務(wù),還必須經(jīng)過測(cè)試、調(diào)試、運(yùn)行等環(huán)節(jié)。
關(guān)鍵詞:通信接口軟件;企業(yè)應(yīng)用;銀行應(yīng)用;代收代辦業(yè)
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)08-10ppp-0c
1 引言
銀行系統(tǒng)是獨(dú)立的金融系統(tǒng),網(wǎng)點(diǎn)多,可以為用戶提供方便的服務(wù),要使銀行金融系統(tǒng)與自來水收費(fèi)系統(tǒng)融合起來,這樣就需要開發(fā)一個(gè)接口程序能使二者有機(jī)的結(jié)合起來,這樣程序在此定義為“跨平臺(tái)銀行代收水費(fèi)通信接口軟件”。有了這個(gè)系統(tǒng),用戶在銀行網(wǎng)點(diǎn)只需提供用戶號(hào),通過該系統(tǒng)就可以從自來水收費(fèi)系統(tǒng)里查找對(duì)應(yīng)用的各種費(fèi)用包括各種水費(fèi)及污水處理費(fèi),這樣可以實(shí)現(xiàn)交費(fèi),還可以沖帳及重交,對(duì)明細(xì)帳及總帳等。借助該系統(tǒng),銀行端可以統(tǒng)計(jì)及匯總各種費(fèi)用等等。
2 程序的開發(fā)

圖1 網(wǎng)絡(luò)結(jié)構(gòu)示意圖
2.1 程序設(shè)計(jì)思想及思路
2.1.1 設(shè)計(jì)思想
2.1.1.1 銀行柜員系統(tǒng):利用并修改TCP/IP協(xié)議,利用Socket封裝TCP/IP包與銀行端和企業(yè)端交流信息,同時(shí)修改兩端計(jì)費(fèi)系統(tǒng)的相關(guān)信息。
2.1.1.2 銀行批量代扣系統(tǒng):除利用并修改TCP/IP協(xié)議,利用Socket封裝TCP/IP包與銀行端和企業(yè)端交流信息,因批量處理耗時(shí)超過網(wǎng)絡(luò)時(shí)限,還利用FTP協(xié)議與兩端交換信息。
2.1.2 理論基礎(chǔ)
2.1.2.1 WINDOWS的底層支持
Winsock編程:Winsock是Microsoft Windows下網(wǎng)絡(luò)編程接口,它包含庫函數(shù)及Windows的擴(kuò)展庫函數(shù),以便進(jìn)行編程。Windows Socket也經(jīng)常被叫做套接字、插座等等,這些名字形象地描繪了WinSock工作的原理:插頭和插座只要一插上,就建立了一個(gè)網(wǎng)絡(luò)連接,之后插頭和插座就可以通過這個(gè)連接交換數(shù)據(jù)了。
2.1.2.2 DELPHI6.0的技術(shù)支持
(1)對(duì)WinSock的支持:Delphi 5.0對(duì)WinSock編程支持的非常出色,它提供了大量功能強(qiáng)大的Internet控件方便我們進(jìn)行開發(fā)工作,其中大部分控件已經(jīng)為我們將通訊協(xié)議也封裝了進(jìn)去,我們要做的只是簡單地定義控件的屬性,編寫事件的響應(yīng)代碼即可。
(2)ClientSocket與ServerSocket的使用:ClientSocket與ServerSocket是封裝了Winsock函數(shù)的控件,它們有兩種工作模式:阻塞和非阻塞。在阻塞模式下, Socket進(jìn)行監(jiān)聽連接收發(fā)數(shù)據(jù)會(huì)暫時(shí)讓程序掛起,等Socket操作完成后才能繼續(xù)進(jìn)行;在非阻塞模式下,Socket進(jìn)行監(jiān)聽連接收發(fā)數(shù)據(jù)后會(huì)立即返回,操作成功后觸發(fā)相應(yīng)的事件處理程序來進(jìn)行處理。
2.1.2.3 TCP/IP協(xié)議和FTP協(xié)議的修改和應(yīng)用
WinSock可以將自定義的數(shù)據(jù)報(bào)文通過TCP/IP協(xié)議要求發(fā)送和接受到銀行和企業(yè)的應(yīng)用系統(tǒng)中。FTP協(xié)議通過TCP/IP及傳輸協(xié)議發(fā)送和接受報(bào)文。
2.1.3 設(shè)計(jì)思路
2.1.3.1 柜員交易的思路:銀行柜員交易系統(tǒng)利用Winsock監(jiān)聽并接受銀行端發(fā)來的報(bào)文,分析以后,確認(rèn)是何種請(qǐng)求,如查詢、交費(fèi)、沖帳、對(duì)帳等,訪問并修改企業(yè)端數(shù)據(jù)庫,得到結(jié)果以后,生成新的報(bào)文,利用并修改TCP/IP傳送到銀行端。
2.1.3.2 批量代扣的思路:(1)銀行先生成批量查詢請(qǐng)求文本(每行都是1102報(bào)文格式)并通過ftp傳給自來水公司,然后發(fā)送批量查詢請(qǐng)求報(bào)文(1101)、自來水公司返回是否已經(jīng)收到銀行的批量查詢請(qǐng)求文本(1101)。(2)銀行查詢批量查詢結(jié)果文件是否生成(1103),自來水公司返回生成的結(jié)果文件名(1103),并將批量查詢的戶號(hào)做凍結(jié)處理。(3)銀行根據(jù)查詢所得的結(jié)果文件名,通過ftp方式取回來,結(jié)果文件格式每行都是1102報(bào)文格式。(4)銀行向主機(jī)系通請(qǐng)求扣款,如一個(gè)水表號(hào)有多條欠費(fèi)記錄,則扣幾次。(5)銀行解析主機(jī)返回的結(jié)果文件,記錄數(shù)據(jù)庫?!?/p>
2.2 程序功能要求及數(shù)據(jù)和報(bào)文的定義
2.2.1 功能要求
銀行柜員系統(tǒng)功能要求
(1)查詢:通過輸入用戶號(hào),可以查詢到每個(gè)月的欠費(fèi)明細(xì),包含水費(fèi)和違約金。
(2)交費(fèi):通過輸入用戶號(hào)、金額,按月交費(fèi)。一般交到整數(shù)金額。每比對(duì)應(yīng)一個(gè)流水號(hào)。
(3)沖帳:通過輸入流水號(hào)沖相應(yīng)帳款,并生成新的流水號(hào)。只能沖當(dāng)天的帳。
(4)對(duì)總帳:通過輸入年月日,計(jì)算當(dāng)天的收費(fèi)及下帳金額。系統(tǒng)返回總帳平或不平。
(5)對(duì)明細(xì)帳:如果總帳不平,自動(dòng)按交易流水號(hào)對(duì)每筆明細(xì)帳,返回平或不平。
(6)自助銀行交費(fèi):用戶通過INTERNET網(wǎng),從卡上劃撥金額進(jìn)行交易,沖抵水費(fèi)。
銀行批量代扣系統(tǒng)功能要求
(1)批量查詢:銀行通過FTP協(xié)議,根據(jù)用戶號(hào),可以查詢到所有用戶每個(gè)月的欠費(fèi)明細(xì),包含水費(fèi)和違約金。(2)批量代扣: 銀行通過FTP協(xié)議,根據(jù)用戶號(hào),所有用戶每個(gè)月的欠費(fèi)明細(xì),包含水費(fèi)和違約金,從對(duì)應(yīng)的卡上扣款。(3)批量沖帳:銀行通過FTP協(xié)議,根據(jù)交易流水號(hào),沖掉批量代扣交易的對(duì)應(yīng)水費(fèi)。(4)批量對(duì)總帳:通過輸入年月日,計(jì)算當(dāng)天批量代扣的收費(fèi)及下帳金額。系統(tǒng)返回總帳平或不平。(5)批量對(duì)明細(xì)帳:如果總帳不平,自動(dòng)按批量代扣的交易流水號(hào)對(duì)每筆明細(xì)帳,返回平或不平。
2.2.2 數(shù)據(jù)定義
各種字段的定義如下:

2.2.3 報(bào)文定義
(1)柜員交易格式的定義
①包結(jié)構(gòu)(交易包均為定長包,由以下結(jié)構(gòu)構(gòu)成。)

②交易包定義:
包括查詢、交費(fèi)、沖帳、對(duì)總帳、對(duì)明細(xì)帳等,下面以查詢?yōu)槔敿?xì)說明(長度=4+2+4+7=17)。
欠費(fèi)查詢?cè)囼?yàn)數(shù)據(jù)

③ 對(duì)帳:對(duì)帳流程根據(jù)具體要求進(jìn)行定義,建議每天下午定時(shí)對(duì)帳。
6100對(duì)總帳申請(qǐng);如對(duì)帳成功,退出;如對(duì)帳不成功,發(fā)7100明細(xì)對(duì)帳包。
④ 交易碼定義:1100查詢類2100繳款類 3100沖帳類 4100補(bǔ)打發(fā)票類 6100對(duì)帳。
⑤ 返回碼定義(可討論):00成功 01無欠費(fèi)02交易資料不存在。
⑥ 地區(qū)碼定義: 0566池州市…。
⑦ 銀行代碼定義:01中國銀行 …。
⑧ 數(shù)據(jù)填寫規(guī)范:用戶號(hào)、用戶名、發(fā)票號(hào)等非數(shù)值類數(shù)據(jù)左對(duì)齊右補(bǔ)空格。
如:2658688

(2) 批量報(bào)文格式以及文本內(nèi)容包括:批量查詢請(qǐng)求報(bào)文 、批量查詢文件(通過ftp傳給自來水公司)內(nèi)容、批量查詢返回文件(通過ftp)內(nèi)容、銀行查詢批量查詢結(jié)果文件名、批量入帳文件內(nèi)容(每行的格式一樣)、批量銷帳請(qǐng)求報(bào)文等。下面以批量查詢文件(通過ftp傳給自來水公司)內(nèi)容為例說明。
批量查詢返回文件(通過ftp)內(nèi)容

2.3開發(fā)工具的選擇:Windwos 2000、MSSQL2000(或ORACLE)、DELPHI6.0、JAVA 。
2.4軟件的開發(fā)過程及內(nèi)容
2.4.1程序主要流程
監(jiān)聽接收分析請(qǐng)求 訪問數(shù)據(jù)庫 修改計(jì)費(fèi)信息 打包 封裝 發(fā)送
2.4.2主要程序介紹
2.4.2.1主要過程介紹
查詢返回字符串;交費(fèi)返回字符串;交費(fèi)返回字符串;沖帳返回字符串;補(bǔ)票;對(duì)總帳返回字符串;對(duì)明細(xì)帳返回字符串;增加字符串; 除去空格符;漢字增加空格字符;尾部加零;交費(fèi)返回字符串;批量查詢請(qǐng)求返回字符串;批量查詢請(qǐng)求返回字符串;批量查詢結(jié)果;批量銷帳返回字符串;批量銷帳返回字符串。
4.2.2主程序介紹
procedure TForm1.SocketServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
brxx:=socket.ReceiveText;
jym:=brxx[5]+brxx[6]+brxx[7]+brxx[8];
case strtoint(jym) of
1100:
if length(brxx)=21 then //判斷字符是否收全
begin
brjymcx:=jym; //保留撥入信息
bryhdmcx:=copy(brxx,9,2);//保留撥入信息
brdqdmcx:=copy(brxx,11,4); //保留撥入信息
bryhhcx:=copy(brxx,15,7); //保留撥入信息
cxfh();//拼查詢返回字符串
Socket.sendText(cxhfz);
end
else
begin
wxzfcx:='0006051100';
socket.SendText(wxzfcx);
end;
1101:
if length(brxx)=64 then //判斷字符是否收全
......
End.
3 網(wǎng)絡(luò)及相關(guān)軟件配制
3.1 局域網(wǎng)的網(wǎng)絡(luò)配置:網(wǎng)關(guān)路由器的配置: 172.252.25.1,前置通信機(jī):網(wǎng)關(guān)地址:172.252.25.1,內(nèi)網(wǎng)IP:192.168.1.*,外網(wǎng)IP:172.252.25.*,端口號(hào):3330,協(xié)議TCP/IP,數(shù)據(jù)庫服務(wù)器IP:192.168.1.1,WEB服務(wù)器IP:192.168.1.2 。
3.2 相關(guān)軟件的配置及工作過程:網(wǎng)關(guān)路由器的配置:通過廠家提供的驅(qū)動(dòng)程序調(diào)試修改。前置通信機(jī): 安裝WindowsXP等操作系統(tǒng)、SQL2000客戶端、 銀行代收水費(fèi)通信系統(tǒng)、端口:3330。數(shù)據(jù)庫服務(wù)器: 安裝Windows Server 2000、 SQL Server 2000,包含客戶端和服務(wù)器端軟件的安裝。
4 測(cè)試及運(yùn)行
4.1 測(cè)試過程(分查詢、交費(fèi)、沖帳、對(duì)總帳、批量等)
例如柜臺(tái)查詢:
發(fā)送:001711000105661001001
返回:01570011001001009池口軋花廠宿舍 000001-0090000086.010000000.000000000.00022003090000083.510000069.2600000000152006050000002.500000000.000000000002
4.2 運(yùn)行過程出現(xiàn)問題的分析:(1) 由于服務(wù)器端SOCKETSERVER沒有釋放,而客戶端強(qiáng)制占用服務(wù)器時(shí)(包含銀行端),服務(wù)器端提示錯(cuò)務(wù):10063。(2) 由于通信線路故障或通信設(shè)備通信中數(shù)據(jù)丟失時(shí),導(dǎo)致客戶端與用服務(wù)器端不同步時(shí)(包含銀行端),服務(wù)器端提示錯(cuò)務(wù):10053。
5 結(jié)束語
本文重點(diǎn)分析了如何定義銀行和企業(yè)的通信協(xié)議,以及通過該協(xié)議如何編寫通信程序的內(nèi)容,同時(shí)本文還分析了如何建立該通信網(wǎng)絡(luò)使通信程序正常運(yùn)轉(zhuǎn)。
主要的結(jié)論:通過通信程序使銀行端客戶程序只能按規(guī)定動(dòng)作訪問企業(yè)服務(wù)器,從而服務(wù)于用戶。
參考文獻(xiàn):
[1]張曉林,侯寶穩(wěn),吳寶江.Oracle DBA數(shù)據(jù)庫系統(tǒng)管理與應(yīng)用[M].北京:清華大學(xué)出版社,2007.
[2]張志強(qiáng).Windows編程技術(shù)[M].北京:機(jī)械工業(yè)出版社,2003.
[3]史彥軍.DElPHI5.0開發(fā)大全[M].北京:水利水電出版社, 2000.354-359.
[4]劉嘯,汪啟偉.Delphi 高級(jí)編程[M].北京:人民郵電出版社,2002.312-326.