銀企支付-詳細設計文檔
本文介紹企業在借款單,報銷單走銀企支付流程時的詳細設計。本文重點介紹整個流程需要關注的細節點,在最終實現時,對於數據表具體字段,不做介紹。
1、定義說明
- 報銷金額:申請報銷人,填寫的當次需要報銷的總金額。
- 借款金額:申請借款人,填寫的當次需要借款的金額。
- 核銷金額:指在報銷時,本身又存在借款金額未還時,報銷中,自動還款的金額,稱為核銷金額。如:借款1000元未還,報銷3000元,若本次要抵消借款的1000元,則核銷金額為1000元。核銷金額小於等於還款金額。
- 實際報銷交易金額:指報銷時,報銷金額減去核銷金額后的余額。如:核銷1000元,報銷3000元,實際報銷交易金額為2000元。
2、借款單
2.1、借款單流程
- 借款單走銀企支付:通過銀行,公司賬戶把借款金額轉賬給申請借款人賬戶。
- 借款單走內部轉賬:內部轉賬,變動相關賬戶虛擬金額。
校驗
項目 | 校驗規則 | 備注 |
---|---|---|
支付方式驗證 | 支付方式支持系統轉賬,浦發銀行銀企支付 | 無 |
支付方銀行卡號驗證 | 當支付類型為銀企模式時,支付的銀行卡號必須存在,接收方的銀行卡號必須存在 | 無 |
單據編碼驗證 | 請求交易的單據編碼數據合規性驗證 | 如編碼可信性,准確性,是否已經在處理過程中 |
幣別驗證 | 系統支持的交易幣別類型驗證 | 無 |
支付方式限定 | 不同幣別僅支持系統轉賬 | 無 |
支付方式限定 | 銀企支付僅支持幣別人民幣 | 無 |
匯率正確性 | 幣別轉賬時,匯率值合規性驗證 | 針對工作人員填寫的匯率,做合規性驗證 |
用戶信息驗證 | 查看系統中是否存在申請人員的信息 | 無 |
申請人賬號驗證 | 查看系統中申請人銀行賬戶信息是否正確 | 無 |
風控
項目 | 規則 | 備注 |
---|---|---|
額度 | 單筆借款額度在xx萬以內 | 無 |
及時還款情況 | 若存在xx筆以上借款未還款,不可在借款 | 無 |
路由
項目 | 規則 | 備注 |
---|---|---|
銀企支付 | 調用銀行接口,由公司銀行賬戶,轉賬給借款申請人的個人銀行賬號。系統層面記錄個人,公司虛擬賬戶金額變動情況。 | 無 |
系統轉賬 | 財務通過其他途徑轉賬給申請人,系統層面記錄個人,公司虛擬賬戶金額變動情況。 | 無 |
銀企支付
轉賬金額:申請人申請的借款金額。
調用銀行對外封裝的接口,做轉賬業務。不同銀行的邏輯不同,本文以浦發銀行為例。詳情參考銀企支付設計模塊。
業務處理
當銀行處理借款業務成功后,或用戶直接選擇系統內轉賬時,調用業務處理模塊。整個業務處理模塊采用事務模式,保證賬戶變化,流水記錄等相關數據操作必須滿足一致性的需求。
項目 | 規則 | 備注 |
---|---|---|
轉入流水金額 | 申請人借款成功,寫入的一條借款者入賬流水到流水表。 | 流水金額為借款金額 |
轉出流水金額 | 支付借款金額的賬戶,寫入一條轉出流水到流水表。 | 流水金額為借款金額 |
手續費 | 目前不存在交易手續費 | 無 |
轉賬日志 | 記錄轉賬相關的明細信息。 | 無 |
終態確定 | 最終完善該條借款單據的處理結果。 | 是否借款成功 |
執行流程日志
流程日志記錄單據從開始執行支付業務時,在不同節點的處理過程日志。詳情查看流程日志設計模塊。
2.2、數據流向說明
3、報銷單
3.1、報銷單流程
- 報銷單走銀企支付:通過銀行,公司賬戶把實際報銷金額轉賬給申請借款人賬戶。
- 報銷單走內部轉賬:內部轉賬,變動相關賬戶虛擬金額。
- 報銷單可關聯相關賬戶的借款信息,自動核銷借款記錄。
報銷業務分為三種情況:
- 核銷金額為零(不選擇抵消借款,或無需要核銷的借款記錄)
- 核銷金額小於報銷金額
- 核銷金額等於報銷金額。
校驗
項目 | 校驗規則 | 備注 |
---|---|---|
支付方式驗證 | 支付方式支持系統轉賬,浦發銀行銀企支付 | 無 |
單據編碼驗證 | 請求交易的單據編碼數據合規性驗證 | 如編碼可信性,准確性,是否已經在處理過程中 |
幣別驗證 | 系統支持的交易幣別類型驗證 | 無 |
支付方銀行卡號驗證 | 當支付類型為銀企模式時,支付的銀行卡號必須存在,接收方的銀行卡號必須存在 | 無 |
支付方式限定 | 不同幣別僅支持系統轉賬 | 無 |
支付方式限定 | 銀企支付僅支持幣別人民幣 | 無 |
匯率正確性 | 幣別轉賬時,匯率值合規性驗證 | 針對工作人員填寫的匯率,做合規性驗證 |
用戶信息驗證 | 查看系統中是否存在申請人員的信息 | 無 |
申請人賬號驗證 | 查看系統中申請人銀行賬戶信息是否正確 | 無 |
支付方式驗證 | 報銷實際交易金額小於等於零時,不可選擇銀企支付 | 無 |
報銷實際交易金額 | 報銷實際交易金額必須大於等於零 | 無 |
核銷金額驗證 | 該筆報銷單關聯的所有借款單,查看借款單中待核銷的金額,是否大於等於待核銷的金額值 | 無 |
核銷總金額驗證 | 該筆報銷單關聯的所有借款單核銷記錄表明細,核銷金額和必須等於核銷總金額 | 無 |
風控
項目 | 規則 | 備注 |
---|---|---|
額度 | 單筆報銷額度在xx萬以內。 | 無 |
最大關聯借款單數 | 本次報銷最多關聯xx筆借款單。 | 無 |
路由
項目 | 規則 | 備注 |
---|---|---|
銀企支付 | 調用銀行接口,由公司銀行賬戶,轉賬給申請報銷人的銀行賬號。系統層面記錄個人,公司虛擬賬戶金額變動情況。 | 無 |
系統轉賬 | 財務通過其他途徑轉賬給申請人,系統層面記錄個人,公司虛擬賬戶金額變動情況。 | 無 |
銀企支付
轉賬金額:為報銷實際交易金額。
調用銀行對外封裝的接口,做轉賬業務。不同銀行的邏輯不同,本文以浦發銀行為例。詳情參考銀企支付設計模塊。
業務處理
當銀行處理借款業務成功后,或用戶直接選擇系統內轉賬時,調用業務處理模塊。整個業務處理模塊采用事務模式,保證賬戶變化,流水記錄等相關數據操作必須滿足一致性的需求。
報銷實際交易金額大於零
項目 | 規則 | 備注 |
---|---|---|
轉入流水金額 | 報銷方報銷成功,寫入的一條個人入賬流水到流水表。 | 流水金額為報銷實際交易金額 |
轉出核銷流水金額 | 報銷方核銷成功,寫入的一條個人核銷出賬流水到流水表。 | 流水金額為核銷金額 |
轉出流水金額 | 被報銷方處理報銷金額,寫入一條轉出流水到流水表。 | 流水金額為報銷實際交易金額 |
手續費 | 目前不存在交易手續費 | 無 |
轉賬日志 | 記錄轉賬相關的明細信息。 | 無 |
核銷日志 | 記錄核銷相關的明細信息。 | 核銷金額大於零才有核銷日志 |
終態確定 | 最終完善該條報銷單據的處理結果。 | 是否核銷成功 |
實際報銷交易金額等於零
實際報銷交易金額等於零,可套用大於零的流程。當實際交易金額為零,不用寫報銷方和被報銷方的轉入轉出流水。報銷方寫核銷的轉出流水。
核銷金額等於零
核銷金額等於零,可套用大於零的流程。當核銷金額為零,寫報銷方和被報銷方的轉入轉出流水。報銷方不寫核銷的轉出流水。核銷金額為零,不用關聯借款單,不存在核銷日志和借款單狀態變更。
執行流程日志
流程日志記錄單據從開始執行支付業務時,在不同節點的處理過程日志。詳情查看流程日志設計模塊。
3.2、數據流向說明
4、銀企互聯
4.1、調用流程
本文以浦發銀行做銀企互聯介紹,銀企互聯,封裝銀行提供的交易接口,在進行交易操作時,記錄交互過程的明細信息。提交的交易請求后,銀行的處理結果包括如下三類:
- 拒絕交易:銀行櫃員或系統,拒絕或撤銷支付請求。該筆交易設置為失敗。
- 交易成功:發起請求的交易操作成功。
- 交易處理過程中:發起的交易請求,銀行還在流程處理中,屬於中間狀態。
銀企互聯發起交易請求步驟:組織支付網關,調用單筆交易請求接口8801,接收反饋結果。
- 若反饋結果成功或處理中,調用8804查詢接口。
- 若反饋失敗,則先停止業務處理。
- 由於銀行一般不會馬上反饋支付成功的結果,一般執行都需要一個時間段,便於銀行內部中轉,對於這種中轉結果,等待銀行處理,定時調用8804接口去請求銀行,查看發起的支付請求是否處理完成了。接收8804接口反饋的結果,在處理業務。
4.2、數據流向說明
5、執行流程日志
5.1、流程日志說明
執行流程主要記錄單據在支付過程中,關鍵節點的執行明細信息。流程日志至記錄執行到當前節點時的執行結果,備注信息,請求關鍵參數。當前節點真正的明細信息,在相關業務表中查詢,不記錄在日志中。
業務處理要求統一在一個事務中,執行流程日志不放在事務中。及業務處理和日志記錄時,執行流程日志記錄在緩存中,最終把緩存的數據同步到數據庫中。
|項目|規則|備注
| --- | --- |
| 業務受理驗證日志 | 當驗證都通過時,記錄驗證結果為通過,並記錄請求驗證的參數。當驗證結果失敗時,記錄驗證失敗原因和驗證請求參數。| 無 |
| 業務風控驗證 | 當驗證成功時,記錄驗證結果和請求驗證的參數。驗證失敗時,記錄驗證失敗原因和驗證的請求參數。 | 無 |
| 請求原始日志 | 記錄原始請求日志是否保存成功。 | 無 |
| 調用銀行請求報文 |記錄在調用8801時的請求時間,請求參數。| 無 |
| 銀行反饋-接收8801反饋信息 |記錄接收反饋信息時,銀行返回的信息(成功,銀行處理中,失敗)。| 無|
| 銀行反饋-接收8804反饋信息 |記錄接收到8804接口反饋時,銀行返回的信息(成功,銀行處理中,失敗)。| 記錄調用時間請求參數,返回結果|
| 業務請求處理日志 |記錄銀企通過,或轉賬時,發起的業務處理相關的日志信息,包括發起請求參數記錄。| 無|
| 流水變動日志 |記錄流水變動發生的時間,及變動的請求參數,變動處理結果。| 無|
| 核銷流程日志 |記錄核銷發生的時間,核銷請求的相關參數,核銷處理結果。| 報銷單才有|
| 單據完成狀態 |記錄單據最終的處理結果。| 無|
6、監控
通過執行過程日志,查看支付流程在各個節點的明細信息,便於監控支付在各個節點的流轉狀態。
節點 | 說明 | 相關數據表 | 備注 |
---|---|---|---|
支付校驗 | 記錄支付校驗結果,失敗時,記錄失敗原因 | 流程日志表pay_life_log |
無 |
風控校驗 | 記錄風控校驗結果,失敗時,記錄失敗原因 | 流程日志表pay_life_log |
無 |
支付請求 | 記錄支付原始信息,明細需異步查看支付的日志信息 | 流程日志表pay_life_log 支付請求表 bill_pay_request |
后續支付,業務處理基於支付原始信息做處理 |
銀行報文 | 記錄支付請求信息,明細需異步查看支付的報文 | 流程日志表pay_life_log 銀企支付入參表 bank_req_source |
銀企支付模式時,才有 |
銀行支付結果 | 記錄支付請求后,銀行返回的處理信息,明細日志異步查詢 | 流程日志表pay_life_log 銀企接口反饋信息表 bank_res_parsing_source |
銀企支付模式時,才有 |
核銷日志結果 | 記錄報銷單,核銷業務處理后的日志信息,明細日志異步查詢 | 流程日志表pay_life_log 核銷日志表 writed_off_log 借款單數據表 borrowing_bill |
報銷單核銷金額大於零時,才有 |
交易流水結果 | 記錄轉賬/銀企處理后,業務處理板塊流變更的日志。明細日志異步查詢 | 流程日志表pay_life_log 交易流水日志表 caiwu_transfer |
無 |
支付結果 | 記錄單據發起支付后,最終的支付處理結果 | 流程日志表pay_life_log |
無 |
7、差錯處理
通過監控單據的明細信息,可定位單據在不同節點的情況。在單據支付失敗時,提供差錯處理功能,便於工作人員通過操作界面,手動處理單據。差錯處理包括如下模式:
節點 | 前置條件 | 后置行為 | 描述 | 備注 |
---|---|---|---|---|
重新校驗 | 支付校驗失敗 風控校驗失敗 |
繼續走校驗后的所有流程 | 若校驗不通過,修復數據后,可發起重新校驗的操作 | 無 |
發起銀行支付 | 支付請求表bill_pay_request 記錄的銀行處理結果為失敗時銀企解析信息表 bank_res_pay 也為失敗時,才可重新發起銀行支付請求 |
繼續走請求支付后的所有流程 | 為單據重新生成一個銀行請求報文編碼,更新支付請求表bill_pay_request 中的銀企包(packet_id)字段 |
避免同一個單據,多次向銀行發起交易請求 |
發起銀行查詢 | 支付請求表bill_pay_request 記錄的銀行處理結果為處理中 |
繼續走銀行反饋信息后的流程 | 調用銀行8804查詢接口,查詢銀行處理信息 | 無 |
發起業務處理 | 支付模式為轉賬 支付模式為銀企時,銀企支付處理成功后 |
繼續走業務處理流程 | 初次業務處理失敗時,再次調用業務處理板塊重新處理 | 業務處理流程保證在一個事務下 |
更新支付模式-銀企支付更新為轉賬模式 | 支付請求表bill_pay_request 記錄的銀行處理結果為失敗時銀企解析信息表 bank_res_pay 也為失敗時,才可更新支付模式 |
繼續走業務處理流程 | 更新支付請求表bill_pay_request 中的支付模式(pay_type)字段 |
避免銀企處理成功又變更為轉賬的情況 |
8、數據庫設計
數據表每個業務不同,不便於展示數據具體字段。
借款單數據表borrowing_bill
核銷日志表writed_off_log
支付請求表bill_pay_request
銀企支付入參表bank_req_source
銀企接口反饋信息表bank_res_parsing_source
銀企解析信息表bank_res_pay
銀企調用異常表bank_res_error
報銷單據表refund_bill
轉賬日志表transfer
交易流水日志表trade_log
流程日志表pay_life_log