diff --git a/tysk.go b/tysk.go index 258ed46..07deef9 100644 --- a/tysk.go +++ b/tysk.go @@ -145,7 +145,7 @@ func (g *Tysk) BatchPay(batchPayReq tysk_entity.BatchPayReq) (res tysk_entity.Ba } func (g *Tysk) BatchPayQuery(batchPayQueryReq tysk_entity.BatchPayQueryReq) (res tysk_entity.BatchPayQueryResp, err error) { - err = g.handleRequest(tysk_constant.BatchPayQueryReq, g.handleReqStructToMap(batchPayQueryReq), &res) + err = g.handleRequest(tysk_constant.BatchPayQuery, g.handleReqStructToMap(batchPayQueryReq), &res) if err != nil { return } @@ -153,9 +153,81 @@ func (g *Tysk) BatchPayQuery(batchPayQueryReq tysk_entity.BatchPayQueryReq) (res } func (g *Tysk) PayArrange(payArrangeReq tysk_entity.PayArrangeReq) (success bool, err error) { - err = g.handleRequest(tysk_constant.PayArrangeReq, g.handleReqStructToMap(payArrangeReq), nil) + err = g.handleRequest(tysk_constant.PayArrange, g.handleReqStructToMap(payArrangeReq), nil) if err != nil { return } return true, nil } + +func (g *Tysk) PayArrangeQuery(PayArrangeQueryReq tysk_entity.PayArrangeQueryReq) (res tysk_entity.PayArrangeQueryResp, err error) { + err = g.handleRequest(tysk_constant.PayArrangeQuery, g.handleReqStructToMap(PayArrangeQueryReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) PayArrangeBillQuery(PayArrangeBillQueryReq tysk_entity.PayArrangeBillQueryReq) (res tysk_entity.PayArrangeBillQueryResp, err error) { + err = g.handleRequest(tysk_constant.PayArrangeBillQuery, g.handleReqStructToMap(PayArrangeBillQueryReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) BatchesPayArrangeBillQuery(BatchesPayArrangeBillQueryReq tysk_entity.BatchesPayArrangeBillQueryReq) (res tysk_entity.BatchesPayArrangeBillQueryResp, err error) { + err = g.handleRequest(tysk_constant.BatchesPayArrangeBillQuery, g.handleReqStructToMap(BatchesPayArrangeBillQueryReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) TGBPay(TGBPayReq tysk_entity.TGBPayReq) (res tysk_entity.TGBPayResp, err error) { + err = g.handleRequest(tysk_constant.TGBPay, g.handleReqStructToMap(TGBPayReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) RefundTransQuery(RefundTransQueryReq tysk_entity.RefundTransQueryReq) (res tysk_entity.RefundTransQueryResp, err error) { + err = g.handleRequest(tysk_constant.RefundTransQuery, g.handleReqStructToMap(RefundTransQueryReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) BatchSalarySend(BatchSalarySendReq tysk_entity.BatchSalarySendReq) (res tysk_entity.BatchSalarySendResp, err error) { + err = g.handleRequest(tysk_constant.BatchSalarySend, g.handleReqStructToMap(BatchSalarySendReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) BankInfoQuery(BankInfoQuery tysk_entity.BankInfoQueryReq) (res tysk_entity.BankInfoQueryResp, err error) { + err = g.handleRequest(tysk_constant.BankInfoQuery, g.handleReqStructToMap(BankInfoQuery), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) BillList(BillListReq tysk_entity.BillListReq) (res tysk_entity.BillListResp, err error) { + err = g.handleRequest(tysk_constant.BillList, g.handleReqStructToMap(BillListReq), &res) + if err != nil { + return + } + return +} + +func (g *Tysk) BillDetail(BillDetailReq tysk_entity.BillDetailReq) (res tysk_entity.BillDetailResp, err error) { + err = g.handleRequest(tysk_constant.BillList, g.handleReqStructToMap(BillDetailReq), &res) + if err != nil { + return + } + return +} diff --git a/tyskFacecade.go b/tyskFacecade.go index ae3c0f9..e47b466 100644 --- a/tyskFacecade.go +++ b/tyskFacecade.go @@ -9,6 +9,8 @@ import ( type TyskFacade interface { Account //账户中心 Settle //结算中心 + Common //公共中心 + Bill //票据中心 } @@ -171,4 +173,95 @@ type Settle interface { //5.若联动支付为是时,系统对应生成单笔或批量类型的联动支付排款任务。若未通过校验,则接口报错并提示“该账户无法支持联动支付”。 //6.预算占用校验规则:若该排款请求根据配置需占用预算,则对预算占用事项进行校验,若未通过校验则返回错误及提示“无预算占用记录”,进行校验时,预算占用事项流水号(预算占用接口中“交易流水号”)需与本接口“外部排款流水号”保持一致。 PayArrange(payArrangeReq tysk_entity.PayArrangeReq) (success bool, err error) + + //PayArrangeQuery 排款查证 + //企业ERP等系统调用该接口查询排款任务的执行情况。 + // 注意事项: + //1.直联用户需在司库系统配置付方单位的查询权限。 + //2.使用排款申请接口返回的原外部排款批次号来进行查证,将返回该笔排款任务拆分出的各笔付款任务状态。 + //2.1 排款-单笔付款情况下进行查证,查证接口rows标签下不根据未支付金额返回付款金额与之相同的未排期明细数据。 + //2.2 排款-批量付款情况下进行查证,查证接口rows标签下不会返回未排期的付款数据。 + //3.当结算方式为银承开票、商承开票、银承转让或商承转让时,返回相关的票据汇总信息。 + //4.当结算方式为现金支票、转账支票、银行保函、信用证、其他时,子任务状态为“支付成功”时,返回线下付款日期。 + PayArrangeQuery(PayArrangeQueryReq tysk_entity.PayArrangeQueryReq) (res tysk_entity.PayArrangeQueryResp, err error) + + //PayArrangeBillQuery 排款票据信息查询 + //用于查询排款结算方式为银承开票、商承开票、银承转让或商承转让时,司库系统接收该请求。 + // 注意事项: + //1.直联用户需在司库系统配置付方单位的查询权限,[公共中心]-[用户权限管理]-[机构权限设置]进行维护。 + //2.接口支持一次最大20条; + //3.使用排款申请接口返回的原外部排款批次号、子任务编号来进行查证,将按子任务号或外部排款批次号得查询结果返回票据信息。 + //4.当调用排款查证接口返回子任务的结算方式为银承开票、商承开票、银承转让或商承转让时使用。 + PayArrangeBillQuery(PayArrangeBillQueryReq tysk_entity.PayArrangeBillQueryReq) (res tysk_entity.PayArrangeBillQueryResp, err error) + + //BatchesPayArrangeBillQuery 3.2.8多批次排款票据查询 + //用于查询排款结算方式为银承开票、商承开票、银承转让或商承转让时,司库系统接收该请求。 + // 注意事项: + //1.直联用户需在司库系统配置付方单位的查询权限,[公共中心]-[用户权限管理]-[机构权限设置]进行维护。 + //2.接口支持一次最大100条; + //3.使用排款申请接口返回的原外部排款批次号、子任务编号来进行查证,将按子任务号或外部排款批次号得查询结果返回票据信息。 + //4.当调用排款查证接口返回子任务的结算方式为银承开票、商承开票、银承转让或商承转让时使用。 + BatchesPayArrangeBillQuery(BatchesPayArrangeBillQueryReq tysk_entity.BatchesPayArrangeBillQueryReq) (res tysk_entity.BatchesPayArrangeBillQueryResp, err error) + + //TGBPay 3.2.9团金宝付款 + //用于发起团金宝交易,支持落地经办、提交审批、直接付款三种模式,用户可以根据设置信息选择业务处理模式。 + // 注意事项: + //1.外部请求批次号不能重复,包括批量付款、团金宝交易 + //2.操作人必须有ERP团金宝业务权限、付款账户操作权限 + //3.收款信息最大支持1000笔 + //4.仅支持人民币交易 + //5.在司库中按照如下业务模式参数进行处理: + //1)审批处理,ERP传输的单据,直接到流程中心-待审批任务; + //2) 直接出账,只走司库接口,单据可在团金宝/薪酬代发查询功能查询; + //3)经办处理时,团金宝经办页面进行后续操作 + //6.若选择联动支付,增加权限校验,校验付方账号必须是资金池成员账号且开通联动下拨功能,若该账户支持联动支付,资金会先从核心账户转入该支付账户中进行支付,资金下拨结果可在【多笔付款查证】接口中进行查看; + TGBPay(TGBPayReq tysk_entity.TGBPayReq) (res tysk_entity.TGBPayResp, err error) + + //RefundTransQuery 3.2.9团金宝付款 + //用于查询状态已标识为“已退汇”的支付单据,包括本地制单、ERP来源、排款来源以及各渠道来源的单笔付款、批量付款、薪酬支付、费用报销、付款计划、用款申请交易。 + // 注意事项: + //1.接口支持一次最大20条,日期最大范围为当日T-1前90天内的交易; + //2.请求使用的银企直联用户必须有ERP退汇业务权限、付款账户查询权限; + //3.退汇交易查询支持自动退汇和手工退汇交易查询,其中自动退汇交易查询银行范围包括:中信银行、招商银行、平安银行退汇情况的交易查询。 + //4.付款类型是“团金宝”业务,仅支持单笔记账方式的退汇明细查询。 + RefundTransQuery(RefundTransQueryReq tysk_entity.RefundTransQueryReq) (res tysk_entity.RefundTransQueryResp, err error) + + //BatchSalarySend 3.2.11批量代发(薪酬代发) + //该接口用于发起薪酬代发申请,调用该接口推送请求,司库系统接收该请求后生成薪酬代发的申请任务,并返回受理状态。受理成功后,客户需依据司库系统配置的审批流程参数及工作流,完成司库系统的审批流转。待审批通过后,系统自动执行付款交易指令,用户可通过批量付款/团金宝查证交易进行交易状态的查询。 + // 注意事项: + //1.本交易为一借多贷模式,1个付方账号,多个收方账号; + //2.付方账号需提前在司库系统内维护为直联账户并为直联用户赋予薪酬代发支付权限及付方单位的机构权限; + //3.接口调用后立即返回司库受理状态,此状态只表示交易请求是否受理,若校验通过该笔付款将进入【司库系统】-【结算中心】-【薪酬代发】功能,支付是否成功需稍后使用多笔查证交易进行查询。 + //4.在司库中按照如下业务模式参数进行处理: + //1)审批处理,ERP传输的单据,直接到流程中心-待审批任务; + //2)直接出账,只走司库接口,单据可在薪酬代发查询功能查询; + //3)经办处理时,需要在司库公共中心进行流程配置,薪酬代发经办页面进行后续操作。 + //5.若该账户支持联动支付,资金会先从核心账户转入该支付账户中进行支付,资金下拨结果可在【批量付款查证】接口中进行查看; + BatchSalarySend(BatchSalarySendReq tysk_entity.BatchSalarySendReq) (res tysk_entity.BatchSalarySendResp, err error) +} + +type Common interface { + //BankInfoQuery 3.3.1境内银行网点信息查询 + //用于查询境内银行网点信息查询,企业调用该接口查询网点请求,司库系统接收该请求后返回境内银行网点信息,支持分页查询,参数为银行编号和区域编码ID(详见附件),银行编码和区域编码不能同时都为空。 + // 注意事项: + //1.当前支持境内银行网点信息查询,含外资行境内网点; + //2.银行编码和区域码详见【附录5.9-银行编码信息和区域信息V1.0】,查询时这两个参数不能同时为空; + //3.支持分页查询; + BankInfoQuery(BankInfoQuery tysk_entity.BankInfoQueryReq) (res tysk_entity.BankInfoQueryResp, err error) +} + +type Bill interface { + //BillList 3.4.1票据列表查询 + //企业ERP等系统调用该接口发起票据信息查询,支持持有票据、票据行为申请、票据行为签收三类场景,司库系统接收该请求后返回对应的票据信息,查询结果按照【账号】+【票据包号】+【子票区间】进行去重。 + //持有票据:选择该条件进行查询可以列表展示指客户当前持有的票据 + //票据行为申请:选择该条件(支持全选或复选)可以查询客户发起过对应申请行为的票据 + //票据行为签收:选择该条件(支持全选或复选)可以查询客户发起过对应签收行为的票据 + // 注意事项: + //1.请求使用的银企直联用户需有相关账号的查询权限 ; + //2.该交易使用分页查询,起始记录号从1开始,每页最多显示200条记录。 + BillList(BillListReq tysk_entity.BillListReq) (res tysk_entity.BillListResp, err error) + //BillDetail 3.4.2票据详情查询 + // 注意事项: + //1.当输入账号进行查询时,系统需校验用户对票据所属的账号具有查询权限; + BillDetail(BillDetailReq tysk_entity.BillDetailReq) (res tysk_entity.BillDetailResp, err error) } diff --git a/tysk_constant/param_type.go b/tysk_constant/param_type.go index 6b6d87b..8790644 100644 --- a/tysk_constant/param_type.go +++ b/tysk_constant/param_type.go @@ -272,3 +272,41 @@ var SettlementModeMap = map[SettlementMode]string{ SettlementModeProjectLoan: "项目贷支付", SettlementModeOther: "其他", } + +type ItlgPreparType string + +const ( + ItlgPreparTypeSingle = "0" + ItlgPreparTypeBatch = "1" +) + +var ItlgPreparTypeMap = map[ItlgPreparType]string{ + ItlgPreparTypeSingle: "单笔记账", + ItlgPreparTypeBatch: "合笔记账", +} + +type ItlgRefundFlag string + +const ( + ItlgRefundFlagSingle = "0" + ItlgRefundFlagBatch = "1" +) + +var ItlgRefundFlagMap = map[ItlgRefundFlag]string{ + ItlgPreparTypeSingle: "单笔退款", + ItlgPreparTypeBatch: "合并退款", +} + +type QueryType string + +const ( + QueryTypeHad = "00" + QueryTypeApply = "01" + QueryTypeRec = "02" +) + +var QueryTypeMap = map[QueryType]string{ + QueryTypeHad: "持有", + QueryTypeApply: "申请", + QueryTypeRec: "签收", +} diff --git a/tysk_constant/request_code.go b/tysk_constant/request_code.go index af9ac1d..7608c3e 100644 --- a/tysk_constant/request_code.go +++ b/tysk_constant/request_code.go @@ -3,22 +3,31 @@ package tysk_constant type RequestCode string const ( - GetAccountBalance RequestCode = "SKBALQRY" - GetTodayTransHis RequestCode = "SKTRNCOL" - GetAccountInfo RequestCode = "SKBACQRY" - ReceiptApply RequestCode = "SKEDDRSQ" - ReceiptQuery RequestCode = "SKEDDQRY" - ReceiptDownload RequestCode = "SKEDCDTD" - TransHisQueryApply RequestCode = "SKTRNHCL" - TransHisQuery RequestCode = "SKTRNHCT" - BalanceHisQueryApply RequestCode = "SKBALHSQ" - BalanceHisQuery RequestCode = "SKBALHCX" - AccountsTransHisQuery RequestCode = "SKTRNNCT" - SinglePay RequestCode = "SKDLTTRN" - SinglePayQuery RequestCode = "SKDLBATD" - BatchPay RequestCode = "SKDLPAAT" - BatchPayQueryReq RequestCode = "SKDLBATC" - PayArrangeReq RequestCode = "SKDLFNMA" + GetAccountBalance RequestCode = "SKBALQRY" + GetTodayTransHis RequestCode = "SKTRNCOL" + GetAccountInfo RequestCode = "SKBACQRY" + ReceiptApply RequestCode = "SKEDDRSQ" + ReceiptQuery RequestCode = "SKEDDQRY" + ReceiptDownload RequestCode = "SKEDCDTD" + TransHisQueryApply RequestCode = "SKTRNHCL" + TransHisQuery RequestCode = "SKTRNHCT" + BalanceHisQueryApply RequestCode = "SKBALHSQ" + BalanceHisQuery RequestCode = "SKBALHCX" + AccountsTransHisQuery RequestCode = "SKTRNNCT" + SinglePay RequestCode = "SKDLTTRN" + SinglePayQuery RequestCode = "SKDLBATD" + BatchPay RequestCode = "SKDLPAAT" + BatchPayQuery RequestCode = "SKDLBATC" + PayArrange RequestCode = "SKDLFNMA" + PayArrangeQuery RequestCode = "SKDLBAFN" + PayArrangeBillQuery RequestCode = "SKDLBLNF" + BatchesPayArrangeBillQuery RequestCode = "SKDLBLNG" + TGBPay RequestCode = "SKDLITLG" + RefundTransQuery RequestCode = "SKQRRTAN" + BatchSalarySend RequestCode = "SKDLPYCD" + BankInfoQuery RequestCode = "SKPUBQLH" + + BillList RequestCode = "SKBILINF" ) type ResponseCode string diff --git a/tysk_entity/sk_req.go b/tysk_entity/sk_req.go index 8a050a9..f007781 100644 --- a/tysk_entity/sk_req.go +++ b/tysk_entity/sk_req.go @@ -8,8 +8,8 @@ type ( AccountList []tysk_constant.AccountNo Page struct { - StartRecord int32 `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 - PageNumber int32 `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 + StartRecord int `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 + PageNumber int `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 } GetAccountBalanceReq struct { @@ -19,13 +19,13 @@ type ( TodayTransHisReq struct { AccountNo AccountList `json:"userDataList.accountNo"` TranType tysk_constant.TranType `json:"tranType"` //01:所有 02:账户支出(借) 03:账户收入(贷) - StartRecord int32 `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 - PageNumber int32 `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 + StartRecord int `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 + PageNumber int `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 } AccountInfoReq struct { - StartRecord int32 `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 - PageNumber int32 `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 + StartRecord int `json:"startRecord"` //查询开始的记录编号,从1开始,超过最大记录数将返回空列表 + PageNumber int `json:"pageNumber"` //每次查询请求的记录数量,最多支持100条记录 BlngBnkId *tysk_constant.BankCode `json:"blngBnkId,omitempty"` //所属银行 AccCgyId *tysk_constant.AccCgyId `json:"tranType,omitempty"` //账户性质(原:账户类型),1:一般账户 2:基本账户 3:专用账户 4:临时账户,默认为全部 AccTpId *tysk_constant.AccTpId `json:"accTpId,omitempty"` //存款类型(原:账户种类),1:活期 2:定期 3:通知 4:活期保证金 5:定期保证金,默认为全部 @@ -50,8 +50,8 @@ type ( StartDate string `json:"startDate,omitempty" comment:"查询起始日期"` // 查询开始日期(char(8),选填,yyyyMMdd格式,默认取申请单起始日期,与结束日期间隔≤30天) EndDate string `json:"endDate,omitempty" comment:"查询结束日期"` // 查询结束日期(char(8),选填,yyyyMMdd格式,默认取申请单结束日期,与开始日期间隔≤30天) TranType tysk_constant.TranType `json:"tranType,omitempty" comment:"交易类型"` // 交易类型(char(2),选填:01-全部交易/02-账户支出/03-账户收入) - StartRecord int32 `json:"startRecord" comment:"起始记录号" validate:"required,numeric,min=1"` // 查询起始记录编号(char(4),必填,从1开始) - PageNumber int32 `json:"pageNumber" comment:"请求记录条数" validate:"required,numeric,max=100"` // 每页记录数(char(4),必填,最大100条) + StartRecord int `json:"startRecord" comment:"起始记录号" validate:"required,numeric,min=1"` // 查询起始记录编号(char(4),必填,从1开始) + PageNumber int `json:"pageNumber" comment:"请求记录条数" validate:"required,numeric,max=100"` // 每页记录数(char(4),必填,最大100条) } // ReceiptDownloadReq 银企直联接口请求参数 @@ -74,8 +74,8 @@ type ( StartDate *string `json:"startDate,omitempty" comment:"起始日期" validate:"omitempty,len=8,datetime=20060102"` // 查询开始日期(char(8),选填,yyyyMMdd格式,默认取SKTRNHCL输入的起始日期) EndDate *string `json:"endDate,omitempty" comment:"终止日期" validate:"omitempty,len=8,datetime=20060102"` // 查询结束日期(char(8),选填,yyyyMMdd格式,默认取SKTRNHCL输入的终止日期) TranType tysk_constant.TranType `json:"tranType" comment:"交易类型" validate:"required,oneof=01 02 03"` // 交易类型(char(2),必填:01-全部交易/02-账户支出/03-账户收入) - StartRecord int32 `json:"startRecord" comment:"起始记录号" validate:"required,len=4,numeric"` // 查询起始记录编号(char(4),必填,从1开始) - PageNumber int32 `json:"pageNumber" comment:"请求记录条数" validate:"required,len=4,numeric,max=100"` // 每页记录数(char(4),必填,最大100条) + StartRecord int `json:"startRecord" comment:"起始记录号" validate:"required,len=4,numeric"` // 查询起始记录编号(char(4),必填,从1开始) + PageNumber int `json:"pageNumber" comment:"请求记录条数" validate:"required,len=4,numeric,max=100"` // 每页记录数(char(4),必填,最大100条) } // BalanceHisQueryApplyReq 历史余额查询申请 @@ -91,8 +91,8 @@ type ( ClientID string `json:"clientID" comment:"记录申请编号" validate:"required,len=20,alphanum"` // 客户查询自定义的流水号(char(20),必填,仅支持数字或字母组合) StartDate *string `json:"startDate,omitempty" comment:"起始日期" validate:"omitempty,len=8,datetime=20060102,balanceDateRange"` // 查询余额范围的开始日期(char(8),选填,yyyyMMdd格式) EndDate *string `json:"endDate,omitempty" comment:"终止日期" validate:"omitempty,len=8,datetime=20060102,balanceDateRange"` // 查询余额范围的结束日期(char(8),选填,yyyyMMdd格式) - StartRecord int32 `json:"startRecord" comment:"起始记录号" validate:"required,len=4,numeric"` // 查询开始的记录编号(char(4),必填,从1开始) - PageNumber int32 `json:"pageNumber" comment:"请求记录条数" validate:"required,len=4,numeric,max=20"` // 每次查询请求的记录数量(char(4),必填,最多支持20条记录) + StartRecord int `json:"startRecord" comment:"起始记录号" validate:"required,len=4,numeric"` // 查询开始的记录编号(char(4),必填,从1开始) + PageNumber int `json:"pageNumber" comment:"请求记录条数" validate:"required,len=4,numeric,max=20"` // 每次查询请求的记录数量(char(4),必填,最多支持20条记录) } // AccountsTransHisQueryReq 多账户历史明细查询 @@ -100,8 +100,8 @@ type ( StartDate string `json:"startDate" validate:"required,len=8,datetime=20060102,dateRange"` // 起始日期(char(8),必填,yyyyMMdd格式) EndDate string `json:"endDate" validate:"required,len=8,datetime=20060102,dateRange"` // 终止日期(char(8),必填,yyyyMMdd格式) TranType tysk_constant.TranType `json:"tranType" validate:"required,len=2,oneof=01 02 03"` // 借贷方向(char(2),必填:01-全部交易;02-借;03-贷) - StartRecord int32 `json:"startRecord" validate:"required,len=4,numeric,min=1"` // 起始记录号(char(4),必填,从1开始) - PageNumber int32 `json:"pageNumber" validate:"required,len=4,numeric,max=100"` // 请求记录条数(char(4),必填,最多100条) + StartRecord int `json:"startRecord" validate:"required,len=4,numeric,min=1"` // 起始记录号(char(4),必填,从1开始) + PageNumber int `json:"pageNumber" validate:"required,len=4,numeric,max=100"` // 请求记录条数(char(4),必填,最多100条) AccountNo AccountList `json:"userDataList.accountNo" validate:"required,dive"` // 账号列表(必填,最多10个账号) } @@ -109,8 +109,8 @@ type ( SinglePayReq struct { ExternalNum string `json:"externalNum" comment:"外部请求流水号" validate:"required,max=50"` // 最大长度为50,不能重复 LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag,omitempty" comment:"联动支付" validate:"omitempty,oneof=00 01"` // 00:否,01:是 默认为否 - PypPartyAccnum string `json:"pypartyAccnum" comment:"付方账号" validate:"required,max=32,accountFormat"` // 允许输入特定字符,至少一个数字 - RcvPyAccnum string `json:"rcvpyAccnum" comment:"收方账号" validate:"required,max=32,accountFormat"` // 允许输入特定字符,至少一个数字 + PypPartyAccnum tysk_constant.AccountNo `json:"pypartyAccnum" comment:"付方账号" validate:"required,max=32,accountFormat"` // 允许输入特定字符,至少一个数字 + RcvPyAccnum tysk_constant.AccountNo `json:"rcvpyAccnum" comment:"收方账号" validate:"required,max=32,accountFormat"` // 允许输入特定字符,至少一个数字 RcvPyAccnm string `json:"rcvpyAccnm" comment:"收方户名" validate:"required,max=300,nameFormat"` // 最大支持长度300(汉字占3,非汉字占1) IsCheckRcvpartyDepbnkId *tysk_constant.IsCheckRcvpartyDepbnkId `json:"isCheckRcvpartyDepbnkId,omitempty" comment:"是否准确校验开户行行名" validate:"omitempty,oneof=00 01"` // 00:是  01:否 默认为是 当该字段为00是时:同时传入开户行行名和联行号,以联行号为准; 当该字段为01否时:同时传入开户行行名和联行号,以联行号为准;只传入开户行行名直接返显开户行,不再校验开户行行名在境内网点表是否存在,若用户上送的开户行行名匹配不上所属银行,则【收方银行】展示--,【是否跨行】字段,若用户上送,则以用户上送的为准,若用户未上送,收方银行为空,则无法按照收付方银行判断出是否跨行,则是否跨行默认为是;若用户上送的开户行行名匹配不出联行号时,则【收方联行号】、【收方地区】展示为--;只传入联行号,以联行号为准。 RcvPartyDepbnkId *string `json:"rcvpartyDepbnkId,omitempty" comment:"收方开户行" validate:"omitempty,max=80"` // 收方开户行 ,收方开户行和收方联行号选择一个输入即可 付款种类对私付款且账户为银联卡时,可根据卡BIN号识别收方开户行、收方联行号字段,两字段不必输,非空情况以上送值为准 @@ -140,9 +140,9 @@ type ( BatchPayReq struct { ExternalBatNum string `json:"externalBatNum" validate:"required,max=30"` // 外部请求批次号 LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag,omitempty" validate:"omitempty,oneof=00 01"` // 联动支付标志 - PyPartyAccNum string `json:"pypartyAccnum" validate:"required,max=32,account"` // 付方账号 + PyPartyAccNum tysk_constant.AccountNo `json:"pypartyAccnum" validate:"required,max=32,account"` // 付方账号 CurrencyID string `json:"currencyID" validate:"required,oneof=CNY"` // 币种(只支持CNY) - TotNbr string `json:"totNbr" validate:"required,len=4,numeric,max=1000"` // 付款总笔数 + TotNbr int `json:"totNbr" validate:"required,len=4,numeric,max=1000"` // 付款总笔数 Amt float64 `json:"amt" validate:"required,numeric,len=15"` // 付款总金额(decimal(15,2)) UrgntAprvFlag *tysk_constant.CommonBool `json:"urgntAprvFlag,omitempty" validate:"required,oneof=00 01"` // 00:否,01:是 默认为否 RsrvtnFlag *tysk_constant.CommonBool `json:"rsrvtnFlag,omitempty" validate:"required,oneof=00 01"` // 00:否 01:是 默认为否,是否预约付款状态为01,预约时间必填 @@ -151,11 +151,10 @@ type ( List []BatchPayList `json:"debitList" validate:"required,dive"` // 付款明细列表 } - // PaymentDetail 单笔付款明细 BatchPayList struct { ExternalNum string `json:"externalNum" validate:"required,max=50"` // 外部请求流水号 - RcvPyAccNum string `json:"rcvpyAccnum" validate:"required,max=32,account"` // 收方账号 - RcvPyAccNm string `json:"rcvpyAccnm" validate:"required,max=300,name"` // 收方户名 + RcvPyAccNum tysk_constant.AccountNo `json:"rcvpyAccnum" validate:"required,max=32,account"` // 收方账号 + RcvPyAccNm tysk_constant.AccountNo `json:"rcvpyAccnm" validate:"required,max=300,name"` // 收方户名 IsInterBnk *tysk_constant.CommonBool `json:"isInterbnk,omitempty" validate:"omitempty,oneof=00 01"` // 是否跨行 IsCheckRcvPartyDepBnkId *tysk_constant.IsCheckRcvpartyDepbnkId `json:"isCheckRcvpartyDepbnkId,omitempty" validate:"omitempty,oneof=00 01"` // 是否准确校验开户行行名 00:是 01:否 默认为是, 当该字段为00是时: RcvPartyDepBnkId *string `json:"rcvpartyDepbnkId,omitempty" validate:"omitempty,max=80"` // 收方开户行 ,收方开户行和收方联行号选择一个输入即可 付款种类对私付款且账户为银联卡时,可根据卡BIN号识别收方开户行、收方联行号字段,两字段不必输,非空情况以上送值为准 @@ -178,27 +177,27 @@ type ( // PayArrangeReq 排款 PayArrangeReq struct { - FndarBatNum string `json:"fndarBatNum" validate:"required,max=30,alphanum_special"` // 外部排款批次号 - PypartyAccnum string `json:"pypartyAccnum" validate:"required,account_format"` // 付方账号 - BusinessType *string `json:"businessType,omitempty" validate:"max=30"` // 业务类型 - SettlementMode *tysk_constant.SettlementMode `json:"settlementMode,omitempty" validate:"omitempty,settlement"` // 结算方式:01支付转账 02 银承开票 03 商承开票 04银承转让 05商承转让 06 现金支票 07转账支票 08 银行保函 09信用证 0A 银行汇票 0B银行本票0C供应链凭证支付0D项目贷支付10其他,不传默认01支付转账 - PayRat *string `json:"payRat,omitempty" validate:"omitempty,pay_rat_json"` // 排款份额(JSON格式),参考:@struct PayRatItem - PayDt string `json:"payDt" validate:"required,datetime=2006-01-02"` // 应付日期(yyyy-MM-dd) - LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag,omitempty" validate:"omitempty,oneof=00 01"` // 联动支付标志 - List []PayArrangeList `json:"fndarList" validate:"required,dive"` // 交易明细列表 + FndarBatNum string `json:"fndarBatNum" validate:"required,max=30"` // 外部排款批次号 + PypartyAccnum tysk_constant.AccountNo `json:"pypartyAccnum" validate:"required"` // 付方账号 + BusinessType *string `json:"businessType,omitempty" validate:"max=30"` // 业务类型 + SettlementMode *tysk_constant.SettlementMode `json:"settlementMode,omitempty" validate:"omitempty"` // 结算方式:01支付转账 02 银承开票 03 商承开票 04银承转让 05商承转让 06 现金支票 07转账支票 08 银行保函 09信用证 0A 银行汇票 0B银行本票0C供应链凭证支付0D项目贷支付10其他,不传默认01支付转账 + PayRat *string `json:"payRat,omitempty" validate:"omitempty"` // 排款份额(JSON格式),参考:@struct PayRatItem + PayDt string `json:"payDt" validate:"required,datetime=2006-01-02"` // 应付日期(yyyy-MM-dd) + LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag,omitempty" validate:"omitempty,oneof=00 01"` // 联动支付标志 + List []PayArrangeList `json:"fndarList" validate:"required,dive"` // 交易明细列表 } PayArrangeList struct { FndarNum string `json:"fndarNum" validate:"required,max=50"` // 外部排款流水号 - RcvpyAccnum string `json:"rcvpyAccnum" validate:"required,account_format"` // 收方账号 - RcvpyAccnm string `json:"rcvpyAccnm" validate:"required,max=300,name_length"` // 收方户名 + RcvpyAccnum tysk_constant.AccountNo `json:"rcvpyAccnum" validate:"required"` // 收方账号 + RcvpyAccnm string `json:"rcvpyAccnm" validate:"required,max=300"` // 收方户名 RcvpartyDepbnkId *string `json:"rcvpartyDepbnkId,omitempty" validate:"omitempty,max=80"` // 收方开户行,收方开户行和收方联行号选择一个输入即可 付款种类对私付款且账户为银联卡时,可根据卡BIN号识别收方开户行、收方联行号字段,两字段不必输,非空情况以上送值为准 RcvpartyBnkgId *string `json:"rcvpartyBnkgId,omitempty" validate:"omitempty,max=40"` // 收方联行号 TxnCntprTp *tysk_constant.TxnCntprTp `json:"txnCntprTp,omitempty" validate:"omitempty,oneof=01 02 03 04"` // 交易对手类型 PyAccTp tysk_constant.PyAccTp `json:"pyAccTp" validate:"required,oneof=00 01"` // 付款种类 - Amt float64 `json:"amt" validate:"required,numeric,amt_format"` // 付款金额 + Amt float64 `json:"amt" validate:"required,numeric"` // 付款金额 CurrencyID string `json:"currencyID" validate:"required,oneof=CNY"` // 币种 - Pscpt string `json:"pscpt" validate:"required,max=300,remark_length"` // 附言 + Pscpt string `json:"pscpt" validate:"required,max=300` // 附言 Rmrk *string `json:"rmrk,omitempty" validate:"omitempty,max=120"` // 备注 Rmrk1 *string `json:"rmrk1,omitempty" validate:"omitempty,max=600"` // 备用字段1 Rmrk2 *string `json:"rmrk2,omitempty" validate:"omitempty,max=600"` // 备用字段2 @@ -208,8 +207,128 @@ type ( // PayRatItem 排款份额明细项 PayRatItem struct { - Pcode string `json:"pcode" validate:"required,max=2"` // 支付代码 - Pamt string `json:"pamt" validate:"required,numeric"` // 支付金额 - PayAccNum string `json:"payAccNum" validate:"required,account_format"` // 支付账号 + Pcode string `json:"pcode" validate:"required,max=2"` // 支付代码 + Pamt string `json:"pamt" validate:"required,numeric"` // 支付金额 + PayAccNum string `json:"payAccNum" validate:"required"` // 支付账号 + } + + // PayArrangeQueryReq 排款查证 + PayArrangeQueryReq struct { + FndarBatNum string `json:"fndarBatNum" validate:"required,max=30"` // 外部排款批次号 + } + + // PayArrangeBillQueryReq 排款票据信息查询 + PayArrangeBillQueryReq struct { + FndarBatNum string `json:"fndarBatNum" validate:"required,max=30"` // 外部排款批次号(varchar(30),必填) + SubTaskNum *string `json:"subTaskNum" validate:"omitempty,max=100"` // 子任务编号(varchar(100),非必填) + StartRecord int `json:"startRecord" validate:"required,len=4,numeric,min=1"` // 起始记录号(varchar(4),必填,从1开始) + PageNumber int `json:"pageNumber" validate:"required,len=4,numeric,max=20"` // 请求记录条数(varchar(4),必填,最大20) + } + + //BatchesPayArrangeBillQueryReq 多批次排款票据查询 + BatchesPayArrangeBillQueryReq struct { + FndarBatNum *string `json:"fndarBatNum" validate:"omitempty,max=30"` // 外部排款批次号(varchar(30),非必填) + SubTaskNum *string `json:"subTaskNum" validate:"omitempty,max=100"` // 子任务编号(varchar(100),非必填) + StartRecord int `json:"startRecord" validate:"required,len=4,numeric,min=1"` // 起始记录号(varchar(4),必填,从1开始) + PageNumber int `json:"pageNumber" validate:"required,len=4,numeric,max=100"` // 请求记录条数(varchar(4),必填,最大100) + StartDate string `json:"startDate" validate:"required,len=8,datetime=20060102"` // 起始日期(char(8),必填,YYYYMMDD格式) + EndDate string `json:"endDate" validate:"required,len=8,datetime=20060102"` // 终止日期(char(8),必填,YYYYMMDD格式,与StartDate跨度≤30天) + } + //TGBPayReq 团金宝付款 + TGBPayReq struct { + ExternalBatNum string `json:"externalBatNum" validate:"required,max=30"` // 外部请求批次号(varchar(30),必填,不能重复) + LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag" validate:"omitempty,oneof=00 01"` // 联动支付(char(2),可选,默认"00") + PypartyAccnum tysk_constant.AccountNo `json:"pypartyAccnum" validate:"required,max=32,alphanumHyphen"` // 付方账号(varchar(32),必填,允许特定字符) + CurrencyID string `json:"currencyID" validate:"required,len=3"` // 币种(varchar(5),必填,暂仅支持人民币"CNY") + TotNbr int `json:"totNbr" validate:"required,len=4,numeric,max=1000"` // 付款总笔数(char(4),必填,最大1000) + Amt float64 `json:"amt" validate:"required,decimal"` // 付款总金额(decimal(15,2),必填) + ItlgPayrollType tysk_constant.CommonBool `json:"itlgPayrollType" validate:"required,oneof=00 01"` // 是否代发(char(2),必填) 00:否,01:是 + ItlgPreparType tysk_constant.ItlgPreparType `json:"itlgPreparType" validate:"required,oneof=0 1"` // 记账方式(char(1),必填)0-单笔记账,1-合笔记账 + ItlgRefundFlag tysk_constant.ItlgRefundFlag `json:"itlgRefundFlag" validate:"required,oneof=0 1"` // 退款方式(char(1),必填)0-单笔退款,1-合并退款 + UrgntAprvFlag *tysk_constant.CommonBool `json:"urgntAprvFlag" validate:"omitempty,oneof=00 01"` // 加急审批(char(2),可选,默认"00") + RsrvtnFlag *tysk_constant.CommonBool `json:"rsrvtnFlag" validate:"omitempty,oneof=00 01"` // 预约付款(char(2),可选,默认"00") + RsrvtnTms *string `json:"rsrvtnTms" validate:"omitempty,datetime=2006-01-02 15:04:05,timeRange"` // 预约时间(varchar(19),可选) + BatPscpt string `json:"batPscpt" validate:"required,max=60"` // 批次附言(varchar(60),必填) + BatRmrk *string `json:"batRmrk" validate:"omitempty,max=50"` // 批次备注(varchar(50),可选) + List []TGBPayReqRow `json:"debitList" validate:"required,dive"` // 交易明细列表(必填) + } + TGBPayReqRow struct { + ExternalNum string `json:"externalNum" validate:"required,max=50"` // 外部请求流水号(varchar(50),必填,同批次内不重复) + RcvpyAccnum tysk_constant.AccountNo `json:"rcvpyAccnum" validate:"required,max=32,"` // 收方账号(varchar(32),必填,允许特定字符) + RcvpyAccnm string `json:"rcvpyAccnm" validate:"required,max=300,"` // 收方户名(varchar(300),必填,支持汉字/非汉字长度计算) + RcvpartyDepbnkId *string `json:"rcvpartyDepbnkId" validate:"omitempty,max=80"` // 收方开户行(varchar(80),可选) + RcvpartyBnkgId *string `json:"rcvpartyBnkgId" validate:"omitempty,max=40"` // 收方联行号(varchar(40),可选) + DebitAmt float64 `json:"debitAmt" validate:"required,decimal"` // 付款金额(decimal(15,2),必填) + Pscpt string `json:"pscpt" validate:"required,max=300,"` // 附言(varchar(300),必填,支持汉字/非汉字长度计算) + Rmrk *string `json:"rmrk" validate:"omitempty,max=120"` // 备注(varchar(120),可选) + } + //RefundTransQueryReq 退汇交易查询 + RefundTransQueryReq struct { + StartRecord int `json:"startRecord" validate:"required,len=4,numeric,min=1"` // 起始记录号(varchar(4),必填,从1开始) + PageNumber int `json:"pageNumber" validate:"required,len=4,numeric,max=100"` // 请求记录条数(varchar(4),必填,最大100) + StartDate string `json:"startDate" validate:"required,len=8,datetime=20060102"` // 起始日期(char(8),必填,YYYYMMDD格式) + EndDate string `json:"endDate" validate:"required,len=8,datetime=20060102"` // 终止日期(char(8),必填,YYYYMMDD格式,与StartDate跨度≤30天) + AccountNo AccountList `json:"userDataList.accountNo"` // 用户有查询权限的银行账号 + } + + //BatchSalarySendReq 3.2.11批量代发(薪酬代发) + BatchSalarySendReq struct { + ExternalBatNum string `json:"externalBatNum" validate:"required,max=30"` // 外部请求批次号 + LinkPayFlag *tysk_constant.CommonBool `json:"linkPayFlag" validate:"omitempty,len=2,oneof=00 01"` // 联动支付(默认00) + PypartyAccnum tysk_constant.AccountNo `json:"pypartyAccnum" validate:"required,max=32,account"` // 付方账号 + CurrencyID string `json:"currencyID" validate:"required,len=3,oneof=CNY"` // 币种(暂仅支持CNY) + TotNbr int `json:"totNbr" validate:"required,len=4,numeric,max=1000"` // 付款总笔数 + Amt float64 `json:"amt" validate:"required,numeric,amt"` // 付款总金额(15,2) + PayrollDt string `json:"payrollDt,omitempty" validate:"omitempty,len=6,datetime=200601"` // 代发月份(yyyyMM)使用中银行代发、中原银行、齐鲁银行代发、工商银行代发、兴业银行代发代发时必填 格式:yyyyMM + UrgntAprvFlag *tysk_constant.CommonBool `json:"urgntAprvFlag,omitempty" validate:"omitempty,len=2,oneof=00 01"` // 加急审批(默认00) + RsrvtnFlag *tysk_constant.CommonBool `json:"rsrvtnFlag,omitempty" validate:"omitempty,len=2,oneof=00 01"` // 预约付款(默认00) + RsrvtnTms *string `json:"rsrvtnTms,omitempty" validate:"omitempty,datetime=2006-01-02 15:04:05,timeRange=06:00-22:00"` // 预约时间是否预约付款状态为01,预约时间必填;预约时间年月日格式为 yyyy-MM-dd 时分格式为枚举值 06:00-22:00任一时间 + BatPscpt string `json:"batPscpt" validate:"required,max=60"` // 批次附言 + PayrollUse *string `json:"payrollUse,omitempty" validate:"omitempty,max=60,dictCheck"` // 代发用途(银行特定要求)付款行为交行时,必输,传入交行签约类型编码; 付款行为建行、浦发银行、兴业银行、工商银行、招商银行、平安银行、中国银行、农行、民生、光大、广发、渤海、华夏、无锡农村商业银行、山西农信社、徽商银行、西安银行、中信银行等时,必输,传入代发用途;(其中中信银行增加默认值1:代发工资) 付款行为威海银行时,代发用途默认为“0002-代发工资” + ExtField1 *string `json:"extField1,omitempty" validate:"omitempty,max=60"` // 扩展字段1付款行为交行时,必输,传入交行协议编号; 付款行为平安时,非必输,传入平安协议编号; 付款行为建行时,必输,传入代发项目; 上述字典码值信息必须在司库系统-公共中心-数据字典-结算中心数据字典功能可查询到详见附录薪酬代发银行代发项目、代发用途码表 + List []BatchSalarySendRow `json:"debitList" validate:"required,dive"` // 付款明细列表 + } + + BatchSalarySendRow struct { + ExternalNum string `json:"externalNum" validate:"required,max=50"` // 外部请求流水号 + RcvpyAccnum tysk_constant.AccountNo `json:"rcvpyAccnum" validate:"required,max=32,account"` // 收方账号 + RcvpyAccnm string `json:"rcvpyAccnm" validate:"required,max=300,name"` // 收方户名 + RcvpartyDepbnkId *string `json:"rcvpartyDepbnkId,omitempty" validate:"omitempty,max=80"` // 收方开户行 + RcvpartyBnkgId *string `json:"rcvpartyBnkgId,omitempty" validate:"omitempty,max=40"` // 收方联行号 + DebitAmt float64 `json:"debitAmt" validate:"required,numeric,amt"` // 付款金额(15,2) + Pscpt string `json:"pscpt" validate:"required,max=300,remark"` // 附言 + Rmrk string `json:"rmrk,omitempty" validate:"omitempty,max=120"` // 备注 + } + //BankInfoQueryReq 境内银行网点信息查询 + BankInfoQueryReq struct { + BankCode string `json:"bankCode,omitempty" validate:"omitempty,max=10" comment:"银行类别编码"` // 银行类别编码(varchar(10)),与areaId至少输入一个 + AreaID string `json:"areaId,omitempty" validate:"omitempty,max=4" comment:"区域编码"` // 区域编码(varchar(4)),与bankCode至少输入一个 + SkRecordNum int `json:"sk_recordNum" validate:"required,max=4" comment:"分页条数"` // 分页条数(varchar(4)) + SkStartNo int `json:"sk_startNo" validate:"required,max=4" comment:"分页起始序号"` // 分页起始序号(varchar(4)) + } + + // BillListReq 3.4.1票据列表查询 + BillListReq struct { + QueryType tysk_constant.QueryType `json:"queryType" validate:"required,len=2,oneof=00 01 02"` // 查询类型00持有01申请02签收 + BsnTp *string `json:"bsnTp" validate:"validBsnTp"` // 业务种类(多选用逗号分隔)17-提示付款,18-供应链票据付款,51-出票登记,52-提示承兑,53-提示收票,54-未用退回,55-保证申请,56-背书转让,57-贴现申请,58-回购式贴现赎回,59-质押,60-质押解除,61-追索通知,62-同意清偿,63-线下追偿登记,64-不得转让标记撤销,65-票据查验,24-到期前提示付款,72-到期后质押解除,支持多选用“,”隔开 + List *[]BillListReqRow `json:"queryBillParam" validate:"dive"` // 查询条件列表 + MinAmt *float64 `json:"minAmt" validate:"omitempty"` // 最小金额(可选) + MaxAmt *float64 `json:"maxAmt" validate:"omitempty"` // 最大金额(可选) + ExpDtStart *string `json:"expDtStart" validate:"omitempty,datetime=2006-01-02"` // 到期日起始日期 + ExpDtEnd *string `json:"expDtEnd" validate:"omitempty,datetime=2006-01-02"` // 到期日截止日期 + StartRecord int `json:"startRecord" validate:"required,len=10,numeric"` // 起始记录号(从1开始) + PageNumber int `json:"pageNumber" validate:"required,len=4,numeric,max=200"` // 请求记录条数(最多200条) + } + + BillListReqRow struct { + SignAcc string `json:"signAcc,omitempty" validate:"omitempty,max=40"` // 签约账号(可选) + BillPkgId string `json:"billPkgId,omitempty" validate:"omitempty,max=30"` // 票据包号(可选) + } + + // BillDetailReq 票据详情 + BillDetailReq struct { + SignAcc string `json:"signAcc" validate:"required,max=40"` // 签约账号 + BillPkgId string `json:"billPkgId" validate:"required,max=30"` // 票据包号 + SubBillRng string `json:"subBillRng,omitempty" validate:"omitempty"` // 子票区间(新一代电票必输)格式为000000000001,000001010110 } ) diff --git a/tysk_entity/sk_res.go b/tysk_entity/sk_res.go index 5244475..eb933df 100644 --- a/tysk_entity/sk_res.go +++ b/tysk_entity/sk_res.go @@ -116,9 +116,6 @@ type ( } ReceiptQueryResp struct { - Status string `json:"status" comment:"交易状态"` // 交易状态 - StatusText string `json:"statusText" comment:"交易状态信息"` // 交易状态结果描述 - FailReason string `json:"failReason" comment:"错误信息展示"` // 校验失败时,失败原因展示(可选) TotRcptStat string `json:"totRcptStat" comment:"总回单查询状态"` // 总回单查询状态:1-全部成功(终态);2-部分成功;3-部分成功部分失败(终态) TotalRecords string `json:"totalRecords" comment:"回单总记录条数"` // 交易成功时返回,用户有查询权限的所有账户数量(可选) ReturnRecords string `json:"returnRecords" comment:"返回记录条数"` // 交易成功时返回,本次查询获取到的账户数量(可选) @@ -174,7 +171,7 @@ type ( ClientId string `json:"clientId" comment:"记录申请编号"` //客户查询自定义的流水号,用于查询结果信息,流水号需唯一 } - //TransHisQueryResp 历史明细结果查询 银企直联交易明细查询响应 + //TransHisQueryResp 历史明细结果查询 TransHisQueryResp struct { // 账户基本信息(交易成功时返回) AccountNo string `json:"accountNo" comment:"账号"` // 账号(varchar(40),选填) @@ -232,20 +229,20 @@ type ( } BalanceHisQueryRespRow struct { - AccountNo string `json:"accountNo" comment:"账号"` // 账号(varchar(40),必填) - AccountName string `json:"accountName" comment:"账户名称"` // 账户名称(varchar(120),必填) - Balance float64 `json:"balance" comment:"历史余额"` // 余额(decimal(15,2),选填) - CurrencyID string `json:"currencyID" comment:"币种"` // 币种(varchar(5),选填) - Date string `json:"date" comment:"日期"` // 余额日期(char(8),选填,格式yyyyMMdd) - DataSource string `json:"dataSource" comment:"数据来源"` // 数据来源(char(2),选填) - DataStatus string `json:"dataStatus" comment:"数据状态"` // 数据状态(char(2),必填) - LastUdtTms string `json:"lastUdtTms" comment:"更新时间"` // 更新时间(char(15),选填,格式yyyyMMddHHmmssSSS) + AccountNo string `json:"accountNo" comment:"账号"` // 账号(varchar(40),必填) + AccountName string `json:"accountName" comment:"账户名称"` // 账户名称(varchar(120),必填) + Balance string `json:"balance" comment:"历史余额"` // 余额(decimal(15,2),选填) + CurrencyID string `json:"currencyID" comment:"币种"` // 币种(varchar(5),选填) + Date string `json:"date" comment:"日期"` // 余额日期(char(8),选填,格式yyyyMMdd) + DataSource string `json:"dataSource" comment:"数据来源"` // 数据来源(char(2),选填) + DataStatus string `json:"dataStatus" comment:"数据状态"` // 数据状态(char(2),必填) + LastUdtTms string `json:"lastUdtTms" comment:"更新时间"` // 更新时间(char(15),选填,格式yyyyMMddHHmmssSSS) } // AccountsTransHisQueryResp 多账户历史明细查询 AccountsTransHisQueryResp struct { - TotalRecords string `json:"totalRecords" comment:"总记录条数(int,选填)"` - ReturnRecords string `json:"returnRecords" comment:"返回记录条数(int,选填)"` + TotalRecords string `json:"totalRecords" comment:"总记录条数"` // 总记录条数(int,选填) + ReturnRecords string `json:"returnRecords" comment:"返回记录条数"` // 返回记录条数(int,选填) // 交易明细列表 List []AccountsTransHisQueryRow `json:"userDataList" comment:"交易明细列表"` @@ -273,13 +270,13 @@ type ( OppOpenBankNo string `json:"oppOpenBankNo,omitempty" comment:"对方开户行联行号"` // 交易成功且查询到交易明细时返回 // 交易属性 - TranType string `json:"tranType,omitempty" comment:"借贷方向"` // 交易成功且查询到交易明细时返回,02:借;03:贷 - TranAmount float64 `json:"tranAmount,omitempty" comment:"交易金额"` // 交易成功且查询到交易明细时返回 - Rrtanid string `json:"rrtanid,omitempty" comment:"退汇标识"` // 0已退汇 1非退汇 2手工退汇 + TranType string `json:"tranType,omitempty" comment:"借贷方向"` // 交易成功且查询到交易明细时返回,02:借;03:贷 + TranAmount string `json:"tranAmount,omitempty" comment:"交易金额"` // 交易成功且查询到交易明细时返回 + Rrtanid string `json:"rrtanid,omitempty" comment:"退汇标识"` // 0已退汇 1非退汇 2手工退汇 // 余额信息 - Balance float64 `json:"balance,omitempty" comment:"账户余额"` // 交易成功且查询到账户时返回,标识该账户中全部余额 - CurrencyID string `json:"currencyID,omitempty" comment:"币种"` // 交易成功且查询到账户时返回 + Balance string `json:"balance,omitempty" comment:"账户余额"` // 交易成功且查询到账户时返回,标识该账户中全部余额 + CurrencyID string `json:"currencyID,omitempty" comment:"币种"` // 交易成功且查询到账户时返回 // 流水号信息 TxnSrlnum string `json:"txnSrlnum,omitempty" comment:"交易流水号"` // 交易匹配号 @@ -325,8 +322,8 @@ type ( } SinglePayQueryResp struct { - PyStat string `json:"pyStat" comment:"支付任务状态"` // 支付任务状态 - AlocStat string `json:"alocStat" comment:"资金下拨结果"` // 资金下拨结果(联动支付时展示) + PyStat string `json:"pyStat" comment:"支付任务状态"` // 支付任务状态 01:待提交:待提交审批 02:待付款:已提交审批,流程运行中 03:处理中:审批通过,正在付款或批次内包含处理中的支付明细任务 04:付款成功:支付终态,批次付款成功 05:付款失败:支付终态,批次付款失败 06:已拒绝:批次审批不同意 07:部分成功:支付终态,批次内同时包含付款失败和付款成功的支付明细任务 + AlocStat string `json:"alocStat" comment:"资金下拨结果"` // 资金下拨结果(联动支付时展示) // 00-待处理 01-处理中 02-无需下拨 03-成功 04-失败 BnkRetCode string `json:"bnkRetCode" comment:"银行交易结果"` // 银行返回结果 ExtendRemark string `json:"extendRemark" comment:"备注"` // JSON格式字符串,包含额外信息,参考:@struct SinglePayQueryExtendRemark PyPartyAccNum string `json:"pypartyAccnum" comment:"付方账号"` // 付方账号 @@ -335,7 +332,7 @@ type ( PyPartyBnkgId string `json:"pypartyBnkgId" comment:"付方开户行联行号"` // 付方开户行联行号 } - // SinglePayQueryExtendRemark 扩展备注字段结构体 + // SinglePayQueryExtendRemark 扩展备注字段 SinglePayQueryExtendRemark struct { ApprovalTime string `json:"approvalTime,omitempty" comment:"终审通过/拒绝时间"` // yyyy-MM-dd HH:mm:ss CreateTime string `json:"createTime,omitempty" comment:"外系统提单时间"` // yyyy-MM-dd HH:mm:ss @@ -365,17 +362,17 @@ type ( // 01:待提交 02:待付款 03:处理中 04:付款成功 05:付款失败 06:已拒绝 07:部分成功 AlocStat string `json:"alocStat,omitempty" validate:"omitempty,oneof=00 01 02 03 04" comment:"资金下拨结果"` // 00-待处理 01-处理中 02-无需下拨 03-成功 04-失败 - ExternalBatNum string `json:"externalBatNum" validate:"required" comment:"外部请求批次号"` // 业务批次唯一标识 - ExtendRemark string `json:"extendRemark,omitempty" comment:"扩展备注(JSON格式)"` // JSON格式备注信息 - PyPartyAccNum string `json:"pypartyAccnum" validate:"required" comment:"付方账号"` // 付款账号 - PyPartyAccNm string `json:"pypartyAccnm" validate:"required" comment:"付方户名"` // 付款户名 - PyPartyDepBnkNm string `json:"pypartyDepBnkNm" validate:"required" comment:"付方开户行"` // 开户行名称 - PyPartyBnkgId string `json:"pypartyBnkgId" validate:"required" comment:"付方开户行联行号"` // 11位联行号 - List []PayDetail `json:"batchInfoList" validate:"dive" comment:"明细支付结果列表"` // 明细支付结果列表 + ExternalBatNum string `json:"externalBatNum" validate:"required" comment:"外部请求批次号"` // 业务批次唯一标识 + ExtendRemark string `json:"extendRemark,omitempty" comment:"扩展备注(JSON格式)"` // JSON格式备注信息 格式参考:@struct ExtendRemark + PyPartyAccNum string `json:"pypartyAccnum" validate:"required" comment:"付方账号"` // 付款账号 + PyPartyAccNm string `json:"pypartyAccnm" validate:"required" comment:"付方户名"` // 付款户名 + PyPartyDepBnkNm string `json:"pypartyDepBnkNm" validate:"required" comment:"付方开户行"` // 开户行名称 + PyPartyBnkgId string `json:"pypartyBnkgId" validate:"required" comment:"付方开户行联行号"` // 11位联行号 + List []BatchPayQueryRow `json:"batchInfoList" validate:"dive" comment:"明细支付结果列表"` // 明细支付结果列表 } // PayDetail 单笔明细支付结果 - PayDetail struct { + BatchPayQueryRow struct { BnkRetCode string `json:"bnkRetCode" validate:"required" comment:"银行处理结果"` // 银行返回信息 PyStat string `json:"pyStat" validate:"required,oneof=01 02 03 04 05" comment:"明细支付状态"` // 01:待提交 02:待付款 03:处理中 04:成功 05:失败 @@ -389,4 +386,379 @@ type ( RejectReason string `json:"rejectReason,omitempty" comment:"拒绝原因"` // 审批拒绝原因 OptUserNm string `json:"optUserNm,omitempty" comment:"操作人姓名"` // 操作人名称 } + // PayArrangeQueryResp 排款查证 + PayArrangeQueryResp struct { + FndarBatNum string `json:"fndarBatNum" comment:"外部排款批次号"` // 最大长度为0(这里可能有误,应为具体长度) + DocId string `json:"docId" comment:"排款业务编号/批次号"` // 单笔付款类型为排款业务编号;批量付款类型为批次号 + FndarStat string `json:"fndarStat" comment:"排款业务状态"` // 同结算中心"批次/单据状态"02 已排期 03 未排期 04 处理中 05 处理成功 12 部分排期 13 终止排期 + TotAmt string `json:"totAmt" comment:"申请金额"` // 金额类型decimal(15,2) + CurrencyID string `json:"currencyID" comment:"币种"` // 币种 + PaidAmt string `json:"paidAmt" comment:"已付金额"` // 已付金额 + UnpaidAmt string `json:"unpaidAmt" comment:"未付金额"` // 未付金额 + PayingAmt string `json:"payingAmt" comment:"在途金额"` // 在途金额 + PayDt string `json:"payDt" comment:"应付日期"` // 格式:yyyy-MM-dd + ExtendRemark string `json:"extendRemark,omitempty" comment:"备注"` // JSON格式字符串(可选) + List []PayArrangeQueryRow `json:"fndarList" comment:"排款明细列表"` // 排款明细列表 + } + + PayArrangeQueryRow struct { + FndarNum string `json:"fndarNum" comment:"外部排款流水号"` // 推送的原单据外部排款流水号 + SubTaskNum string `json:"subTaskNum,omitempty" comment:"子任务编号"` // 在司库结算做排期操作后生成的子任务编号(可选) + ExternalBatNum string `json:"externalBatNum,omitempty" comment:"外部请求批次号"` // 批量付款时的外部请求批次号(可选) + ExternalNum string `json:"externalNum,omitempty" comment:"外部请求流水号"` // 单笔、批量付款中支付事项的外部请求流水号(可选) + PypartyOrgNm string `json:"pypartyOrgNm" comment:"付方单位"` // 付方单位 + PypartyAccnum string `json:"pypartyAccnum" comment:"付方账号"` // 付方账号 + PypartyAccnm string `json:"pypartyAccnm" comment:"付方户名"` // 付方户名 + PypartyDepBnkNm string `json:"pypartyDepBnkNm" comment:"付方开户行"` // 付方开户行 + PypartyBnkgId string `json:"pypartyBnkgId" comment:"付方开户行联行号"` // 付方开户行联行号 + RcvpyAccnm string `json:"rcvpyAccnm" comment:"收方户名"` // 收方户名 + RcvpyAccnum string `json:"rcvpyAccnum" comment:"收方账号"` // 收方账号 + RcvpartyDepBnkNm string `json:"rcvpartyDepBnkNm" comment:"收方开户行"` // 收方开户行 + Amt string `json:"amt" comment:"付款金额"` // 付款金额 + PyStat string `json:"pyStat" comment:"子任务单据状态"` // 子任务单据状态02 已排期 03 未排期(作废) 04 处理中 05 处理成功 06 处理失败 + PcsStat string `json:"pcsStat,omitempty" comment:"子任务流程状态"` // 子任务流程状态(可选)DF - 草稿 IP - 运行中 FN - 已完成 TM - 已作废 + PyTp string `json:"pyTp" comment:"付款类型"` // 付款类型S1 - 单笔对外付款 S2 - 联动单笔付款 B1 - 批量对外付款 B2 - 联动批量付款 + SettlementMode string `json:"settlementMode" comment:"结算方式"` // 结算方式:01支付转账 02 银承开票 03 商承开票 04银承转让 05商承转让 06 现金支票 07转账支票 08 银行保函 09信用证 10其他 0A银行汇票0B银行本票 0C供应链凭证支付 + FndarTms string `json:"fndarTms,omitempty" comment:"排款时间"` // 格式:yyyy-MM-dd HH:mm:ss(可选) + RsrvtnTms string `json:"rsrvtnTms,omitempty" comment:"预约时间"` // 格式:yyyy-MM-dd HH:mm:ss(可选) + RcvBnkTms string `json:"rcvBnkTms,omitempty" comment:"转账结果获取时间"` // 格式:yyyy-MM-dd HH:mm:ss(可选) + OfflinePayDate string `json:"offlinePayDate,omitempty" comment:"线下付款日期"` // 格式:yyyy-MM-dd(可选)结算方式为 06 现金支票 07转账支票 08 银行保函 09信用证 10其他时,子任务状态为“支付成功”时非空,返回线下付款日期 + OfflineBnkJrnlNum string `json:"offlineBnkJrnlNum,omitempty" comment:"流水号"` // 线下付款流水号(可选)结算方式为 06 现金支票 07转账支票 08 银行保函 09信用证 10其他时,子任务状态为“支付成功”时非空,才返回流水号 + OfflineRmrk string `json:"offlineRmrk,omitempty" comment:"线下付款说明"` // 线下付款说明(可选)算方式为 06 现金支票 07转账支票 08 银行保函 09信用证 10其他时,子任务状态为“支付成功”时非空,才返回流水号 + BillInfoCount string `json:"billInfoCount,omitempty" comment:"票据总张数"` // 票据总张数(可选) + BillTotAmt string `json:"billTotAmt,omitempty" comment:"票据总金额"` // 票据总金额(可选) + SignBillInfoCount string `json:"signBillInfoCount,omitempty" comment:"已收票张数"` // 已收票张数(可选) + SignBillTotAmt string `json:"signBillTotAmt,omitempty" comment:"已收票金额"` // 已收票金额(可选) + WaitSignBillInfoCount string `json:"waitSignBillInfoCount,omitempty" comment:"待签收票据张数"` // 待签收票据张数(可选) + WaitSignBillTotAmt string `json:"waitSignBillTotAmt,omitempty" comment:"待签收票据金额"` // 待签收票据金额(可选) + } + + // PayArrangeBillQueryResp 排款票据信息查询 + PayArrangeBillQueryResp struct { + FndarBatNum string `json:"fndarBatNum" comment:"外部排款批次号"` // 外部排款批次号 + DocId string `json:"docId" comment:"排款业务编号/批次号"` // 单笔付款类型为排款业务编号;批量付款类型为批次号 + TotalRecords string `json:"totalRecords,omitempty" comment:"总记录条数"` // 交易成功时返回,返回该登陆用户具有查询权限的排款票据数量 + ReturnRecords string `json:"returnRecords,omitempty" comment:"返回记录条数"` // 交易成功时返回,返回该登陆用户本次查询获取到的排款票据数量 + List []PayArrangeBillQueryRow `json:"billInfoList" comment:"排款票据列表"` // 排款票据列表 + } + + PayArrangeBillQueryRow struct { + FndarNum string `json:"fndarNum,omitempty" comment:"外部排款流水号"` // 推送的原单据外部排款流水号 + SubTaskNum string `json:"subTaskNum,omitempty" comment:"子任务编号"` // 在司库结算做排期操作后生成的子任务编号 + SettlementMode string `json:"settlementMode,omitempty" comment:"结算方式"` // 结算方式:02 银承开票 03 商承开票 04银承转让 05商承转让 + SignAcc string `json:"signAcc,omitempty" comment:"签约账号"` // 排款付款账号 + BillPkgId string `json:"billPkgId,omitempty" comment:"票据包号"` // 票据包号 + SubBillRng string `json:"subBillRng,omitempty" comment:"子票区间"` // 子票区间 + IsSupprDt string `json:"isSupprDt,omitempty" comment:"出票日期"` // 格式yyyy-MM-dd + BillRcvDt string `json:"billRcvDt,omitempty" comment:"票据到期日期"` // 格式yyyy-MM-dd + IsPrmtSubpge string `json:"isPrmtSubpge,omitempty" comment:"是否允许分包"` // Y:可分包;N:不可分包 + BillStat string `json:"billStat,omitempty" comment:"票据状态"` // 按码值存储,按码值返回 + CrclFlag string `json:"crclFlag,omitempty" comment:"流通标志"` // 流通标志 + BillTp string `json:"billTp,omitempty" comment:"票据类型"` // AC01:银承; AC02:商承 + BillFaceAmt string `json:"billFaceAmt,omitempty" comment:"票面金额"` // 票面金额 + TfrMark string `json:"tfrMark,omitempty" comment:"转让标记"` // EM00:可再转让 ;EM01不得转让 + BankDockingMode string `json:"bankDockingMode,omitempty" comment:"银行对接模式"` // Y:直联;N:非直联 + BillFaceMemo string `json:"billFaceMemo,omitempty" comment:"票面备注"` // 票面备注 + RmtrNm string `json:"rmtrNm,omitempty" comment:"出票人名称"` // 出票人名称 + RmtrIsSupprMemo string `json:"rmtrIsSupprMemo,omitempty" comment:"出票人备注"` // 出票人备注 + RmtrDepBnkBrCode string `json:"rmtrDepBnkBrCode,omitempty" comment:"出票人开户行行号"` // 出票人开户行行号 + RmtrDepBnkNm string `json:"rmtrDepBnkNm,omitempty" comment:"出票人开户行行名"` // 出票人开户行行名 + RmtrAccNum string `json:"rmtrAccNum,omitempty" comment:"出票人账户"` // 出票人账户 + AcptrNm string `json:"acptrNm,omitempty" comment:"承兑人名称"` // 承兑人名称 + AcptrDepBnkNm string `json:"acptrDepBnkNm,omitempty" comment:"承兑人开户行名称"` // 承兑人开户行名称 + AcptrDepBnkBrCode string `json:"acptrDepBnkBrCode,omitempty" comment:"承兑人开户行行号"` // 承兑人开户行行号 + AcptrAccNum string `json:"acptrAccNum,omitempty" comment:"承兑人账户"` // 承兑人账户 + AcptrDt string `json:"acptrDt,omitempty" comment:"承兑日期"` // 格式yyyy-MM-dd + PayeeDepBnkNm string `json:"payeeDepBnkNm,omitempty" comment:"收款人开户行名称"` // 收款人开户行名称 + PayeeNm string `json:"payeeNm,omitempty" comment:"收款人名称"` // 收款人名称 + PayeeDepBnkBrCode string `json:"payeeDepBnkBrCpde,omitempty" comment:"收款人开户行行号"` // 收款人开户行行号 + PayeeAccNum string `json:"payeeAccNum,omitempty" comment:"收款人账号"` // 收款人账号 + SignForDt string `json:"signForDt,omitempty" comment:"签收结果获取日期"` // 格式yyyy-MM-dd + } + + // BatchesPayArrangeBillQueryResp 批量排款交易票据查询 + BatchesPayArrangeBillQueryResp struct { + TotalRecords int `json:"totalRecords,omitempty" comment:"总记录条数"` // 交易成功时返回的用户有权限的排款票据数量 + ReturnRecords int `json:"returnRecords,omitempty" comment:"返回记录条数"` // 交易成功时返回的本次查询获取到的排款票据数量 + List []BatchesPayArrangeBillQueryRow `json:"billInfoList" comment:"排款明细列表"` // 排款交易明细列表 + } + + BatchesPayArrangeBillQueryRow struct { + FndarBatNum string `json:"fndarBatNum,omitempty" comment:"外部排款批次号"` // 外部排款批次号 + DocId string `json:"docId" comment:"排款业务编号/批次号"` // 单笔为业务编号,批量为批次号 + FndarNum string `json:"fndarNum,omitempty" comment:"外部排款流水号"` // 推送的原单据外部排款流水号 + SubTaskNum string `json:"subTaskNum,omitempty" comment:"子任务编号"` // 司库结算生成的子任务编号 + SettlementMode string `json:"settlementMode,omitempty" comment:"结算方式"` // 02银承开票 03商承开票 04银承转让 05商承转让 + SignAcc string `json:"signAcc,omitempty" comment:"签约账号"` // 排款付款账号 + BillPkgId string `json:"billPkgId,omitempty" comment:"票据包号"` // 票据包编号 + SubBillRng string `json:"subBillRng,omitempty" comment:"子票区间"` // 子票区间范围 + IsSupprDt string `json:"isSupprDt,omitempty" comment:"出票日期"` // 格式: yyyy-MM-dd + BillRcvDt string `json:"billRcvDt,omitempty" comment:"票据到期日期"` // 格式: yyyy-MM-dd + IsPrmtSubpge string `json:"isPrmtSubpge,omitempty" comment:"是否允许分包"` // Y:可分包 N:不可分包 + BillStat string `json:"billStat,omitempty" comment:"票据状态"` // 按码值返回 + CrclFlag string `json:"crclFlag,omitempty" comment:"流通标志"` // 票据流通标志 + BillTp string `json:"billTp,omitempty" comment:"票据类型"` // AC01:银承 AC02:商承 + BillFaceAmt string `json:"billFaceAmt,omitempty" comment:"票面金额"` // 票据金额(decimal(15,2)) + TfrMark string `json:"tfrMark,omitempty" comment:"转让标记"` // EM00:可再转让 EM01:不得转让 + BankDockingMode string `json:"bankDockingMode,omitempty" comment:"银行对接模式"` // Y:直联 N:非直联 + BillFaceMemo string `json:"billFaceMemo,omitempty" comment:"票面备注"` // 票据备注信息 + RmtrNm string `json:"rmtrNm,omitempty" comment:"出票人名称"` // 出票人全称 + RmtrIsSupprMemo string `json:"rmtrIsSupprMemo,omitempty" comment:"出票人备注"` // 出票人附加备注 + RmtrDepBnkBrCode string `json:"rmtrDepBnkBrCode,omitempty" comment:"出票人开户行行号"` // 出票人银行联行号 + RmtrDepBnkNm string `json:"rmtrDepBnkNm,omitempty" comment:"出票人开户行行名"` // 出票人银行全称 + RmtrAccNum string `json:"rmtrAccNum,omitempty" comment:"出票人账户"` // 出票人银行账号 + AcptrNm string `json:"acptrNm,omitempty" comment:"承兑人名称"` // 承兑人全称 + AcptrDepBnkNm string `json:"acptrDepBnkNm,omitempty" comment:"承兑人开户行名称"` // 承兑人银行全称 + AcptrDepBnkBrCode string `json:"acptrDepBnkBrCode,omitempty" comment:"承兑人开户行行号"` // 承兑人银行联行号 + AcptrAccNum string `json:"acptrAccNum,omitempty" comment:"承兑人账户"` // 承兑人银行账号 + AcptrDt string `json:"acptrDt,omitempty" comment:"承兑日期"` // 格式: yyyy-MM-dd + PayeeDepBnkNm string `json:"payeeDepBnkNm,omitempty" comment:"收款人开户行名称"` // 收款人银行全称 + PayeeNm string `json:"payeeNm,omitempty" comment:"收款人名称"` // 收款人全称 + PayeeDepBnkBrCode string `json:"payeeDepBnkBrCpde,omitempty" comment:"收款人开户行行号"` // 收款人银行联行号(注意原字段名拼写错误) + PayeeAccNum string `json:"payeeAccNum,omitempty" comment:"收款人账号"` // 收款人银行账号 + SignForDt string `json:"signForDt,omitempty" comment:"签收结果获取日期"` // 格式: yyyy-MM-dd + } + + // TGBPayResp 团金宝付款 + TGBPayResp struct { + ExternalBatNum string `json:"externalBatNum" example:"BATCH20230801001" comment:"外部请求批次号"` + DealMode string `json:"dealMode" example:"1" comment:"处理模式:1-审批处理,2-直接出账,3-经办处理"` + CheckList []TGBPayRespRow `json:"list" comment:"校验结果明细列表"` + } + + TGBPayRespRow struct { + ExternalNum string `json:"externalNum" example:"TXN202308010001" comment:"明细流水号"` + RowStat string `json:"RowStat" example:"AAAAAAA" comment:"校验状态码(AAAAAAA表示成功)"` + RowStatMsg string `json:"rowStatMsg,omitempty" example:"校验通过" comment:"校验状态描述"` + } + + // RefundTransQueryResp 排款交易明细查询 + RefundTransQueryResp struct { + TotalNum string `json:"totalNum" comment:"总笔数"` // 总笔数(varchar(8)) + PaymentList []RefundTransQueryRow `json:"batchInfoList" comment:"付款明细列表"` // 付款明细列表 + } + + RefundTransQueryRow struct { + ExternalBatNum string `json:"externalBatNum,omitempty" comment:"外部请求批次号"` // 单笔付款时为空(varchar(30)) + ExternalNum string `json:"externalNum,omitempty" comment:"外部请求流水号"` // 外部请求流水号(varchar(50)) + DocBatNum string `json:"docBatNum" comment:"付款批次号/业务编号"` // 司库内部编号(varchar(50)) + DocSrlNum string `json:"docSrlNum,omitempty" comment:"付款明细编号"` // 司库内部编号,单笔付款时为空(varchar(50)) + PypartyAccnum string `json:"pypartyAccnum" comment:"付方账号"` // 付方账号(varchar(32)) + PypartyAccnm string `json:"pypartyAccnm" comment:"付方户名"` // 付方户名(varchar(200)) + PypartyDepbnk string `json:"pypartyDepbnk" comment:"付方开户行"` // 付方开户行(varchar(80)) + PypartyBnk string `json:"pypartyBnk" comment:"付方所属银行"` // 付方所属银行(varchar(40)) + PypartyInstNum string `json:"pypartyInstNum" comment:"付方机构编码"` // 付方机构编码(varchar(40)) + PypartyInstNm string `json:"pypartyInstNm" comment:"付方机构名称"` // 付方机构名称(varchar(200)) + RcvpyAccnum string `json:"rcvpyAccnum" comment:"收方账号"` // 收方账号(varchar(32)) + RcvpyAccnm string `json:"rcvpyAccnm" comment:"收方账户名称"` // 收方账户名称(varchar(200)) + RcvpartyDepbnk string `json:"rcvpartyDepbnk" comment:"收方开户行名"` // 收方开户行名(varchar(80)) + PyAccTp string `json:"pyAccTp" comment:"付款种类"` // 00:对公 01:对私(varchar(2)) + DebitAmt string `json:"debitAmt" comment:"付款金额"` // 付款金额(decimal(15,2)) + CurrencyID string `json:"currencyID" comment:"币种"` // 币种(varchar(5)),暂时只支持人民币CNY + PyTp string `json:"pyTp" comment:"付款类型"` // 付款类型(varchar(4)) + Pscpt string `json:"pscpt" comment:"附言"` // 单笔取付款附言,批量取收方附言(varchar(300)) + PyTm string `json:"pyTm" comment:"原付款时间"` // 格式:yyyyMMdd HH:mm:ss(varchar(20)) + RrtanDt string `json:"rrtanDt" comment:"退汇日期"` // 格式:yyyyMMdd(varchar(8)) + TxnSrlNum string `json:"txnSrlNum,omitempty" comment:"原付款系统交易流水号"` // 司库交易明细流水号(varchar(80)) + BnkSrlNum string `json:"bnkSrlNum,omitempty" comment:"原付款银行流水号"` // 银行交易流水号(varchar(80)) + RrtanTxnSrlNum string `json:"rrtanTxnSrlNum,omitempty" comment:"退汇系统交易流水号"` // 司库交易明细流水号(varchar(80)) + RrtanBnkSrlNum string `json:"rrtanBnkSrlNum,omitempty" comment:"退汇银行流水号"` // 银行交易流水号(varchar(80)) + } + //BatchSalarySendResp 3.2.11批量代发(薪酬代发) + BatchSalarySendResp struct { + ExternalBatNum string `json:"externalBatNum" comment:"外部请求批次号"` // 外部请求批次号(varchar(30)) + DealMode string `json:"dealMode" comment:"处理模式"` // 处理模式(varchar(1)): 1.审批处理 2.直接出账 3.经办处理 + InvalidList []InvalidDetail `json:"invalidList,omitempty" comment:"校验不通过明细列表"` // 校验不通过的明细列表 + } + + // InvalidDetail 校验不通过明细 + InvalidDetail struct { + ExternalNum string `json:"externalNum" comment:"明细流水号"` // 明细流水号(varchar(50)) + RowStat string `json:"rowStat" comment:"校验状态"` // 校验状态返回码(varchar(7)) + RowStatMsg string `json:"rowStatMsg" comment:"校验状态信息"` // 校验状态信息(varchar(50)),详见附录4.2制单状态 + } + + // BankInfoQueryResp 境内银行网点信息查询 + BankInfoQueryResp struct { + SkRecordNum string `json:"sk_recordNum" validate:"required,len=4,numeric"` // 分页条数 + SkStartNo string `json:"sk_startNo" validate:"required,len=4,numeric"` // 分页起始序号 + SkTotalNum string `json:"sk_totalNum" validate:"required,len=4,numeric"` // 总条数 + Status string `json:"status" validate:"required,len=7"` // 交易状态(7个A表示成功) + StatusText string `json:"statusText" validate:"required,max=254"` // 交易状态说明 + List []BankInfoRow `json:"bnkFirmModelList" validate:"required,dive"` // 银行信息列表 + } + + // BankInfoRow 银行信息明细行结构 + BankInfoRow struct { + BankCode string `json:"bankCode" validate:"required,max=10"` // 银行类别编码 + BankName string `json:"bankName" validate:"required,max=50"` // 银行名称 + AreaId string `json:"areaId" validate:"required,len=4"` // 区域编码 + AreaName string `json:"areaName" validate:"required,max=200"` // 区域名称(省+市信息) + OpenBankName string `json:"openBankName" validate:"required,max=200"` // 开户行行名 + BankFirmCode string `json:"bankFirmCode" validate:"required,len=12,numeric"` // 开户行名联行号(固定12位) + } + + // BillQueryResponse 票据查询响应结构体 + BillListResp struct { + TotalRecords int `json:"totalRecords,omitempty" comment:"总记录条数"` // 总记录条数(成功时返回) + ReturnRecords int `json:"returnRecords,omitempty" comment:"返回记录条数"` // 返回记录条数(成功时返回) + BillList []BillListRespRow `json:"dataList,omitempty" comment:"票据列表"` // 票据列表 + } + + // Bill 票据详细信息结构体 + BillListRespRow struct { + SignAcc string `json:"signAcc,omitempty" comment:"签约账号"` // 签约账号(varchar(40)) + BillPkgID string `json:"billPkgId,omitempty" comment:"票据包号"` // 票据包号(varchar(30)) + SubBillRng string `json:"subBillRng,omitempty" comment:"子票区间"` // 子票区间(varchar(25)) + IssueDate string `json:"isSupprDt,omitempty" comment:"出票日期"` // 出票日期(char(10)) yyyy-MM-dd + BillDueDate string `json:"billRcvDt,omitempty" comment:"票据到期日期"` // 票据到期日期(char(10)) yyyy-MM-dd + AllowSubpackage string `json:"isPrmtSubpge,omitempty" comment:"是否允许分包"` // 是否允许分包(char(1)) Y:可分包;N:不可分包 + BillStatus string `json:"billStat,omitempty" comment:"票据状态"` // 票据状态(char(6)) 见状态枚举 + CirculationFlag string `json:"crclFlag,omitempty" comment:"流通标志"` // 流通标志(char(6)) 见流通标志枚举 + BillType string `json:"billTp,omitempty" comment:"票据类型"` // 票据类型(char(4)) AC01:银承;AC02:商承 + BillAmount string `json:"billFaceAmt,omitempty" comment:"票面金额"` // 票面金额(decimal(15,2)) + TransferMark string `json:"tfrMark,omitempty" comment:"转让标记"` // 转让标记(char(4)) EM00:可再转让;EM01不得转让 + BankDockingMode string `json:"bankDockingMode,omitempty" comment:"银行对接模式"` // 银行对接模式(char(1)) Y:直联;N:非直联 + BillMemo string `json:"billFaceMemo,omitempty" comment:"票面备注"` // 票面备注(varchar(180)) + DrawerName string `json:"rmtrNm,omitempty" comment:"出票人名称"` // 出票人名称(varchar(300)) + DrawerMemo string `json:"rmtrIsSupprMemo,omitempty" comment:"出票人备注"` // 出票人备注(varchar(384)) + DrawerBankCode string `json:"rmtrDepBnkBrCode,omitempty" comment:"出票人开户行行号"` // 出票人开户行行号(char(20)) + DrawerBankName string `json:"rmtrDepBnkNm,omitempty" comment:"出票人开户行行名"` // 出票人开户行行名(varchar(300)) + DrawerAccount string `json:"rmtrAccNum,omitempty" comment:"出票人账户"` // 出票人账户(varchar(40)) + AcceptorName string `json:"acptrNm,omitempty" comment:"承兑人名称"` // 承兑人名称(varchar(300)) + AcceptorBankName string `json:"acptrDepBnkNm,omitempty" comment:"承兑人开户行名称"` // 承兑人开户行名称(varchar(300)) + AcceptorBankCode string `json:"acptrDepBnkBrCode,omitempty" comment:"承兑人开户行行号"` // 承兑人开户行行号(char(20)) + AcceptorAccount string `json:"acptrAccNum,omitempty" comment:"承兑人账户"` // 承兑人账户(varchar(40)) + AcceptanceDate string `json:"acptrDt,omitempty" comment:"承兑日期"` // 承兑日期(char(10)) yyyy-MM-dd + PayeeBankName string `json:"payeeDepBnkNm,omitempty" comment:"收款人开户行名称"` // 收款人开户行名称(varchar(300)) + PayeeName string `json:"payeeNm,omitempty" comment:"收款人名称"` // 收款人名称(varchar(300)) + PayeeBankCode string `json:"payeeDepBnkBrCpde,omitempty" comment:"收款人开户行行号"` // 收款人开户行行号(char(20)) + PayeeAccount string `json:"payeeAccNum,omitempty" comment:"收款人账号"` // 收款人账号(varchar(40)) + } + + // BillDetailResp 票据详情 + BillDetailResp struct { + // 基础响应信息 + BillPkgId string `json:"billPkgId,omitempty" comment:"票据包号"` // 票据包号 + SubBillRng string `json:"subBillRng,omitempty" comment:"子票区间"` // 子票区间 + IsSupprDt string `json:"isSupprDt,omitempty" comment:"出票日期"` // 出票日期(yyyy-MM-dd) + BillRcvDt string `json:"billRcvDt,omitempty" comment:"票据到期日期"` // 票据到期日期(yyyy-MM-dd) + IsPrmtSubpge string `json:"isPrmtSubpge,omitempty" comment:"是否允许分包"` // 是否允许分包(Y/N) + BillStat string `json:"billStat,omitempty" comment:"票据状态"` // 票据状态(CS01-CS06) + CrclFlag string `json:"crclFlag,omitempty" comment:"流通标志"` // 流通标志(TF0101-TF0501) + BillTp string `json:"billTp,omitempty" comment:"票据类型"` // 票据类型(AC01:银承;AC02:商承) + BillFaceAmt string `json:"billFaceAmt,omitempty" comment:"票面金额"` // 票面金额 + TfrMark string `json:"tfrMark,omitempty" comment:"转让标记"` // 转让标记(EM00:可再转让;EM01:不得转让) + BankDockingMode string `json:"bankDockingMode,omitempty" comment:"银行对接模式"` // 银行对接模式(Y:直联;N:非直联) + BillFaceMemo string `json:"billFaceMemo,omitempty" comment:"票面备注"` // 票面备注 + + // 出票人信息 + RmtrNm string `json:"rmtrNm,omitempty" comment:"出票人名称"` // 出票人名称 + RmtrIsSupprMemo string `json:"rmtrIsSupprMemo,omitempty" comment:"出票人备注"` // 出票人备注 + RmtrDepBnkBrCode string `json:"rmtrDepBnkBrCode,omitempty" comment:"出票人开户行行号"` // 出票人开户行行号 + RmtrDepBnkNm string `json:"rmtrDepBnkNm,omitempty" comment:"出票人开户行行名"` // 出票人开户行行名 + RmtrAccNum string `json:"rmtrAccNum,omitempty" comment:"出票人账户"` // 出票人账户 + + // 承兑人信息 + AcptrNm string `json:"acptrNm,omitempty" comment:"承兑人名称"` // 承兑人名称 + AcptrDepBnkNm string `json:"acptrDepBnkNm,omitempty" comment:"承兑人开户行名称"` // 承兑人开户行名称 + AcptrDepBnkBrCode string `json:"acptrDepBnkBrCode,omitempty" comment:"承兑人开户行行号"` // 承兑人开户行行号 + AcptrAccNum string `json:"acptrAccNum,omitempty" comment:"承兑人账户"` // 承兑人账户 + AcptrDt string `json:"acptrDt,omitempty" comment:"承兑日期"` // 承兑日期(yyyy-MM-dd) + + // 收款人信息 + PayeeDepBnkNm string `json:"payeeDepBnkNm,omitempty" comment:"收款人开户行名称"` // 收款人开户行名称 + PayeeNm string `json:"payeeNm,omitempty" comment:"收款人名称"` // 收款人名称 + PayeeDepBnkBrCode string `json:"payeeDepBnkBrCode,omitempty" comment:"收款人开户行行号"` // 收款人开户行行号 + PayeeAccNum string `json:"payeeAccNum,omitempty" comment:"收款人账号"` // 收款人账号 + + // 背面信息列表 + FixEbillBackInfoTransportList []FixEbillBackInfo `json:"fixEbillBackInfoTransportList,omitempty" comment:"背面信息列表"` + + // 附加信息列表 + FixEbillAddInfoList []FixEbillAddInfo `json:"fixEbillAddInfoList,omitempty" comment:"附加信息列表"` + + // 历史行为列表 + FixEbillAddInfoDeposList []FixEbillAddInfoDepos `json:"fixEbillAddInfoDeposList,omitempty" comment:"历史行为列表"` + } + + FixEbillBackInfo struct { + BackId string `json:"backId,omitempty" comment:"背面信息交易流水号"` // 背面信息交易流水号 + TfrFlagNm string `json:"tfrFlagNm,omitempty" comment:"转让标记"` // 转让标记EM00:可再转让 ;EM01不得转让 + AppActNm string `json:"appActNm,omitempty" comment:"请求方账号名称"` // 请求方账号名称 + AppAct string `json:"appAct,omitempty" comment:"请求方账号"` // 请求方账号 + AppCode string `json:"appCode,omitempty" comment:"请求方信用代码"` // 请求方信用代码 + AppBankNo string `json:"appBankNo,omitempty" comment:"请求方开户行行号"` // 请求方开户行行号 + AppBankNm string `json:"appBankNm,omitempty" comment:"请求方开户行行名"` // 请求方开户行行名 + RcvActNm string `json:"rcvActNm,omitempty" comment:"接收方账户名称"` // 接收方账户名称 + RcvAct string `json:"rcvAct,omitempty" comment:"接收方账号"` // 接收方账号 + RcvCode string `json:"rcvCode,omitempty" comment:"接收方信用代码"` // 接收方信用代码 + RcBankNo string `json:"rcBankNo,omitempty" comment:"接收方开户行行号"` // 接收方开户行行号 + RcBankNm string `json:"rcBankNm,omitempty" comment:"接收方开户行行名"` // 接收方开户行行名 + ApplyDate string `json:"applyDate,omitempty" comment:"申请日期"` // 申请日期(yyyy-MM-dd) + FixSignFlag string `json:"fixSignFlag,omitempty" comment:"签收标识"` // 签收标识 + SignDate string `json:"signDate,omitempty" comment:"签收日期"` // 签收日期(yyyy-MM-dd) + Rate string `json:"rate,omitempty" comment:"利率"` // 利率 + RpdOpdt string `json:"rpdOpdt,omitempty" comment:"赎回截止日"` // 赎回截止日(yyyy-MM-dd) + RpdDudt string `json:"rpdDudt,omitempty" comment:"赎回开放日"` // 赎回开放日 + PrsnTpyAmt string `json:"prsnTpyAmt,omitempty" comment:"付款金额"` // 付款金额 + DshnRcd string `json:"dshnRcd,omitempty" comment:"拒付代码"` // 拒付代码 + VstddShnrcdl string `json:"vstddShnrcdl,omitempty" comment:"拒付理由代码"` // 拒付理由代码 + DshnRsn string `json:"dshnRsn,omitempty" comment:"拒付备注信息"` // 拒付备注信息 + RcrsTyp string `json:"rcrsTyp,omitempty" comment:"追索类型"` // 追索类型 + AgrrDat string `json:"agrrDat,omitempty" comment:"清偿日期"` // 清偿日期(yyyy-MM-dd) + BackMem string `json:"backMem,omitempty" comment:"背面备注"` // 背面备注 + WareAdr string `json:"wareAdr,omitempty" comment:"保证人地址"` // 保证人地址 + PleDgeDt string `json:"pleDgeDt,omitempty" comment:"解质押日期"` // 解质押日期(yyyy-MM-dd) + Stlmthd string `json:"stlmthd,omitempty" comment:"清算标志"` // 清算标志 + } + + FixEbillAddInfo struct { + RiskBillStatus string `json:"riskBillStatus,omitempty" comment:"风险票据状态描述"` // 风险票据状态描述 + RmtrNm string `json:"rmtrNm,omitempty" comment:"出票人名称"` // 出票人名称 + RmtrSoccrcode string `json:"rmtrSoccrcode,omitempty" comment:"出票人社会信用代码"` // 出票人社会信用代码 + RmtrActNm string `json:"rmtrActNm,omitempty" comment:"出票人账户名称"` // 出票人账户名称 + RmtrMemno string `json:"rmtrMemno,omitempty" comment:"出票人办理渠道"` // 出票人办理渠道 + RmtrBillact string `json:"rmtrBillact,omitempty" comment:"出票人票据账号"` // 出票人票据账号 + RmtrDepBnkBrCode string `json:"rmtrDepBnkBrCode,omitempty" comment:"出票人开户行行号"` // 出票人开户行行号 + RmtrDepBnkNm string `json:"rmtrDepBnkNm,omitempty" comment:"出票人开户行名"` // 出票人开户行名 + RmtrAccNum string `json:"rmtrAccNum,omitempty" comment:"出票人账号"` // 出票人账号 + AcptrNm string `json:"acptrNm,omitempty" comment:"承兑人名称"` // 承兑人名称 + AcptrSoccrcode string `json:"acptrSoccrcode,omitempty" comment:"承兑人社会信用代码"` // 承兑人社会信用代码 + AcptrActNm string `json:"acptrActNm,omitempty" comment:"承兑人账户名称"` // 承兑人账户名称 + AcptrMemno string `json:"acptrMemno,omitempty" comment:"承兑人办理渠道"` // 承兑人办理渠道 + AcptrBillact string `json:"acptrBillact,omitempty" comment:"承兑人票据账号"` // 承兑人票据账号 + AcptrDepBnkBrCode string `json:"acptrDepBnkBrCode,omitempty" comment:"承兑人开户行行号"` // 承兑人开户行行号 + AcptrDepBnkNm string `json:"acptrDepBnkNm,omitempty" comment:"承兑人开户行名"` // 承兑人开户行名 + AcptrAccNum string `json:"acptrAccNum,omitempty" comment:"承兑人账号"` // 承兑人账号 + PayeeNm string `json:"payeeNm,omitempty" comment:"收款人名称"` // 收款人名称 + PayeeSoccrcode string `json:"payeeSoccrcode,omitempty" comment:"收款人社会信用代码"` // 收款人社会信用代码 + PyeeActNm string `json:"pyeeActNm,omitempty" comment:"收款人账户名称"` // 收款人账户名称 + PyeeMemno string `json:"pyeeMemno,omitempty" comment:"收款人办理渠道"` // 收款人办理渠道 + PyeeBillact string `json:"pyeeBillact,omitempty" comment:"收款人票据账号"` // 收款人票据账号 + PayeeDepBnkBrCode string `json:"payeeDepBnkBrCode,omitempty" comment:"收款人开户行行号"` // 收款人开户行行号 + PayeeDepBnkNm string `json:"payeeDepBnkNm,omitempty" comment:"收款人开户行名"` // 收款人开户行名 + PayeeAccNum string `json:"payeeAccNum,omitempty" comment:"收款人账号"` // 收款人账号 + } + + FixEbillAddInfoDepos struct { + EbillInfoType string `json:"ebillInfoType,omitempty" comment:"历史行为种类"` // 历史行为种类 + AppNm string `json:"appNm,omitempty" comment:"请求方名称"` // 请求方名称 + AppCode string `json:"appCode,omitempty" comment:"请求方信用代码"` // 请求方信用代码 + AppActNm string `json:"appActNm,omitempty" comment:"请求方账户名称"` // 请求方账户名称 + AppMemno string `json:"appMemno,omitempty" comment:"请求方办理渠道"` // 请求方办理渠道 + AppBillact string `json:"appBillact,omitempty" comment:"请求方票据账号"` // 请求方票据账号 + AppBankNo string `json:"appBankNo,omitempty" comment:"请求方开户行行号"` // 请求方开户行行号 + AppBankNm string `json:"appBankNm,omitempty" comment:"请求方开户行行名"` // 请求方开户行行名 + AppAct string `json:"appAct,omitempty" comment:"请求方账号"` // 请求方账号 + RcvNm string `json:"rcvNm,omitempty" comment:"接收名称"` // 接收名称 + RcvCode string `json:"rcvCode,omitempty" comment:"接收信用代码"` // 接收信用代码 + RcvActNm string `json:"rcvActNm,omitempty" comment:"接收账户名称"` // 接收账户名称 + RcvMemno string `json:"rcvMemno,omitempty" comment:"接收方办理渠道"` // 接收方办理渠道 + RcvBillact string `json:"rcvBillact,omitempty" comment:"接收方票据账号"` // 接收方票据账号 + RcBankNo string `json:"rcBankNo,omitempty" comment:"接收方开户行行号"` // 接收方开户行行号 + RcBankNm string `json:"rcBankNm,omitempty" comment:"接收方开户行行名"` // 接收方开户行行名 + RcvAct string `json:"rcvAct,omitempty" comment:"接收方账号"` // 接收方账号 + WareAdr string `json:"wareAdr,omitempty" comment:"保证人地址"` // 保证人地址 + } ) diff --git a/tysk_test.go b/tysk_test.go index 85b0eb2..429a0f1 100644 --- a/tysk_test.go +++ b/tysk_test.go @@ -1,15 +1,26 @@ package tysk import ( + "encoding/json" + "fmt" "gitea.cdlsxd.cn/self-tools/tysk/tysk_constant" "gitea.cdlsxd.cn/self-tools/tysk/tysk_entity" "testing" "time" ) -const UserName = "LSXDWL003_ZL" +const ( + UserName = "LSXDWL003_ZL" + RcvPyAccNm = "成都蓝色兄弟网络科技有限公司ERP" +) -var g = NewTysk(UserName, WithEnvTest()) +var ( + g = NewTysk(UserName, WithEnvTest()) + RcvPartyDepbnkId = stringPtr("中信银行北京朝阳支行") + LinkPayFlag = tysk_constant.CommonBoolFalse + boolFalse = tysk_constant.CommonBoolFalse + BankId = stringPtr("302100011114") +) func Test_GetAccountBalance(t *testing.T) { req := tysk_entity.GetAccountBalanceReq{ @@ -127,7 +138,7 @@ func Test_AccountsTransHisQuery(t *testing.T) { func Test_SinglePay(t *testing.T) { // 模拟常量值 - linkPayFlag := tysk_constant.CommonBoolFalse // 默认不联动支付 + isCheck := tysk_constant.IsCheckRcvpartyDepbnkIdNot txnType := tysk_constant.TxnCntprTpCus // 客户类型 accType := tysk_constant.PyAccTpPub // 对公账户 @@ -137,12 +148,12 @@ func Test_SinglePay(t *testing.T) { req := tysk_entity.SinglePayReq{ ExternalNum: "MOCK123456789", - LinkPayFlag: &linkPayFlag, + LinkPayFlag: &LinkPayFlag, PypPartyAccnum: "8110701013301269598", RcvPyAccnum: "8110701012401269599", - RcvPyAccnm: "成都蓝色兄弟网络科技有限公司ERP", + RcvPyAccnm: RcvPyAccNm, IsCheckRcvpartyDepbnkId: &isCheck, - RcvPartyDepbnkId: stringPtr("中信银行北京朝阳支行"), + RcvPartyDepbnkId: RcvPartyDepbnkId, //RcvpartyBnkgId: stringPtr("10140"), TxnCntprTp: &txnType, PyAccTp: accType, @@ -171,7 +182,7 @@ func Test_SinglePayQuery(t *testing.T) { } func Test_BatchPay(t *testing.T) { - linkPayFlag := tysk_constant.CommonBoolFalse + urgntFlag := tysk_constant.CommonBoolFalse rsrvtnFlag := tysk_constant.CommonBoolTrue checkMode := tysk_constant.CheckModeBatch @@ -180,46 +191,48 @@ func Test_BatchPay(t *testing.T) { txnType := tysk_constant.TxnCntprTpCus // 客户类型 accType := tysk_constant.PyAccTpPub // 对公账户 rsvTime := time.Now().Add(2 * time.Minute).Format("2006-01-02 15:04") + + List := []tysk_entity.BatchPayList{ + { + + ExternalNum: "BATCH001", + RcvPyAccNum: "8110701012401269599", + RcvPyAccNm: RcvPyAccNm, + IsInterBnk: &isInterbnk, + IsCheckRcvPartyDepBnkId: &isCheckDepBnk, + RcvPartyDepBnkId: RcvPartyDepbnkId, + // RcvPartyBnkgId: stringPtr("105100000017"), + TxnCntprTp: &txnType, + PyAccTp: accType, + DebitAmt: 500.75, + Pscpt: "货款支付", + Rmrk: stringPtr("月度结算"), + }, + { + ExternalNum: "BATCH002", + RcvPyAccNum: "8110701013801269600", + RcvPyAccNm: RcvPyAccNm, + IsInterBnk: &isInterbnk, + IsCheckRcvPartyDepBnkId: &isCheckDepBnk, + RcvPartyDepBnkId: stringPtr("中信银行北京朝阳支行"), + TxnCntprTp: &txnType, // 客户 + PyAccTp: "00", // 对公 + DebitAmt: 500, + Pscpt: "服务费", + }, + } req := tysk_entity.BatchPayReq{ - ExternalBatNum: "MOCK123456789BATCH", - LinkPayFlag: &linkPayFlag, + ExternalBatNum: "MOCK123456789BATCH1", + LinkPayFlag: &LinkPayFlag, PyPartyAccNum: "8110701013301269598", CurrencyID: "CNY", - TotNbr: "2", - Amt: 1000.75, + TotNbr: len(List), + Amt: List[0].DebitAmt + List[1].DebitAmt, UrgntAprvFlag: &urgntFlag, RsrvtnFlag: &rsrvtnFlag, RsrvtnTms: stringPtr(rsvTime), CheckMode: &checkMode, - List: []tysk_entity.BatchPayList{ - { - - ExternalNum: "BATCH001", - RcvPyAccNum: "8110701012401269599", - RcvPyAccNm: "成都蓝色兄弟网络科技有限公司ERP", - IsInterBnk: &isInterbnk, - IsCheckRcvPartyDepBnkId: &isCheckDepBnk, - RcvPartyDepBnkId: stringPtr("中信银行北京朝阳支行"), - // RcvPartyBnkgId: stringPtr("105100000017"), - TxnCntprTp: &txnType, - PyAccTp: accType, - DebitAmt: 500.75, - Pscpt: "货款支付", - Rmrk: stringPtr("月度结算"), - }, - { - ExternalNum: "BATCH002", - RcvPyAccNum: "8110701013801269600", - RcvPyAccNm: "成都蓝色兄弟网络科技有限公司ERP", - IsInterBnk: &isInterbnk, - IsCheckRcvPartyDepBnkId: &isCheckDepBnk, - RcvPartyDepBnkId: stringPtr("中信银行北京朝阳支行"), - TxnCntprTp: &txnType, // 客户 - PyAccTp: "00", // 对公 - DebitAmt: 500, - Pscpt: "服务费", - }, - }, + List: List, } res, err := g.BatchPay(req) t.Log(res, err) @@ -233,7 +246,248 @@ func Test_BatchPayQuery(t *testing.T) { t.Log(res, err) } +var fndarBatNum = "PayArrangeBatch123456" + +func Test_PayArrange(t *testing.T) { + + payAcc := "8110701013301269598" + recAcc := tysk_entity.AccountList{"8110701012401269599", "8110701013801269600"} + // 模拟结算方式 + settlementMode := tysk_constant.SettlementModePayTrans + + // 生成模拟的交易明细列表 + var list = make([]tysk_entity.PayArrangeList, 0) + for k, v := range recAcc { + list = append(list, *MockPayArrangeList(fmt.Sprintf("%s-%d", fndarBatNum, k), v)) + } + + req := tysk_entity.PayArrangeReq{ + FndarBatNum: fndarBatNum, + PypartyAccnum: tysk_constant.AccountNo(payAcc), + BusinessType: stringPtr("测试类型"), // 业务类型 + SettlementMode: &settlementMode, // 结算方式 + //PayRat: stringPtr(JsonStringIgonErr([]tysk_entity.PayRatItem{{Pcode: "01", Pamt: "100", PayAccNum: "8110701013301269598"}})), // 模拟排款份额JSON + PayDt: time.Now().Format("2006-01-02"), // 未来30天内随机日期 + LinkPayFlag: &LinkPayFlag, // 联动支付标志 + List: list, // 交易明细列表 + } + res, err := g.PayArrange(req) + t.Log(res, err) +} + +// MockPayArrangeList 生成模拟的 PayArrangeList 数据 +func MockPayArrangeList(lisName string, acc tysk_constant.AccountNo) *tysk_entity.PayArrangeList { + // 模拟交易对手类型 + txnCntprTps := tysk_constant.TxnCntprTpOther + + // 模拟付款种类 + pyAccTps := tysk_constant.PyAccTpPri + + // 模拟币种(这里固定为CNY,根据实际需求调整) + + return &tysk_entity.PayArrangeList{ + FndarNum: lisName, // 模拟流水号 + RcvpyAccnum: acc, // 模拟收方账号 + RcvpyAccnm: RcvPyAccNm, // 模拟收方户名 + //RcvpartyDepbnkId: RcvPartyDepbnkId, // 模拟开户行 + RcvpartyBnkgId: BankId, // 模拟联行号 + TxnCntprTp: &txnCntprTps, // 交易对手类型 + PyAccTp: pyAccTps, // 付款种类 + Amt: 100, + CurrencyID: "CNY", // 币种 + Pscpt: "测试附言", // 模拟附言 + Rmrk: stringPtr("备注"), // 模拟备注 + Rmrk1: stringPtr("备用1"), // 模拟备用字段1 + Rmrk2: stringPtr("备用2"), // 模拟备用字段2 + Rmrk3: stringPtr("备用3"), // 模拟备用字段3 + Rmrk4: stringPtr("备用4"), // 模拟备用字段4 + } +} + +func Test_PayArrangeQuery(t *testing.T) { + req := tysk_entity.PayArrangeQueryReq{ + FndarBatNum: fndarBatNum, + } + res, err := g.PayArrangeQuery(req) + t.Log(res, err) +} + +func Test_PayArrangeBillQuery(t *testing.T) { + req := tysk_entity.PayArrangeBillQueryReq{ + FndarBatNum: fndarBatNum, + StartRecord: 1, + PageNumber: 10, + } + res, err := g.PayArrangeBillQuery(req) + t.Log(res, err) +} + +func Test_BatchesPayArrangeBillQuery(t *testing.T) { + req := tysk_entity.BatchesPayArrangeBillQueryReq{ + StartRecord: 1, + PageNumber: 10, + StartDate: "20250730", + EndDate: "20250829", + } + res, err := g.BatchesPayArrangeBillQuery(req) + t.Log(res, err) +} + +var ( + TGBPayExternalBatNum = "BATCH202306150001" +) + +func Test_TGBPay(t *testing.T) { + List := []tysk_entity.TGBPayReqRow{ + { + ExternalNum: fmt.Sprintf("%s-%d", TGBPayExternalBatNum, 0), + RcvpyAccnum: tysk_constant.AccountNo("8110701012401269599"), + RcvpyAccnm: "张三", + DebitAmt: 1500.00, + Pscpt: "工资发放", + }, + { + ExternalNum: fmt.Sprintf("%s-%d", TGBPayExternalBatNum, 1), + RcvpyAccnum: tysk_constant.AccountNo("8110701013801269600"), + RcvpyAccnm: "李四", + DebitAmt: 500.00, + Pscpt: "奖金", + Rmrk: stringPtr("季度奖金"), + }, + } + req := tysk_entity.TGBPayReq{ + ExternalBatNum: TGBPayExternalBatNum, + LinkPayFlag: &LinkPayFlag, + PypartyAccnum: tysk_constant.AccountNo("8110701013301269598"), + CurrencyID: "CNY", + TotNbr: len(List), + Amt: List[0].DebitAmt + List[1].DebitAmt, + ItlgPayrollType: tysk_constant.CommonBool("01"), + ItlgPreparType: tysk_constant.ItlgPreparType("1"), + ItlgRefundFlag: tysk_constant.ItlgRefundFlag("0"), + UrgntAprvFlag: &boolFalse, + RsrvtnFlag: &boolFalse, + RsrvtnTms: stringPtr(time.Now().Add(24 * time.Hour).Format("2006-01-02 15:04:05")), + BatPscpt: "测试批次附言", + BatRmrk: stringPtr("测试批次备注"), + List: List, + } + res, err := g.TGBPay(req) + t.Log(res, err) +} + +func Test_RefundTransQuery(t *testing.T) { + req := tysk_entity.RefundTransQueryReq{ + AccountNo: []tysk_constant.AccountNo{"8110701013301269598", "8110701012401269599", "8110701013801269600"}, + StartDate: "20250728", + EndDate: "20250803", + StartRecord: 1, + PageNumber: 10, + } + res, err := g.RefundTransQuery(req) + t.Log(res, err) +} + +var ( + BatchSalarySendExternalBatNum = "BatchSalary202306150001" +) + +func Test_BatchSalarySend(t *testing.T) { + payrollDt := time.Now().Format("200601") + //rsvTime := time.Now().Add(24 * time.Hour).Format("2006-01-02 15:04:05") + List := []tysk_entity.BatchSalarySendRow{ + { + ExternalNum: fmt.Sprintf("%s-%d", BatchSalarySendExternalBatNum, 0), + RcvpyAccnum: tysk_constant.AccountNo("8110701012401269599"), + RcvpyAccnm: "张三", + DebitAmt: 1.00, + Pscpt: "6月工资", + Rmrk: "正式员工", + RcvpartyBnkgId: BankId, + }, + { + ExternalNum: fmt.Sprintf("%s-%d", BatchSalarySendExternalBatNum, 1), + RcvpyAccnum: tysk_constant.AccountNo("8110701013801269600"), + RcvpyAccnm: "李四", + DebitAmt: 2.00, + Pscpt: "6月工资+奖金", + //RcvpartyDepbnkId: "中国建设银行上海分行", + RcvpartyBnkgId: BankId, + }, + } + req := tysk_entity.BatchSalarySendReq{ + ExternalBatNum: BatchSalarySendExternalBatNum, + LinkPayFlag: &LinkPayFlag, + PypartyAccnum: tysk_constant.AccountNo("8110701013301269598"), + CurrencyID: "CNY", + TotNbr: len(List), + Amt: List[0].DebitAmt + List[1].DebitAmt, + PayrollDt: payrollDt, + UrgntAprvFlag: &boolFalse, + RsrvtnFlag: &boolFalse, + //RsrvtnTms: &rsvTime, + BatPscpt: "6月工资发放", + PayrollUse: stringPtr("1"), + ExtField1: stringPtr("PROTO1234567890"), + List: List, + } + res, err := g.BatchSalarySend(req) + t.Log(res, err) +} + +func Test_BankInfoQuery(t *testing.T) { + req := tysk_entity.BankInfoQueryReq{ + AreaID: "BCM", + SkRecordNum: 10, + SkStartNo: 1, + } + res, err := g.BankInfoQuery(req) + t.Log(res, err) +} + +func Test_BillList(t *testing.T) { + //endDate := time.Now().Format("2006-01-02") + //startDate := time.Now().AddDate(0, 0, -30).Format("2006-01-02") + // + //// Set random amount range + //minAmt := 1.00 + //maxAmt := minAmt + 1000000.00 + req := tysk_entity.BillListReq{ + QueryType: tysk_constant.QueryTypeHad, + //BsnTp: stringPtr("17,18,51,52"), + //List: []tysk_entity.BillListReqRow{ + // { + // SignAcc: "1", + // BillPkgId: "BILLPKG", + // }, + //}, + //MinAmt: float64Ptr(minAmt), + //MaxAmt: float64Ptr(maxAmt), + //ExpDtStart: stringPtr(startDate), + //ExpDtEnd: stringPtr(endDate), + StartRecord: 1, + PageNumber: 50, + } + res, err := g.BillList(req) + t.Log(res, err) +} + +func Test_BillDetail(t *testing.T) { + + req := tysk_entity.BillDetailReq{} + res, err := g.BillDetail(req) + t.Log(res, err) +} + // stringPtr 辅助函数:生成字符串指针 func stringPtr(s string) *string { return &s } +func float64Ptr(s float64) *float64 { + return &s +} + +func JsonStringIgonErr(data interface{}) string { + dataByte, _ := json.Marshal(data) + return string(dataByte) +}