銀企直聯轉賬和企業通過網銀轉賬一樣,都會有手續費和退票問題,所以在實際對接中,這兩個問題是不可避免,必須要處理的業務問題。
對於手續費,企業通過銀企直聯進行轉賬操作時,正常來說每筆操作都會產生一筆手續費,這和企業通過網銀操作時並無區別,不過一般情況下,爲了吸引企業將資金留在本行,可能銀行會對本行內轉賬進行免費,但跨行轉賬涉及人行及其它銀行,這部分費用是不可避免的。而既然產生手續費,那對於企業來說就是一筆額外的開支,企業財務上肯定需要有這些手續費的對賬信息,所以我們需要知道如何查詢手續費。
你可以通過銀企直聯SDK下的BEDA.CIB
來獲取興業銀行對應的銀企直聯SDK,在興業銀行銀企直聯的API中,你只能通過通過3.3.6 賬戶餘額和交易流水分頁查詢
這個接口來查詢手續費,請求代碼示例如下,你可以通過此處來查看完整的代碼,注意此處採用了查詢接口2.0版本:
string tid = string.Format("{0:yyyyMMddHHmmss}_3.3.6", DateTime.Now);
var rq = GetRequest<FOXRQ<V1_SCUSTSTMTTRNRQ, V1_SCUSTSTMTTRNRS>>();
rq.SECURITIES_MSGSRQV1 = new V1_SCUSTSTMTTRNRQ
{
SCUSTSTMTTRNRQ = new SCUSTSTMTTRNRQ
{
TRNUID = tid,
SCUSTSTMTRQ = new SCUSTSTMTTRN_SCUSTSTMTRQ
{
VERSION = "2.0",
ACCTFROM = new ACCTFROM
{
ACCTID = mainAccountId
},
INCTRAN = new INCTRAN
{
DTEND = DateTime.Now.AddDays(-2),
DTSTART = DateTime.Now.AddDays(-3),
TRNTYPE = 2,
},
SELTYPE = 1
}
}
};
var rs = client.Execute(rq);
Console.WriteLine(rs.ResponseContent);
接口返回Xml報文如下(雖說是測試環境,但可能存在真實的銀行卡信息,所以對應部分信息已脫敏,且刪除了大部分記錄,只保留少量交易和手續費記錄):
<FOX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER>2019-03-18 10:38:44</DTSERVER>
</SONRS>
</SIGNONMSGSRSV1>
<SECURITIES_MSGSRSV1>
<SCUSTSTMTTRNRS>
<TRNUID>20190318093928_3.3.6</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<CLTCOOKIE>123</CLTCOOKIE>
<SCUSTSTMTRS>
<CURDEF>RMB</CURDEF>
<ACCTFROM>
<ACCTID>117010100100000177</ACCTID>
</ACCTFROM>
<TRANLIST MORE="N">
<DTSTART>2019-03-15</DTSTART>
<DTEND>2019-03-16</DTEND>
<STMTTRN>
<SRVRTID>99990076</SRVRTID>
<TRNTYPE>DEBIT</TRNTYPE>
<TRNCODE>227</TRNCODE>
<DTACCT>2019-03-16T14:48:59</DTACCT>
<TRNAMT>0.60</TRNAMT>
<BALAMT>111538864425.34</BALAMT>
<CURRENCY>RMB</CURRENCY>
<MEMO></MEMO>
<CORRELATE_ACCTID></CORRELATE_ACCTID>
<CORRELATE_NAME></CORRELATE_NAME>
<CHEQUENUM></CHEQUENUM>
<BILLTYPE></BILLTYPE>
<BILLNUMBER></BILLNUMBER>
<CORRELATE_BANKNAME></CORRELATE_BANKNAME>
<CORRELATE_BANKCODE></CORRELATE_BANKCODE>
<BUSINESSTYPE>銀行扣款</BUSINESSTYPE>
<ATTACHINFO>2019031600025392082000001</ATTACHINFO>
<HXJYLSBH>H00100201903160004624317620000</HXJYLSBH>
<SUMMNAME>收費</SUMMNAME>
<SUMMDESC>收費</SUMMDESC>
<PURPOSE>企業網銀轉賬手續費;</PURPOSE>
<BRANCHNO>11701</BRANCHNO>
<CHANNELCODE>204</CHANNELCODE>
<CASHFLAG>1</CASHFLAG>
<CBBZ>0</CBBZ>
<BCZBZ>0</BCZBZ>
<ROUTECHOICE></ROUTECHOICE>
<BIZREF></BIZREF>
<TEXT1></TEXT1>
<TEXT2></TEXT2>
<TEXT3></TEXT3>
</STMTTRN>
<STMTTRN>
<SRVRTID>99990076</SRVRTID>
<TRNTYPE>DEBIT</TRNTYPE>
<TRNCODE>231</TRNCODE>
<DTACCT>2019-03-16T14:48:59</DTACCT>
<TRNAMT>3000.00</TRNAMT>
<BALAMT>111538861425.34</BALAMT>
<CURRENCY>RMB</CURRENCY>
<MEMO></MEMO>
<CORRELATE_ACCTID></CORRELATE_ACCTID>
<CORRELATE_NAME>薛</CORRELATE_NAME>
<CHEQUENUM>110334936</CHEQUENUM>
<BILLTYPE></BILLTYPE>
<BILLNUMBER></BILLNUMBER>
<CORRELATE_BANKNAME>招商銀行</CORRELATE_BANKNAME>
<CORRELATE_BANKCODE></CORRELATE_BANKCODE>
<BUSINESSTYPE>網上匯款</BUSINESSTYPE>
<ATTACHINFO>2019031600025392083000001</ATTACHINFO>
<HXJYLSBH>H00100201903160004624317620000</HXJYLSBH>
<SUMMNAME>匯款</SUMMNAME>
<SUMMDESC>網上匯款</SUMMDESC>
<PURPOSE>P201903040000016--報銷-TMS系統-物流預支(EBP-20190304-0004)</PURPOSE>
<BRANCHNO>11701</BRANCHNO>
<CHANNELCODE>204</CHANNELCODE>
<CASHFLAG>1</CASHFLAG>
<CBBZ>0</CBBZ>
<BCZBZ>0</BCZBZ>
<ROUTECHOICE>4</ROUTECHOICE>
<BIZREF></BIZREF>
<TEXT1></TEXT1>
<TEXT2></TEXT2>
<TEXT3></TEXT3>
</STMTTRN>
<STMTTRN>
<SRVRTID>99990078</SRVRTID>
<TRNTYPE>DEBIT</TRNTYPE>
<TRNCODE>227</TRNCODE>
<DTACCT>2019-03-16T14:50:33</DTACCT>
<TRNAMT>4.00</TRNAMT>
<BALAMT>111538861120.73</BALAMT>
<CURRENCY>RMB</CURRENCY>
<MEMO></MEMO>
<CORRELATE_ACCTID></CORRELATE_ACCTID>
<CORRELATE_NAME></CORRELATE_NAME>
<CHEQUENUM></CHEQUENUM>
<BILLTYPE></BILLTYPE>
<BILLNUMBER></BILLNUMBER>
<CORRELATE_BANKNAME></CORRELATE_BANKNAME>
<CORRELATE_BANKCODE></CORRELATE_BANKCODE>
<BUSINESSTYPE>銀行扣款</BUSINESSTYPE>
<ATTACHINFO>2019031600025392086000001</ATTACHINFO>
<HXJYLSBH>H00100201903160004624189420000</HXJYLSBH>
<SUMMNAME>收費</SUMMNAME>
<SUMMDESC>收費</SUMMDESC>
<PURPOSE>企業網銀轉賬手續費;</PURPOSE>
<BRANCHNO>11701</BRANCHNO>
<CHANNELCODE>204</CHANNELCODE>
<CASHFLAG>1</CASHFLAG>
<CBBZ>0</CBBZ>
<BCZBZ>0</BCZBZ>
<ROUTECHOICE></ROUTECHOICE>
<BIZREF></BIZREF>
<TEXT1></TEXT1>
<TEXT2></TEXT2>
<TEXT3></TEXT3>
</STMTTRN>
<STMTTRN>
<SRVRTID>99990078</SRVRTID>
<TRNTYPE>DEBIT</TRNTYPE>
<TRNCODE>231</TRNCODE>
<DTACCT>2019-03-16T14:50:33</DTACCT>
<TRNAMT>0.01</TRNAMT>
<BALAMT>111538861120.72</BALAMT>
<CURRENCY>RMB</CURRENCY>
<MEMO></MEMO>
<CORRELATE_ACCTID></CORRELATE_ACCTID>
<CORRELATE_NAME>馬</CORRELATE_NAME>
<CHEQUENUM>110334938</CHEQUENUM>
<BILLTYPE></BILLTYPE>
<BILLNUMBER></BILLNUMBER>
<CORRELATE_BANKNAME>建設銀行</CORRELATE_BANKNAME>
<CORRELATE_BANKCODE></CORRELATE_BANKCODE>
<BUSINESSTYPE>網上匯款</BUSINESSTYPE>
<ATTACHINFO>2019031600025392087000001</ATTACHINFO>
<HXJYLSBH>H00100201903160004624189420000</HXJYLSBH>
<SUMMNAME>匯款</SUMMNAME>
<SUMMDESC>網上匯款</SUMMDESC>
<PURPOSE>P201903040000009--報銷</PURPOSE>
<BRANCHNO>11701</BRANCHNO>
<CHANNELCODE>204</CHANNELCODE>
<CASHFLAG>1</CASHFLAG>
<CBBZ>0</CBBZ>
<BCZBZ>0</BCZBZ>
<ROUTECHOICE>4</ROUTECHOICE>
<BIZREF></BIZREF>
<TEXT1></TEXT1>
<TEXT2></TEXT2>
<TEXT3></TEXT3>
</STMTTRN>
</TRANLIST>
<LEDGERBAL>
<BALAMT>111540544183.22</BALAMT>
<DTASOF>2019-03-18</DTASOF>
</LEDGERBAL>
<AVAILBAL>
<BALAMT>111536518538.20</BALAMT>
<DTASOF>2019-03-18</DTASOF>
</AVAILBAL>
</SCUSTSTMTRS>
</SCUSTSTMTTRNRS>
</SECURITIES_MSGSRSV1>
</FOX>
在報文中,我們可以發現轉賬對應的流水記錄中BUSINESSTYPE
爲網上匯款,而其流水是緊鄰轉賬記錄,其BUSINESSTYPE
爲銀行扣款,當然僅憑此還不能判斷哪條記錄爲對應手續費,但我們可以發現轉賬流水和手續費對應的SRVRTID
是完全一樣的,再細看包括其DTACCT
交易時間也是完全一樣,所以我們可以通過這兩個字段來將結果進行分組。
rs.SECURITIES_MSGSRSV1.SCUSTSTMTTRNRS.SCUSTSTMTRS.TRANLIST
.List.GroupBy(t=>new {t.SRVRTID,t.DTACCT })
轉賬和其對應的手續費如何查詢我們是已經知道了,但如何知道該筆匯款對應企業內部系統的哪條記錄呢?興業銀行的API沒提供專門的字段用於記錄外部系統id,而是通過TRNUID
來區分不同的交易記錄,在興業銀行交易中標誌一筆交易的唯一性字段爲HXJYLSBH
(核心交易流水編號),該字段只能通過3.3.6 賬戶餘額和交易流水分頁查詢
查詢才能得到,而3.4.1 轉賬匯款指令提交
或3.4.2 查詢轉賬交易狀態
只能獲取交易是否成功,並不能獲取HXJYLSBH
,所以我們需要通過其它方式來間接的記錄該筆交易在企業內部系統中的唯一性id,如上面報文所示,我們可以通過PURPOSE
字段來間接的記錄企業內部系統id,然後我們可以按照特定的規則來判斷PURPOSE
,以便達到兩個系統內交易流水的映射關係。
當然,如果只是手續費,HXJYLSBH
並不重要,該字段的用處是輔助判斷退票如何關聯轉賬交易。所謂退票,就是指跨行交易時,當銀行將轉賬信息提交至人行,人行響應成功時,銀行這邊就會記錄該筆交易狀態爲已成功PAYOUT
,但實際此時人行只是接收信息成功,真正是否能交易成功,需要待人行將轉賬信息提交給目標銀行,目標銀行在處理之後,纔會給出是否交易成功,如果賬號信息之類有誤,那麼目標銀行就會反饋交易失敗,此時人行會再通知發起銀行該筆交易失敗,在興業銀行中,它不會去更新之前那筆狀態爲PAYOUT
的交易記錄,而是會產生一筆退票流水,所以我們的問題就是如何查詢這筆退票流水。
在興業銀行某文檔中有以下截圖的一段內容,當然很可惜我沒能拿到這份文檔。
圖中內容詳細的描述了應當如何查詢退票流水,因爲同樣是調用的是3.3.6 賬戶餘額和交易流水分頁查詢
接口,所以此處就不再羅列示例代碼,請自行替換SELTYPE
值爲3進行查詢。當然圖中只是闡述瞭如何查詢退票流水,以及如何去查詢其對應的轉賬交易記錄,並沒有描述如何得知轉賬失敗原因,因爲測試環境中未能查詢到退票記錄,所以此處只能以另外一張截圖示例:
通過截圖,可以發現PURPOSE
記錄了退票原因,所以我們可以將該字段的內容持久化到企業內部系統中,用於展示轉賬失敗原因。
最後,按興業銀行相關人員回饋,銀行內部轉賬(即收款賬戶爲興業銀行賬戶)時,都是實時返回,是不可能會出現退票現象的,但個人建議還是與跨行交易一視同仁,按都可能存在退票這種業務情況進行處理。