From 5824ed7eef3acba2ace2f593d3f1aa2367df03d3 Mon Sep 17 00:00:00 2001 From: maguodong Date: Fri, 10 Oct 2025 14:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=E8=B4=A6=E6=88=B7=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=B8=B8=E9=87=8F=E5=92=8C=E7=B1=BB=E5=9E=8B=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=20-=20=E6=96=B0=E5=A2=9E=E9=99=84=E4=BB=B6=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B(AttType)=E5=B8=B8=E9=87=8F=E5=AE=9A=E4=B9=89=EF=BC=8C?= =?UTF-8?q?=E5=8C=85=E6=8B=AC=E8=BA=AB=E4=BB=BD=E8=AF=81=E3=80=81=E9=93=B6?= =?UTF-8?q?=E8=A1=8C=E5=8D=A1=E3=80=81=E8=90=A5=E4=B8=9A=E6=89=A7=E7=85=A7?= =?UTF-8?q?=E7=AD=8916=E7=A7=8D=E7=B1=BB=E5=9E=8B=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E8=8C=83=E5=9B=B4(SplitRange)=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=EF=BC=8C=E6=94=AF=E6=8C=81=E5=85=A8=E9=83=A8=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E5=88=86=E8=B4=A6=E5=92=8C=E6=A0=87=E8=AE=B0=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E5=88=86=E8=B4=A6=20-=20=E6=96=B0=E5=A2=9E=E5=88=86?= =?UTF-8?q?=E8=B4=A6=E8=B5=84=E9=87=91=E6=9D=A5=E6=BA=90(SepFundSource)?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=EF=BC=8C=E5=8C=BA=E5=88=86=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E5=92=8C=E4=BD=99=E9=A2=9D=E5=88=86=E8=B4=A6?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9E=E5=88=86=E8=B4=A6=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F(SplitLaunchMode)=E5=B8=B8=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8=E3=80=81=E8=A7=84=E5=88=99?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=92=8C=E6=89=8B=E5=8A=A8=E5=88=86=E8=B4=A6?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9E=E5=88=86=E8=B4=A6=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B(SplitSettleType)=E5=B8=B8=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=BB=E6=89=AB=E7=8E=B0=E7=BB=93=E5=92=8C?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E8=87=AA=E5=8A=A8=E7=BB=93=E7=AE=97=20-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=86=E8=B4=A6=E8=A7=84=E5=88=99=E6=9D=A5?= =?UTF-8?q?=E6=BA=90(SplitRuleSource)=E5=B8=B8=E9=87=8F=EF=BC=8C=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E5=95=86=E6=88=B7=E8=A7=84=E5=88=99=E5=92=8C=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E8=A7=84=E5=88=99=20-=20=E6=96=B0=E5=A2=9E=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E7=B1=BB=E5=9E=8B=E7=A0=81(AcctTypeCode)=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=EF=BC=8C=E6=94=AF=E6=8C=81=E5=AF=B9=E5=85=AC=E5=92=8C?= =?UTF-8?q?=E5=AF=B9=E7=A7=81=E8=B4=A6=E6=88=B7-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=B4=A6=E6=88=B7=E8=AF=81=E4=BB=B6=E7=B1=BB=E5=9E=8B(AcctCert?= =?UTF-8?q?ificateType)=E5=B8=B8=E9=87=8F=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E8=AF=81=E3=80=81=E6=8A=A4=E7=85=A7=E7=AD=89?= =?UTF-8?q?=E5=A4=9A=E7=A7=8D=E8=AF=81=E4=BB=B6=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E8=AE=A1=E7=AE=97=E7=B1=BB=E5=9E=8B(CalType)?= =?UTF-8?q?=E5=B8=B8=E9=87=8F=EF=BC=8C=E6=94=AF=E6=8C=81=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=92=8C=E6=AF=94=E4=BE=8B=E5=88=86=E8=B4=A6?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9E=E6=94=AF=E4=BB=98=E7=B1=BB=E5=9E=8B(P?= =?UTF-8?q?ayType)=E5=B8=B8=E9=87=8F=EF=BC=8C=E6=94=AF=E6=8C=81=E6=94=B6?= =?UTF-8?q?=E6=AC=BE=E3=80=81=E4=BB=98=E6=AC=BE=E3=80=81=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E7=AD=896=E7=A7=8D=E8=B4=A6=E6=88=B7=E7=B1=BB=E5=9E=8B=20-=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9ApplyBindAttachment.AttachType=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=BAconsts.AttType=20-=20=E4=BF=AE=E6=94=B9ApplyL?= =?UTF-8?q?edgerMerRequest.SplitRange=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.Spl?= =?UTF-8?q?itRange=20-=20=E4=BF=AE=E6=94=B9ApplyLedgerMerRequest.SepFundSo?= =?UTF-8?q?urce=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.SepFundSource-=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9ApplyLedgerMerRequest.SplitLaunchMode?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.SplitLaunchMode=20-=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9ApplyLedgerMerRequest.SettleType=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=BAconsts.SplitSettleType-=20=E4=BF=AE=E6=94=B9A?= =?UTF-8?q?pplyLedgerMerRequest.SplitRuleSource=E7=B1=BB=E5=9E=8B=E4=B8=BA?= =?UTF-8?q?consts.SplitRuleSource-=20=E4=BF=AE=E6=94=B9ApplyLedgerReceiver?= =?UTF-8?q?Request.AcctTypeCode=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.AcctTypeC?= =?UTF-8?q?ode=20-=20=E4=BF=AE=E6=94=B9BalanceQueryRequest.PayType?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.PayType=20-=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9MergePreorderReqData.AccountType=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E4=B8=BAconsts.AccountType=20-=20=E4=BF=AE=E6=94=B9MergePreord?= =?UTF-8?q?erReqData.TransType=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.TransType?= =?UTF-8?q?=20-=20=E4=BF=AE=E6=94=B9PreorderReqData.AccountType=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=BAconsts.AccountType=20-=20=E4=BF=AE=E6=94=B9Pr?= =?UTF-8?q?eorderReqData.TransType=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.TransT?= =?UTF-8?q?ype=20-=20=E4=BF=AE=E6=94=B9PreorderReqData.SettleType=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=BAconsts.SettleType=20-=20=E4=BF=AE=E6=94=B9Ref?= =?UTF-8?q?undReqData.RefundAccMode=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.Refun?= =?UTF-8?q?dAccMode=20-=20=E4=BF=AE=E6=94=B9RefundReqData.RefundAmtSts?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BAconsts.RefundAmtSts=20-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9EAccountType=E5=B8=B8=E9=87=8F=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=BE=AE=E4=BF=A1=E3=80=81=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AE=9D=E3=80=81=E9=93=B6=E8=81=94=E7=AD=8910?= =?UTF-8?q?=E7=A7=8D=E8=B4=A6=E6=88=B7=E7=B1=BB=E5=9E=8B=20-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9ETransType=E5=B8=B8=E9=87=8F=E5=AE=9A=E4=B9=89=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81NATIVE=E3=80=81JSAPI=E3=80=81=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=AD=894=E7=A7=8D=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=20-=20=E6=96=B0=E5=A2=9ESettleType=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E5=AE=9A=E4=B9=89=EF=BC=8C=E6=94=AF=E6=8C=81=E5=B8=B8?= =?UTF-8?q?=E8=A7=84=E7=BB=93=E7=AE=97=E5=92=8C=E5=88=86=E8=B4=A6=E9=80=9A?= =?UTF-8?q?=E7=BB=93=E7=AE=97-=20=E6=96=B0=E5=A2=9ERefundAccMode=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E5=AE=9A=E4=B9=89=EF=BC=8C=E6=94=AF=E6=8C=814?= =?UTF-8?q?=E7=A7=8D=E9=80=80=E6=AC=BE=E8=B4=A6=E6=88=B7=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20-=20=E6=96=B0=E5=A2=9ERefundAmtSts=E5=B8=B8=E9=87=8F?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=EF=BC=8C=E6=94=AF=E6=8C=81=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E5=89=8D=E5=90=8E=E9=80=80=E6=AC=BE=E7=8A=B6=E6=80=81=E5=8C=BA?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- consts/account.go | 134 +++++++++++++++++++++++++++++++++++ consts/field.go | 67 ++++++++++++++++++ model/applyBind.go | 8 ++- model/applyLedgerMer.go | 12 ++-- model/applyLedgerReceiver.go | 4 +- model/balanceQuery.go | 4 +- model/mergePreorder.go | 111 +++++++++++++++-------------- model/orderSplitLedger.go | 4 +- model/preorder.go | 20 +++--- model/refund.go | 72 ++++++++++--------- model/separate.go | 4 +- model/uploadFile.go | 14 ++-- model/withdraw.go | 6 +- 13 files changed, 344 insertions(+), 116 deletions(-) create mode 100644 consts/account.go create mode 100644 consts/field.go diff --git a/consts/account.go b/consts/account.go new file mode 100644 index 0000000..b6eb116 --- /dev/null +++ b/consts/account.go @@ -0,0 +1,134 @@ +package consts + +type AttType string + +const ( + ATT_TYPE_FR_ID_CARD_FRONT AttType = "FR_ID_CARD_FRONT" // 法人身份证正面 + ATT_TYPE_FR_ID_CARD_BEHIND AttType = "FR_ID_CARD_BEHIND" // 法人身份证反面 + ATT_TYPE_ID_CARD_FRONT AttType = "ID_CARD_FRONT" // 结算人身份证正面 + ATT_TYPE_ID_CARD_BEHIND AttType = "ID_CARD_BEHIND" // 结算人身份证反面 + ATT_TYPE_BANK_CARD AttType = "BANK_CARD" // 银行卡 + ATT_TYPE_BUSINESS_LICENCE AttType = "BUSINESS_LICENCE" // 营业执照 + ATT_TYPE_MERCHANT_PHOTO AttType = "MERCHANT_PHOTO" // 商户门头照片 + ATT_TYPE_SHOPINNER AttType = "SHOPINNER" // 商铺内部照片 + ATT_TYPE_XY AttType = "XY" // 线下纸质协议 + ATT_TYPE_NETWORK_XY AttType = "NETWORK_XY" // 电子协议 + ATT_TYPE_HT AttType = "HT" // 租赁合同 + ATT_TYPE_COOPERATION_QUALIFICATION_PROOF AttType = "COOPERATION_QUALIFICATION_PROOF" // 合作资质证明 + ATT_TYPE_FOOD_QUALIFICATION_PROOF AttType = "FOOD_QUALIFICATION_PROOF" // 食品经营相关资质 + ATT_TYPE_NO_LEGAL_PERSON_SETT_AUTH_LETTER AttType = "NO_LEGAL_PERSON_SETT_AUTH_LETTER" // 非法人结算授权书 + ATT_TYPE_SPLIT_ENTRUST_FILE AttType = "SPLIT_ENTRUST_FILE" // 结算授权委托书 + ATT_TYPE_RENTAL_AGREEMENT AttType = "RENTAL_AGREEMENT" // 集市方与场地方间的租赁协议 + ATT_TYPE_SPLIT_COOPERATION_FILE AttType = "SPLIT_COOPERATION_FILE" // 集市方与摊主间的合作协议 + ATT_TYPE_OTHERS AttType = "OTHERS" // 其他 +) + +func (at AttType) Ptr() string { + return string(at) +} + +type SplitRange string + +const ( + SPLIT_RANGE_ALL SplitRange = "ALL" // 全部交易分账 + SPLIT_RANGE_MARK SplitRange = "MARK" // 标记交易分账 +) + +func (sr SplitRange) Ptr() string { + return string(sr) +} + +type SepFundSource string + +const ( + SEP_FUND_SOURCE_TR SepFundSource = "TR" // 交易分账 + SEP_FUND_SOURCE_BA SepFundSource = "BR" // 余额分账 +) + +func (sf SepFundSource) Ptr() string { + return string(sf) +} + +type SplitLaunchMode string + +const ( + SPLIT_LAUNCH_MODE_AUTO SplitLaunchMode = "AUTO" // 自动触发分账 + SPLIT_LAUNCH_MODE_POINTRULE SplitLaunchMode = "POINTRULE" // 指定规则分账 + SPLIT_LAUNCH_MODE_MANUAL SplitLaunchMode = "MANUAL" // 手动分账 +) + +func (slm SplitLaunchMode) Ptr() string { + return string(slm) +} + +type SplitSettleType string + +const ( + SPLIT_SETTLE_TYPE_01 SplitSettleType = "01" // 主扫现结 + SPLIT_SETTLE_TYPE_03 SplitSettleType = "03" // 交易自动结算 +) + +func (sst SplitSettleType) Ptr() string { + return string(sst) +} + +type SplitRuleSource string + +const ( + SPLIT_RULE_SOURCE_MER SplitRuleSource = "MER" // 商户分账规则 + SPLIT_RULE_SOURCE_PLATFORM SplitRuleSource = "PLATFORM" // 平台分账规则 +) + +func (srs SplitRuleSource) Ptr() string { + return string(srs) +} + +type AcctTypeCode string + +const ( + ACCT_TYPE_CODE_57 AcctTypeCode = "57" // 对公 + ACCT_TYPE_CODE_58 AcctTypeCode = "58" // 对私 +) + +func (act AcctTypeCode) Ptr() string { + return string(act) +} + +type AcctCertificateType string + +const ( + ACCT_CERTIFICATE_TYPE_ID_CARD AcctCertificateType = "17" // 身份证 + ACCT_CERTIFICATE_TYPE_PASSPORT AcctCertificateType = "18" // 护照 + ACCT_CERTIFICATE_TYPE_HONGKONG_MACAO AcctCertificateType = "19" // 港澳居民来往内地通行证 + ACCT_CERTIFICATE_TYPE_TRAVEL AcctCertificateType = "20" // 台湾居民来往内地通行证 +) + +func (act AcctCertificateType) Ptr() string { + return string(act) +} + +type CalType string + +const ( + CAL_TYPE_0 CalType = "0" // 按固定金额分账 + CAL_TYPE_1 CalType = "1" // 按比例分账 +) + +func (ct CalType) Ptr() string { + return string(ct) +} + +type PayType string + +const ( + PAY_TYPE_01 PayType = "01" // 收款账户 + PAY_TYPE_02 PayType = "02" // 付款账户 + PAY_TYPE_03 PayType = "03" // 分账商户账户 + PAY_TYPE_04 PayType = "04" // 分账接收方账户 + PAY_TYPE_05 PayType = "05" // 充值代付账户 + PAY_TYPE_06 PayType = "06" // 结算代付账户 +) + +func (pt PayType) Ptr() string { + return string(pt) +} diff --git a/consts/field.go b/consts/field.go new file mode 100644 index 0000000..d2eef2d --- /dev/null +++ b/consts/field.go @@ -0,0 +1,67 @@ +package consts + +type AccountType string + +const ( + ACCOUNT_TYPE_WECHAT AccountType = "WECHAT" // 微信 + ACCOUNT_TYPE_ALIPAY AccountType = "ALIPAY" // 支付宝 + ACCOUNT_TYPE_UQRCODEPAY AccountType = "UQRCODEPAY" // 银联 + ACCOUNT_TYPE_BASTPAY AccountType = "BASTPAY" // 翼支付 + ACCOUNT_TYPE_SUNING AccountType = "SUNING" // 苏宁 + ACCOUNT_TYPE_LKLACC AccountType = "LKLACC" // 拉卡拉支付账户 + ACCOUNT_TYPE_NUCSPAY AccountType = "NUCSPAY" // 网联小钱包 + ACCOUNT_TYPE_JD AccountType = "JD" +) + +func (at AccountType) Ptr() string { + return string(at) +} + +type TransType string + +const ( + TRANS_TYPE_NATIVE TransType = "41" // NATIVE(ALIPAY, 云闪付支持, 京东白条分期) + TRANS_TYPE_JSAPI TransType = "51" // JSAPI(微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期) + TRANS_TYPE_WECHATPAY TransType = "71" // 微信小程序支付 + TRANS_TYPE_APP TransType = "61" // APP支付(微信APP支付),String(2) +) + +func (tt TransType) Ptr() string { + return string(tt) +} + +type SettleType string + +const ( + SETTLE_TYPE_NORMAL SettleType = "0" // 常规结算 + SETTLE_TYPE_SPECIAL SettleType = "1" // 拉卡拉分账通结算 +) + +func (st SettleType) Ptr() string { + return string(st) +} + +type RefundAccMode string + +// 00退货账户余额 05商户余额 06终端余额 30终点账户 +const ( + REFUND_ACC_MODE_USER_BALANCE RefundAccMode = "00" // 退货账户余额 + REFUND_ACC_MODE_MERCHANT_BALANCE RefundAccMode = "05" // 商户余额 + REFUND_ACC_MODE_TERMINAL_BALANCE RefundAccMode = "06" // 终端余额 + REFUND_ACC_MODE_ACCOUNT RefundAccMode = "30" // 终点账户 +) + +func (rat RefundAccMode) Ptr() string { + return string(rat) +} + +type RefundAmtSts string + +const ( + REFUND_AMT_STS_NORMAL RefundAmtSts = "00" // 分账前 + REFUND_AMT_STS_SPLIT RefundAmtSts = "01" // 分账后 +) + +func (ras RefundAmtSts) Ptr() string { + return string(ras) +} diff --git a/model/applyBind.go b/model/applyBind.go index 668e5ca..47d1636 100644 --- a/model/applyBind.go +++ b/model/applyBind.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // ApplyBindRequest 分账关系绑定请求结构体 // 用于发起分账接收方与商户的关系绑定申请 // 拉卡拉SDK接口文档:分账关系绑定接口 @@ -28,9 +30,9 @@ type ApplyBindReqData struct { } type ApplyBindAttachment struct { - AttachType string `json:"attachType"` // 附件类型编码,必传,长度32 - AttachName string `json:"attachName"` // 附件名称,必传,长度32 - AttachStorePath string `json:"attachStorePath"` // 附件路径,必传,长度128,通过调用附件上传接口获取 + AttachType consts.AttType `json:"attachType"` // 附件类型编码,必传,长度32 + AttachName string `json:"attachName"` // 附件名称,必传,长度32 + AttachStorePath string `json:"attachStorePath"` // 附件路径,必传,长度128,通过调用附件上传接口获取 } // ApplyBindResponse 分账关系绑定响应结构体 diff --git a/model/applyLedgerMer.go b/model/applyLedgerMer.go index 619270a..5273133 100644 --- a/model/applyLedgerMer.go +++ b/model/applyLedgerMer.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // ApplyLedgerMerRequest 商户分账业务开通申请请求结构体 type ApplyLedgerMerRequest struct { ReqData *ApplyLedgerMerReqData `json:"reqData"` // 请求业务数据 @@ -19,12 +21,12 @@ type ApplyLedgerMerReqData struct { SplitLowestRatio float64 `json:"splitLowestRatio"` // 最低分账比例,必传,长度12,百分比,支持2位精度,取值范围:70-70.50 SplitEntrustFileName string `json:"splitEntrustFileName"` // 分账授权委托书文件名称,必传,长度64,文件格式:pdf SplitEntrustFilePath string `json:"splitEntrustFilePath"` // 分账授权委托书文件路径,必传,长度64,调用附件上传接口获取 - SplitRange string `json:"splitRange"` // 分账范围,必传,长度32,取值说明:ALL-全部交易分账(所有交易默认都分账),MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算) - SplitFundSource string `json:"splitFundSource"` // 分账依据,非必传,长度32,取值说明:TRA-交易分账,BAR-金额分账 + SplitRange consts.SplitRange `json:"splitRange"` // 分账范围,必传,长度32,取值说明:ALL-全部交易分账(所有交易默认都分账),MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算) + SepFundSource consts.SepFundSource `json:"sepFundSource"` // 分账依据,非必传,长度32,取值说明:TRA-交易分账,BAR-金额分账 ElecContractId string `json:"elecContractId"` // 电子合同编号,非必传,长度32,收单已签约交易电子合同编号,供审核人员复核使用 - SplitLaunchMode string `json:"splitLaunchMode"` // 分账发起方式,非必传,长度32,取值说明:AUTO-自动触发分账,POINTTRUE-指定规则分账,MANUAL-手动分账 - SettleType string `json:"settleType"` // 结算类型,非必传,长度32,取值说明:01-主扫现结,02-复扫现结,03-交易自动结算 - SplitRuleSource string `json:"splitRuleSource"` // 分账规则来源,条件必传,长度32,取值说明:MER-商户自定规则,PLATFORM-平台分润规则(分润规则必传) + SplitLaunchMode consts.SplitLaunchMode `json:"splitLaunchMode"` // 分账发起方式,非必传,长度32,取值说明:AUTO-自动触发分账,POINTTRUE-指定规则分账,MANUAL-手动分账 + SettleType consts.SplitSettleType `json:"settleType"` // 结算类型,非必传,长度32,取值说明:01-主扫现结,02-复扫现结,03-交易自动结算 + SplitRuleSource consts.SplitRuleSource `json:"splitRuleSource"` // 分账规则来源,条件必传,长度32,取值说明:MER-商户自定规则,PLATFORM-平台分润规则(分润规则必传) RetUrl string `json:"retUrl"` // 回调通知地址,必传,长度128,分账申请结果以异步消息或同步返回的方式通知,如需无线路由处理,也可以通过第三方商户信息查询接口确定结算结果 Attachments []*ApplyBindAttachment `json:"attachments,omitempty"` // 附加资料,可选,集合,其他需附加的文件信息 } diff --git a/model/applyLedgerReceiver.go b/model/applyLedgerReceiver.go index 631e156..a1c848e 100644 --- a/model/applyLedgerReceiver.go +++ b/model/applyLedgerReceiver.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // ApplyLedgerReceiverRequest 分账接收方创建请求结构体 // 用于向拉卡拉接口发送分账接收方创建请求 // 包含请求头信息和业务数据 @@ -43,7 +45,7 @@ type ApplyLedgerReceiverReqData struct { // 收款账户名称,必传,长度32 AcctName string `json:"acctName"` // 收款账户类型代码,必传,长度32,取值说明:57:对公,58:对私 - AcctTypeCode string `json:"acctTypeCode"` + AcctTypeCode consts.AcctTypeCode `json:"acctTypeCode"` // 收款账户证件类型,必传,长度32,取值说明:17身份证,18护照,19港澳居民来往内地通行证,20台湾居民来往内地通行证,身份证外类型先咨询后再使用 AcctCertificateType string `json:"acctCertificateType"` // 收款账户证件号,必传,长度32 diff --git a/model/balanceQuery.go b/model/balanceQuery.go index 309a56c..3b320d3 100644 --- a/model/balanceQuery.go +++ b/model/balanceQuery.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // BalanceQueryRequest 余额查询请求结构体 // 用于向拉卡拉接口发送余额查询请求 // 包含请求头信息和业务数据 @@ -23,7 +25,7 @@ type BalanceQueryReqData struct { // 账号,若该参数上送,则payType将无效,非必传,最大长度32 PayNo string `json:"pay_no"` // 账号类型(01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)-未上送则默认01,非必传,最大长度32 - PayType string `json:"pay_type"` + PayType consts.PayType `json:"pay_type"` // 账户标志(01:一般账户;03:虚户)-未上送则默认01,非必传,最大长度32 MgtFlag string `json:"mgt_flag"` } diff --git a/model/mergePreorder.go b/model/mergePreorder.go index 804a466..83c1b2f 100644 --- a/model/mergePreorder.go +++ b/model/mergePreorder.go @@ -1,31 +1,34 @@ package model -import "github.com/gogf/gf/v2/os/gtime" +import ( + "github.com/black1552/lkl_sdk/consts" + "github.com/gogf/gf/v2/os/gtime" +) // MergePreorder 主扫合单交易请求结构体 type MergePreorder struct { - ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS - Version string `json:"version"` // 接口版本号,固定值"3.0" + ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS + Version string `json:"version"` // 接口版本号,固定值"3.0" ReqData *MergePreorderReqData `json:"req_data"` // 请求业务数据 } // MergePreorderReqData 主扫合单交易请求业务数据 type MergePreorderReqData struct { - MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 - TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填 - OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,String(32),必填 - OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息,List,必填 - AccountType string `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 京东钱包:JD,String(32),必填 - TransType string `json:"trans_type"` // 接入方式,41:NATIVE(扫码支付)(仅ALIPAY支持) 51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,支付宝JS支付、拉卡拉钱包支付)71:微信小程序支付 81:支付宝H5支付(需特殊商户账户端支持),String(2),必填 - TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12),必填 - LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,Object,风控要求必送,必填 - BusiMode string `json:"busi_mode"` // 业务模式,ACQ-收单 PAY-付款不填,默认为"ACQ-收单",String(8),选填 - Subject string `json:"subject"` // 订单标题,用于简单描述订单或商品主题,传递给账户端(账户端控制,实际最多42个字节),String(42),选填 - NotifyUrl string `json:"notify_url"` // 商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128),选填 - Remark string `json:"remark"` // 备注,String(128),选填 - IdentityInfo string `json:"identity_info"` // 实名支付信息,json字符串,如{"identityNo": "3200000000000000XX", "name": "张三"},然后国密sm2加密,String(1024),选填 - AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,Object,选填 - CompleteNotifyUrl string `json:"complete_notify_url"` // 发货确认通知地址,发货类小程序确认收货后通知商户的地址,String(128),选填 + MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 + TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填 + OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,String(32),必填 + OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息,List,必填 + AccountType consts.AccountType `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 京东钱包:JD,String(32),必填 + TransType consts.TransType `json:"trans_type"` // 接入方式,41:NATIVE(扫码支付)(仅ALIPAY支持) 51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,支付宝JS支付、拉卡拉钱包支付)71:微信小程序支付 81:支付宝H5支付(需特殊商户账户端支持),String(2),必填 + TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12),必填 + LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,Object,风控要求必送,必填 + BusiMode string `json:"busi_mode"` // 业务模式,ACQ-收单 PAY-付款不填,默认为"ACQ-收单",String(8),选填 + Subject string `json:"subject"` // 订单标题,用于简单描述订单或商品主题,传递给账户端(账户端控制,实际最多42个字节),String(42),选填 + NotifyUrl string `json:"notify_url"` // 商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128),选填 + Remark string `json:"remark"` // 备注,String(128),选填 + IdentityInfo string `json:"identity_info"` // 实名支付信息,json字符串,如{"identityNo": "3200000000000000XX", "name": "张三"},然后国密sm2加密,String(1024),选填 + AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,Object,选填 + CompleteNotifyUrl string `json:"complete_notify_url"` // 发货确认通知地址,发货类小程序确认收货后通知商户的地址,String(128),选填 } // OutSplitInfo 拆单信息 @@ -40,29 +43,29 @@ type OutSplitInfo struct { // LocationInfo 地址位置信息 type LocationInfo struct { - RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填 + RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填 BaseStation string `json:"base_station"` // 基站信息,客户端设备的基站信息(主扫时基站信息使用该字段),String(128),选填 - Location string `json:"location"` // 维度,经度,商户终端的地理位置,存在必填格式:纬度,经度,+表示北纬、东经,-表示南纬、西经,精度最长支持小数点后9位。举例:+37.123456789,121.123456789,String(32),选填 + Location string `json:"location"` // 维度,经度,商户终端的地理位置,存在必填格式:纬度,经度,+表示北纬、东经,-表示南纬、西经,精度最长支持小数点后9位。举例:+37.123456789,121.123456789,String(32),选填 } // AccBusiFields 账户端业务信息域,微信主扫场景 type AccBusiFields struct { - TimeoutExpress string `json:"timeout_express"` // 预下单的订单的有效时间,以分钟为单位。如果在有效时间内没有完成付款,则在账户端该订单失效。如用户超时,则账户端完成失效处理,建议不超过15分钟。不传值则默认5分钟,String(2),选填 - SubAppId string `json:"sub_appid"` // 子商户公众账号ID,sub_appid(即微信小程序支付-71、公众号支付-51、微信支付-61),此参数必传,只对微信支付生效;拉卡拉钱包情况下,该字段上送LAKALA的openid,String(32),选填 - UserId string `json:"user_id"` // 用户标识,用户在子商户sub_appid下的唯一标识,sub_openid,(即微信小程序支付-71、公众号支付-51),此参数必传,只对微信支付有效,String(64),选填 - Detail string `json:"detail"` // 商品详情,单品优惠功能字段,详见下文说明,String(1024),选填 - GoodsTag string `json:"goods_tag"` // 订单优惠标记,微信平台配置的商品标记,用于优惠券或者满减使用,accountType为WECHAT时,可选填此字段,String(32),选填 - Attach string `json:"attach"` // 附加域,附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据。商户定制字段,直接送到账户端,String(128),选填 + TimeoutExpress string `json:"timeout_express"` // 预下单的订单的有效时间,以分钟为单位。如果在有效时间内没有完成付款,则在账户端该订单失效。如用户超时,则账户端完成失效处理,建议不超过15分钟。不传值则默认5分钟,String(2),选填 + SubAppId string `json:"sub_appid"` // 子商户公众账号ID,sub_appid(即微信小程序支付-71、公众号支付-51、微信支付-61),此参数必传,只对微信支付生效;拉卡拉钱包情况下,该字段上送LAKALA的openid,String(32),选填 + UserId string `json:"user_id"` // 用户标识,用户在子商户sub_appid下的唯一标识,sub_openid,(即微信小程序支付-71、公众号支付-51),此参数必传,只对微信支付有效,String(64),选填 + Detail string `json:"detail"` // 商品详情,单品优惠功能字段,详见下文说明,String(1024),选填 + GoodsTag string `json:"goods_tag"` // 订单优惠标记,微信平台配置的商品标记,用于优惠券或者满减使用,accountType为WECHAT时,可选填此字段,String(32),选填 + Attach string `json:"attach"` // 附加域,附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据。商户定制字段,直接送到账户端,String(128),选填 GoodsDetail []*GoodsDetail `json:"goods_detail"` // 商品详情列表,微信商品详情字段说明 } // GoodsDetail 微信商品详情字段说明 type GoodsDetail struct { - GoodsId string `json:"goods_id"` // 商品ID,由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。如"商品编码",必填 + GoodsId string `json:"goods_id"` // 商品ID,由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。如"商品编码",必填 WxpayGoodsId string `json:"wxpay_goods_id"` // 微信支付定义的统一商品编号,String(32),选填 - GoodsName string `json:"goods_name"` // 商品的实际名称,String(256),选填 - Quantity string `json:"quantity"` // 用户购买的数量,String(12),必填 - Price string `json:"price"` // 单价,单位为:分。如果商户有优惠,需传输商户优惠后的单价,String(12),必填 + GoodsName string `json:"goods_name"` // 商品的实际名称,String(256),选填 + Quantity string `json:"quantity"` // 用户购买的数量,String(12),必填 + Price string `json:"price"` // 单价,单位为:分。如果商户有优惠,需传输商户优惠后的单价,String(12),必填 } // NewMergePreorder 创建主扫合单交易请求 @@ -76,46 +79,46 @@ func NewMergePreorder(param *MergePreorderReqData) *MergePreorder { // MergePreorderResponse 主扫合单交易响应结构体 type MergePreorderResponse struct { - Code string `json:"code"` // 响应码,BBS00000表示成功 - Msg string `json:"msg"` // 响应信息,对响应码的文字描述 + Code string `json:"code"` // 响应码,BBS00000表示成功 + Msg string `json:"msg"` // 响应信息,对响应码的文字描述 ReqData MergePreorderRespData `json:"resp_data"` // 响应业务数据 - RespTime string `json:"resp_time"` // 响应时间 + RespTime string `json:"resp_time"` // 响应时间 } // MergePreorderRespData 主扫合单交易响应业务数据 type MergePreorderRespData struct { - MerchantNo string `json:"merchant_no"` // 商户号(待上线),拉卡拉分配的商户号(请求接口中商户号) - OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号 - TradeNo string `json:"trade_no"` // 拉卡拉交易流水号 - LogNo string `json:"log_no"` // 拉卡拉对账单流水号 - SplitInfo []*SplitInfo `json:"split_info"` // 拆单信息 - AccRespFields interface{} `json:"acc_resp_fields"` // 账户端返回信息域 + MerchantNo string `json:"merchant_no"` // 商户号(待上线),拉卡拉分配的商户号(请求接口中商户号) + OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号 + TradeNo string `json:"trade_no"` // 拉卡拉交易流水号 + LogNo string `json:"log_no"` // 拉卡拉对账单流水号 + SplitInfo []*SplitInfo `json:"split_info"` // 拆单信息 + AccRespFields interface{} `json:"acc_resp_fields"` // 账户端返回信息域 } // SplitInfo 拆单信息 type SplitInfo struct { - SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号 - SubLogNo string `json:"sub_log_no"` // 子单对账单流水号 + SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号 + SubLogNo string `json:"sub_log_no"` // 子单对账单流水号 OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子交易流水号,商户子交易流水号,商户号下唯一 - MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号 - MerchantName string `json:"merchant_name"` // 商户名称 - TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号 - Amount string `json:"amount"` // 金额,单位为:分。整数型字符 + MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号 + MerchantName string `json:"merchant_name"` // 商户名称 + TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号 + Amount string `json:"amount"` // 金额,单位为:分。整数型字符 } // WxAccRespFields 微信(71-小程序/微信(51-JSAPI)场景下账户端返回信息域 type WxAccRespFields struct { - PrepayId string `json:"prepay_id"` // 预下单ID,预支付交易会话ID - PaySign string `json:"pay_sign"` // 支付签名信息 - AppId string `json:"app_id"` // 小程序ID,商户注册具有支付权限的小程序成功后即可获得小程序ID - TimeStamp string `json:"time_stamp"` // 时间戳,当前的时间 - NonceStr string `json:"nonce_str"` // 随机字符串 - Package string `json:"package"` // 订单详情扩展字符串 - SignType string `json:"sign_type"` // 签名方式,签名类型,支持RSA - SubMchId string `json:"sub_mch_id"` // 子商户号,账户端子商户号 + PrepayId string `json:"prepay_id"` // 预下单ID,预支付交易会话ID + PaySign string `json:"pay_sign"` // 支付签名信息 + AppId string `json:"app_id"` // 小程序ID,商户注册具有支付权限的小程序成功后即可获得小程序ID + TimeStamp string `json:"time_stamp"` // 时间戳,当前的时间 + NonceStr string `json:"nonce_str"` // 随机字符串 + Package string `json:"package"` // 订单详情扩展字符串 + SignType string `json:"sign_type"` // 签名方式,签名类型,支持RSA + SubMchId string `json:"sub_mch_id"` // 子商户号,账户端子商户号 } // SuccessOrFail 判断主扫合单交易是否成功 func (m *MergePreorderResponse) SuccessOrFail() bool { return m.Code == "BBS00000" -} \ No newline at end of file +} diff --git a/model/orderSplitLedger.go b/model/orderSplitLedger.go index 846bc58..174e136 100644 --- a/model/orderSplitLedger.go +++ b/model/orderSplitLedger.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // OrderSplitLedgerRequest 订单分账请求结构体 // 用于发起订单分账操作,支持向多个接收方进行分账 // 拉卡拉SDK接口文档:订单分账接口 @@ -20,7 +22,7 @@ type OrderSplitLedgerReqData struct { OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号,必传,长度32,每个商户号下唯一,否则会校验失败 TotalAmt string `json:"total_amt"` // 分账总金额,必传,长度15,单位为分 LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号,条件必传,长度16 - CalType string `json:"cal_type"` // 分账计算类型,条件必传,长度2,取值说明:0-按照指定金额,1-按照指定比例,默认0 + CalType consts.CalType `json:"cal_type"` // 分账计算类型,条件必传,长度2,取值说明:0-按照指定金额,1-按照指定比例,默认0 NotifyUrl string `json:"notify_url"` // 回调地址,条件必传,长度128,分账、分账撤销或分账回退时,通过该地址通知商户最终处理结果,不传时不回调 RecvDatas []*OrderSplitLedgerRecvDatas `json:"recv_datas,omitempty"` // 分账接收数据对象,条件必传,列表类型,分账接收方编号必须已创建 } diff --git a/model/preorder.go b/model/preorder.go index 8151601..18c29f2 100644 --- a/model/preorder.go +++ b/model/preorder.go @@ -1,6 +1,9 @@ package model -import "github.com/gogf/gf/v2/os/gtime" +import ( + "github.com/black1552/lkl_sdk/consts" + "github.com/gogf/gf/v2/os/gtime" +) // Preorder 预下单请求结构体 type Preorder struct { @@ -11,13 +14,14 @@ type Preorder struct { // PreorderReqData 预下单请求业务数据 type PreorderReqData struct { - MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32) - TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32) - OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,对应数据库表中外请求流水号,String(32) - AccountType string `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付:BESTPAY 苏宁易付宝:SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD,String(32) - TransType string `json:"trans_type"` // 接入方式,41:NATIVE(ALIPAY, 云闪付支持, 京东白条分期)51:JSAPI(微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期)71:微信小程序支付61:APP支付(微信APP支付),String(2) - TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12) - NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128) + MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32) + TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32) + OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,对应数据库表中外请求流水号,String(32) + AccountType consts.AccountType `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付:BESTPAY 苏宁易付宝:SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD,String(32) + TransType consts.TransType `json:"trans_type"` // 接入方式,41:NATIVE(ALIPAY, 云闪付支持, 京东白条分期)51:JSAPI(微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期)71:微信小程序支付61:APP支付(微信APP支付),String(2) + TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12) + NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128) + SettleType consts.SettleType `json:"settle_type"` // “0”或者空,常规结算方式,如需接拉卡拉分账通需传“1”,商户未开通分账之前切记不用上送此参数。 LocationInfo struct { RequestIp string `json:"request_ip"` // 请求方IP地址,存在必填,格式如36.45.36.95,String(64) Location string `json:"location"` // 纬度,经度,商户终端的地理位置,银联二维码交易必填,整体格式:纬度,经度,+表示北纬、东经,-表示南纬、西经。经度格式:1位正负号+3位整数+1位小数点+5位小数;纬度格式:1位正负号+2位整数+1位小数点+6位小数;举例:+31.221345,+121.12345,String(32) diff --git a/model/refund.go b/model/refund.go index b16fba7..6f022b0 100644 --- a/model/refund.go +++ b/model/refund.go @@ -1,29 +1,33 @@ package model -import "github.com/gogf/gf/v2/os/gtime" +import ( + "github.com/black1552/lkl_sdk/consts" + "github.com/gogf/gf/v2/os/gtime" +) // Refund 退款请求结构体 type Refund struct { - ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS - Version string `json:"version"` // 接口版本号,固定值"3.0" + ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS + Version string `json:"version"` // 接口版本号,固定值"3.0" ReqData *RefundReqData `json:"req_data"` // 请求业务数据 } // RefundReqData 退款请求业务数据 type RefundReqData struct { - MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 - TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填 - OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,商户系统唯一,String(32),必填 - RefundAmount string `json:"refund_amount"` // 退款金额,单位分,整数型字符,String(12),必填 - RefundAccMode string `json:"refund_acc_mode"` // 退款账户模式,String(2),必填,00-调用户余额 65-调商户余额 66-调终端余额 30-调账户 - LocationInfo struct { + MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 + TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填 + OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,商户系统唯一,String(32),必填 + RefundAmount string `json:"refund_amount"` // 退款金额,单位分,整数型字符,String(12),必填 + RefundAccMode consts.RefundAccMode `json:"refund_acc_mode"` // 退款账户模式,String(2),必填,00-调用户余额 65-调商户余额 66-调终端余额 30-调账户 + LocationInfo struct { RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填 } `json:"location_info"` // 地址位置信息,Object,必填 - NotifyUrl string `json:"notify_url"` // 后台通知地址,交易结果通知地址,String(128),选填 - OriginLogNo string `json:"origin_log_no"` // 拉卡拉对账单流水号,正常退款的拉卡拉对账单流水号,String(14),选填 - OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号,String(32),选填 - OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填 - RefundSplitMsg string `json:"refund_split_msg"` // 退款分账状态,String(2),选填,00-为默认,01-为分账;分账交易退款必须填写。需要退款上送该笔的分账状态,为分账时,是退分账前处理,还是退分账后处理 + NotifyUrl string `json:"notify_url"` // 后台通知地址,交易结果通知地址,String(128),选填 + RefundAmtSts consts.RefundAmtSts `json:"refund_amt_sts"` // 退货资金状态 String(2) 00-为默认,01-为分账;分账交易退款必须填写 + OriginLogNo string `json:"origin_log_no"` // 拉卡拉对账单流水号,正常退款的拉卡拉对账单流水号,String(14),选填 + OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号,String(32),选填 + OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填 + RefundSplitMsg string `json:"refund_split_msg"` // 退款分账状态,String(2),选填,00-为默认,01-为分账;分账交易退款必须填写。需要退款上送该笔的分账状态,为分账时,是退分账前处理,还是退分账后处理 } // NewRefund 创建退款请求 @@ -37,34 +41,34 @@ func NewRefund(param *RefundReqData) *Refund { // RefundResponse 退款响应结构体 type RefundResponse struct { - Code string `json:"code"` // 响应码,"000000"表示成功 - Msg string `json:"msg"` // 响应信息,对响应码的文字描述 + Code string `json:"code"` // 响应码,"000000"表示成功 + Msg string `json:"msg"` // 响应信息,对响应码的文字描述 RespData RefundRespData `json:"resp_data"` // 响应业务数据 - RespTime string `json:"resp_time"` // 响应时间 + RespTime string `json:"resp_time"` // 响应时间 } // RefundRespData 退款响应业务数据 type RefundRespData struct { - TradeState string `json:"trade_state"` // 交易状态,String(15),必填,INIT-初始化(需商户确认结果);SUCCESS-交易成功;FAIL-交易失败;REFUND-交易退款中(需商户确认结果);PROCESSING-交易处理中(需商户确认结果);TIMEOUT-请求超时(需商户确认结果);EXCEPTION-异常(失败) - RefundType string `json:"refund_type"` // 退款模式,String(20),必填 - MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 - OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号,String(32),必填 - TradeNo string `json:"trade_no"` // 拉卡拉交易流水号,String(32),必填 - LogNo string `json:"log_no"` // 拉卡拉对账单流水号,String(14),必填 - AccType string `json:"acc_type"` // 账户类型,String(32),必填 - TotalAmount string `json:"total_amount"` // 交易金额,单位分,整数型字符,String(12),必填 - RefundAmount string `json:"refund_amount"` // 申请退款金额,单位分,整数型字符,String(12),必填 - PayedAmount string `json:"payed_amount"` // 实际退款金额,单位分,整数型字符,String(12),必填 - TradeTime string `json:"trade_time"` // 退款时间,实际退款时间,格式:yyyyMMddHHmmss,String(14),选填 - OriginLogNo string `json:"origin_log_no"` // 原拉卡拉对账单流水号,原交易的拉卡拉对账单流水号,String(14),选填 + TradeState string `json:"trade_state"` // 交易状态,String(15),必填,INIT-初始化(需商户确认结果);SUCCESS-交易成功;FAIL-交易失败;REFUND-交易退款中(需商户确认结果);PROCESSING-交易处理中(需商户确认结果);TIMEOUT-请求超时(需商户确认结果);EXCEPTION-异常(失败) + RefundType string `json:"refund_type"` // 退款模式,String(20),必填 + MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填 + OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号,String(32),必填 + TradeNo string `json:"trade_no"` // 拉卡拉交易流水号,String(32),必填 + LogNo string `json:"log_no"` // 拉卡拉对账单流水号,String(14),必填 + AccType string `json:"acc_type"` // 账户类型,String(32),必填 + TotalAmount string `json:"total_amount"` // 交易金额,单位分,整数型字符,String(12),必填 + RefundAmount string `json:"refund_amount"` // 申请退款金额,单位分,整数型字符,String(12),必填 + PayedAmount string `json:"payed_amount"` // 实际退款金额,单位分,整数型字符,String(12),必填 + TradeTime string `json:"trade_time"` // 退款时间,实际退款时间,格式:yyyyMMddHHmmss,String(14),选填 + OriginLogNo string `json:"origin_log_no"` // 原拉卡拉对账单流水号,原交易的拉卡拉对账单流水号,String(14),选填 OriginOutTradeNo string `json:"origin_out_trade_no"` // 原商户请求流水号,原交易中的商户请求流水号,String(32),选填 - OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填 - UpCouponInfo string `json:"up_coupon_info"` // 银联优惠券信息,目标字段,单位是银联侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(500),选填 - TanteInfo string `json:"tante_info"` // 淘方信息,目标字段,数据是淘方侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(32),选填 - ChannelRetDesc string `json:"channel_ret_desc"` // 渠道返回描述,String,必填,codeMsg: "R000000-成功", "R011122-渠道处理超时" + OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填 + UpCouponInfo string `json:"up_coupon_info"` // 银联优惠券信息,目标字段,单位是银联侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(500),选填 + TanteInfo string `json:"tante_info"` // 淘方信息,目标字段,数据是淘方侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(32),选填 + ChannelRetDesc string `json:"channel_ret_desc"` // 渠道返回描述,String,必填,codeMsg: "R000000-成功", "R011122-渠道处理超时" } // SuccessOrFail 判断退款交易是否成功 func (r *RefundResponse) SuccessOrFail() bool { return r.Code == "000000" -} \ No newline at end of file +} diff --git a/model/separate.go b/model/separate.go index 32700de..d1324ae 100644 --- a/model/separate.go +++ b/model/separate.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + type SeparateRequest struct { ReqData *SeparateReqData `json:"req_data"` // 请求数据 Version string `json:"version"` // 版本号 @@ -13,7 +15,7 @@ type SeparateReqData struct { OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号 TotalAmt string `json:"total_amt"` // 分账总金额 [单位:分] LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号 非必填 - CalType string `json:"cal_type"` // 分账计算类型 0- 按照指定金额,1- 按照指定比例。默认 0 非必填 + CalType consts.CalType `json:"cal_type"` // 分账计算类型 0- 按照指定金额,1- 按照指定比例。默认 0 非必填 SeparateType string `json:"separate_type"` NotifyUrl string `json:"notify_url"` // 回调地址 分账,分账撤销或分账回退时,是异步接口。通过该地址通知商户最终处理结果。不传时,不回调 RecvDatas []*SeparateRecvDatas `json:"recv_datas"` // 分账接收数据对象 分账接收方编号必须已创建 diff --git a/model/uploadFile.go b/model/uploadFile.go index be9c726..92b1010 100644 --- a/model/uploadFile.go +++ b/model/uploadFile.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + type UploadFileRequest struct { ReqData *UploadFileReqData `json:"reqData"` Ver string `json:"ver"` @@ -8,12 +10,12 @@ type UploadFileRequest struct { } type UploadFileReqData struct { - Version string `json:"version"` - OrderNo string `json:"orderNo"` - AttType string `json:"attType"` - AttExtName string `json:"attExtName"` - AttContext string `json:"attContext"` - OrgCode string `json:"orgCode"` + Version string `json:"version"` + OrderNo string `json:"orderNo"` + AttType consts.AttType `json:"attType"` + AttExtName string `json:"attExtName"` + AttContext string `json:"attContext"` + OrgCode string `json:"orgCode"` } type UploadFileResponse struct { diff --git a/model/withdraw.go b/model/withdraw.go index def784d..d6cf30e 100644 --- a/model/withdraw.go +++ b/model/withdraw.go @@ -1,5 +1,7 @@ package model +import "github.com/black1552/lkl_sdk/consts" + // WithdrawRequest 提现请求结构体 // 用于向拉卡拉接口发送提现请求 // 包含请求头信息和业务数据 @@ -29,7 +31,7 @@ type WithdrawReqData struct { // 账号(若该参数上送,则payType将无效),非必传,最大长度32 PayNo string `json:"pay_no"` // 账号类型(01:收款账户,04:分账接收方账户)未上送则默认01,必传,最大长度32,分账接收方提现时需填04 - PayType string `json:"pay_type"` + PayType consts.PayType `json:"pay_type"` // 备注信息,非必传,最大长度64 Remark string `json:"remark"` // 摘要,非必传,最大长度64 @@ -64,4 +66,4 @@ type WithdrawRespData struct { // 返回值:true表示成功,false表示失败 func (resp *WithdrawResponse) SuccessOrFail() bool { return resp.Code == "000000" -} \ No newline at end of file +}