package lakala

const (
	TimeFormat               = "20060102150405"
	Success                  = "000000"
	SeparateSuccess          = "SACS0000"
	BaseSuccess              = "200"
	PaySuccess               = "BBS00000"
	Version                  = "1.0.0"
	Version2                 = "v1.0.0"
	Version3                 = "3.0"
	SplitLaunchModeAuto      = "AUTO"      // 自动规则分账
	SplitLaunchModePointRule = "POINTRULE" // 指定规则分账
	AuthenticationType       = "ZFBZF"     // 支付宝支付

)

// 分账前置
const (
	SeparateAccountTestUrl = "https://test.wsmsd.cn/sit/api/v2/mms/openApi/" // 测试
	SeparateAccountProdUrl = "https://s2.lakala.com/api/v2/mms/openApi"      // 生产
	PayAccountProdUrl      = "https://s2.lakala.com/api/v2/mms"              // 生产

	SeparateAccountApplyAction   = "ledger/applyLedgerMer"          // 商户申请开通分账
	SeparateAccountModifyAction  = "ledger/modifyLedgerMer"         // 商户变更申请开通分账
	SeparateAccountQueryAction   = "ledger/queryLedgerMer"          // 商户分账信息查询
	SeparateReceiverApplyAction  = "ledger/applyLedgerReceiver"     // 分账接受方创建
	SeparateReceiverModifyAction = "ledger/modifyLedgerReceiver"    // 分账接受方变更
	SeparateReceiverQueryAction  = "ledger/queryReceiverDetail"     // 分账接受方查询
	SeparateBindAction           = "ledger/applyBind"               // 分账关系绑定
	SeparateUnBindAction         = "ledger/applyUnBind"             // 分账关系解除绑定
	SeparateCardBinAction        = "cardBin"                        // 卡BIN查询
	AttachmentUpload             = "uploadFile"                     // 附件上传
	WeChatAuthentication         = "realName/saveContactInfo"       // 微信实名认证
	AlibabaAuthentication        = "realName/saveAlipayContactInfo" // 阿里实名认证
	WeChatUpdateAuthentication   = "wechatRealName/modifyCommit"    // 微信修改实名认证
	AlibabaUpdateAuthentication  = "alipayRealName/modifyCommit"    // 阿里修改实名认证
	WeChatQueryAuthentication    = "wechatRealNameQuery"            // 微信实名认证结果查询
	AlibabaQueryAuthentication   = "alipayRealNameQuery"            // 阿里实名认证结果查询
	WeChatAccountStatusQuery     = "sme/mrchAuthStateQuery"         // 微信/阿里开户状态差取暖
	SubMerchantQuery             = "querySubMerInfo"                // 报备查询
)

// 分账
const (
	SeparateTest = "https://test.wsmsd.cn/sit/api/v3/sacs" // 测试环境分账
	SeparateProd = "https://s2.lakala.com/api/v3/sacs"     // 正式环境分账

	SeparateOrder    = "separate" // 订单分账
	SeparateCancel   = "cancel"   // 分账撤销 分账撤销支持30日内全额撤销，撤销金额回到商户分账账户，撤销后可再次发起分账。多用于分账错误需撤销后重新分账场景
	SeparateFallBack = "fallback" // 分账退回 180天内退货退款
	SeparateQuery    = "query"    // 分账结果查询
	SeparateQueryAmt = "queryAmt" // 可分账金额查询
)

const (
	FrIdFront            = "FR_ID_CARD_FRONT"       // 法人身份证正面
	FrIdBehind           = "FR_ID_CARD_BEHIND"      // 法人身份证反面
	IdFront              = "ID_CARD_FRONT"          // 身份证正面
	IdBehind             = "ID_CARD_BEHIND"         // 身份证反面
	BankCard2            = "BANK_CARD"              // 银行卡
	BusinessLicence2     = "BUSINESS_LICENCE"       // 营业执照
	MerchantPhoto        = "MERCHANT_PHOTO"         // 商户门头照
	ShopInner            = "SHOPINNER"              // 商铺内部照片
	NetWorkXy            = "NETWORK_XY"             // 电子协议
	SplitEntrustFile     = "SPLIT_ENTRUST_FILE"     // 分账结算授权委托书
	SplitCooperationFile = "SPLIT_COOPERATION_FILE" // 分账合作协议
	OTHERS                                          // 其他
)

const (
	SeparateType_SEPATRATE = "SEPARATE" // 分账
	SeparateType_CANCEL    = "CANCEL"   // 分账撤销
	Separate_FALLBACK      = "FALLBACK" // 分账回退
)

// CreateSeparateReq 商户创建分账
type CreateSeparateReq struct {
	Version              string  `json:"version"`              //必传	String	8	接口版本号	1.0
	OrderNo              string  `json:"orderNo"`              //必传	String	32	订单编号（便于后续跟踪排查问题及回调消息匹配）	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode              string  `json:"orgCode"`              //必传	String	32	机构代码
	MerInnerNo           string  `json:"merInnerNo"`           //可选	String	32	拉卡拉内部商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
	MerCupNo             string  `json:"merCupNo"`             //可选	String	32	银联商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
	ContactMobile        string  `json:"contactMobile"`        //必传	String	32	联系手机号
	SplitLowestRatio     float64 `json:"splitLowestRatio"`     //必传	数字	32	最低分账比例（百分比，支持2位精度）	70 或 70.50
	SplitEntrustFileName string  `json:"splitEntrustFileName"` //必传	String	64	分账结算委托书文件名称	分账结算委托书文件名称.pdf
	SplitEntrustFilePath string  `json:"splitEntrustFilePath"` //必传	String	64	分账结算委托书文件路径	调用商户入网接口上传附件后反馈的文件路径： 文件上传
	RetUrl               string  `json:"retUrl"`               //必传	String	128	回调通知地址	请确保可以直接访问，避免接收不到我方通知结果，如果无法接收处理，也可以自行通过 3.商户分账信息查询接口 确定开通结果（注意分账业务申请需人工审核，存在一定延时）
	SplitRuleSource      string  `json:"splitRuleSource"`      //条件必传	String	32	分账规则来源	MER：商户分账规则PLATFORM：平台分账规则分账发起方式为自动规则或指定规则时必传

	SplitRange      string            `json:"splitRange"`      //非必传	String	32	分账范围	ALL：全部交易分账 (商户所有交易默认待分账) MARK：标记交易分账(只有带分账标识交易待分账，其余交易正常结算) 默认：MARK
	SepFundSource   string            `json:"sepFundSource"`   //非必传	String	32	分账依据	TR：交易分账BA：余额分账默认：TR 交易分账
	EleContractNo   string            `json:"eleContractNo"`   //非必传	String	32	电子合同编号	如果已经签署过电子合同此处上送电子合同编号即可，供审核人员复核使用。
	SplitLaunchMode string            `json:"splitLaunchMode"` //非必传	String	32	分账发起方式	AUTO：自动规则分账POINTRULE：指定规则分账MANUAL： 手动分账不填默认MANUAL
	SettleType      string            `json:"settleType"`      //非必传	String	32	提款类型	01：主动提款03：交易自动结算不填默认01
	Attachments     []AttachmentsList `json:"attachments"`     //可选	集合附加资料	其它附加资料文件信息}
}

type AttachmentsList struct {
	AttachType      string `json:"attachType"`      //必传	String	32	附件类型编码
	AttachName      string `json:"attachName"`      //必传	String	32	附件名称
	AttachStorePath string `json:"attachStorePath"` //必传	String	128	附件路径
}

// CreateSeparateResp 创建分账返回信息
type CreateSeparateResp struct {
	RetCode  string `json:"retCode"`
	RetMsg   string `json:"retMsg"`
	RespData struct {
		Version string `json:"version"`
		OrderNo string `json:"orderNo"`
		OrgCode string `json:"orgCode"`
		ApplyId int64  `json:"applyId"`
	} `json:"respData"`
}

// SeparateModifyReq 商户申请变更分账商户
type SeparateModifyReq struct {
	Version              string            `json:"version"`              // 必传	String	8	接口版本号	1.0
	OrderNo              string            `json:"orderNo"`              // 必传	String	32	订单编号（便于后续跟踪排查问题及回调消息匹配））	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode              string            `json:"orgCode"`              // 必传	String	32	机构代码
	MerInnerNo           string            `json:"merInnerNo"`           // 可选	String	32	拉卡拉内部商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
	MerCupNo             string            `json:"merCupNo"`             // 可选	String	32	银联商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
	ContactMobile        string            `json:"contactMobile"`        // 可选	String	32	联系手机号
	SplitLowestRatio     string            `json:"splitLowestRatio"`     // 可选	String	32	最低分账比例（百分比，支持2位精度）	70 或 70.50
	SplitEntrustFileName string            `json:"splitEntrustFileName"` // 可选	String	64	分账结算委托书文件名称	变更比例必传，分账结算委托书文件名称.pdf
	SplitEntrustFilePath string            `json:"splitEntrustFilePath"` // 可选	String	64	分账结算委托书文件路径	变更比例必传，调用商户入网接口上传附件后反馈的文件路径： 文件上传
	SplitRange           string            `json:"splitRange"`           // 非必传	String	32	分账范围	ALL（商户全量交易自动分账处理） MARK（按交易请求分账标识进行分账处理）
	SplitRuleSource      string            `json:"splitRuleSource"`      // 非必传	String	32	分账规则来源	MER：商户分账规则 PLATFORM：平台分账规则
	RetUrl               string            `json:"retUrl"`               // 必传	String	128	回调通知地址	审核通过后通知的地址
	EleContractNo        string            `json:"eleContractNo"`        // 非必传	String	32	电子合同编号	如果已经签署过电子合同此处上送电子合同编号即可，供审核人员复核使用。
	Attachments          []AttachmentsList `json:"attachments"`          //可选	集合附加资料	其它附加资料文件信息}
}

// SeparateQueryReq 商户分账信息查询
type SeparateQueryReq struct {
	Version    string `json:"version"`    // 必传	String	8	接口版本号	1.0
	OrderNo    string `json:"orderNo"`    // 必传	String	32	订单编号（便于后续跟踪排查问题及回调消息匹配））	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode    string `json:"orgCode"`    // 必传	String	32	机构代码
	MerInnerNo string `json:"merInnerNo"` // 可选	String	32	拉卡拉内部商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
	MerCupNo   string `json:"merCupNo"`   // 可选	String	32	银联商户号	拉卡拉内部商户号和银联商户号必须传一个，都送以内部商户号为准
}

// SeparateQueryResp 商户分账信息查询返回值
type SeparateQueryResp struct {
	OrgId            string              `json:"orgId"`            //   分账商户机构号
	OrgName          string              `json:"orgName"`          // 	分账商户机构名称
	MerInnerNo       string              `json:"merInnerNo"`       // 	拉卡拉内部商户号
	MerCupNo         string              `json:"merCupNo"`         // 	银联商户号
	SplitLowestRatio float64             `json:"splitLowestRatio"` // 	最低分账比例（百分比，支持2位精度）	70 或 70.50
	SplitStatus      string              `json:"splitStatus"`      // 	商户分账状态	VALID 启用INVALID 禁用
	SplitRange       string              `json:"splitRange"`       // 	分账范围	ALL：全部交易分账 (商户所有交易默认待分账)MARK：标记交易分账(只有带分账标识交易待分账，其余交易正常结算)默认：MARK
	SepFundSource    string              `json:"sepFundSource"`    // 	分账依据	TR或空：交易分账BA：余额分账默认：TR 交易分账
	PlatformId       string              `json:"platformId"`       // 	平台ID	如果商户和绑定平台分账，则返回平台ID
	SplitLaunchMode  string              `json:"splitLaunchMode"`  // 	分账发起方式	AUTO：自动规则分账POINTRULE：指定规则分账MANUAL： 手动规则分账
	SplitRuleSource  string              `json:"splitRuleSource"`  // 	分账规则来源	MER：商户分账规则PLATFORM：平台分账规则
	BindRelations    []bindRelationsList `json:"bindRelations"`    //   集合	已绑定接收方列表
}

type bindRelationsList struct {
	MerInnerNo   string `json:"merInnerNo"`   // 拉卡拉内部商户号
	MerCupNo     string `json:"merCupNo"`     // 银联商户号
	ReceiverNo   string `json:"receiverNo"`   // 接收方编号
	ReceiverName string `json:"receiverName"` // 接收方编号名称
}

// CreateSeparateRecipientReq 创建分账接收方参数
type CreateSeparateRecipientReq struct {
	Version             string `json:"version"`             // 必传	String	8	接口版本号	1.0
	OrderNo             string `json:"orderNo"`             // 必传	String	32	订单编号（便于后续跟踪排查问题及核对报文）	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode             string `json:"orgCode"`             // 必传	String	32	机构代码
	ReceiverName        string `json:"receiverName"`        // 必传	String	64	分账接收方名称
	ContactMobile       string `json:"contactMobile"`       // 必传	String	16	联系手机号
	AcctNo              string `json:"acctNo"`              // 必传	String	32	收款账户卡号
	AcctName            string `json:"acctName"`            // 必传	String	32	收款账户名称
	AcctTypeCode        string `json:"acctTypeCode"`        // 必传	String	32	收款账户账户类型	57：对公 58：对私
	AcctCertificateType string `json:"acctCertificateType"` // 必传	String	32	收款账户证件类型 17 身份证，18 护照，19 港澳居民来往内地通行证 20 台湾居民来往内地通行证	身份证外类型先咨询后再使用
	AcctCertificateNo   string `json:"acctCertificateNo"`   // 必传	String	32	收款账户证件号
	AcctOpenBankCode    string `json:"acctOpenBankCode"`    // 必传	String	32	收款账户开户行号	参照卡BIN信息查询，仅支持对私结算账户
	AcctOpenBankName    string `json:"acctOpenBankName"`    // 必传	String	64	收款账户开户名称
	AcctClearBankCode   string `json:"acctClearBankCode"`   // 必传	String	32	收款账户清算行行号	参照卡BIN信息查询，仅支持对私结算账户

	AttachList                 []AttachList `json:"attachList"`                 // 可选	集合 接收方附件资料
	AttachType                 string       `json:"attachType"`                 // 可选	String	32	附件类型编码
	AttachName                 string       `json:"attachName"`                 // 可选	String	32	附件名称
	AttachStorePath            string       `json:"attachStorePath"`            // 可选	String	32	附件路径	（调用进件附件上传接口获取到附件路径） 文件上传
	SettleType                 string       `json:"settleType"`                 // 可选	String	32	提款类型	01：主动提款03：交易自动结算 不填默认01
	LicenseNo                  string       `json:"licenseNo"`                  // 可选	String	32	营业执照号码	收款账户账户类型为对公，必须上送
	LicenseName                string       `json:"licenseName"`                // 可选	String	128	营业执照名称	收款账户账户类型为对公，必须上送
	LegalPersonName            string       `json:"legalPersonName"`            // 可选	String	32	法人姓名	收款账户账户类型为对公，必须上送
	LegalPersonCertificateType string       `json:"legalPersonCertificateType"` // 可选	String	32	法人证件类型 17 身份证，18 护照，19 港澳居民来往内地通行证 20 台湾居民来往内地通行证	收款账户账户类型为对公，必须上送，身份证外类型先咨询后再使用
	LegalPersonCertificateNo   string       `json:"legalPersonCertificateNo"`   // 可选	String	32	法人证件号	收款账户账户类型为对公，必须上送
}

type AttachList struct {
	AttachName      string `json:"attachName"`      // 附件文件名称
	AttachStorePath string `json:"attachStorePath"` // 文件路径
	AttachType      string `json:"attachType"`      // 附件ID
}

// CreateSeparateRecipientResp 创建分账账户
type CreateSeparateRecipientResp struct {
	RetCode  string `json:"retCode"`
	RetMsg   string `json:"retMsg"`
	RespData struct {
		Version    string `json:"version"`
		OrderNo    string `json:"orderNo"`
		OrgCode    string `json:"orgCode"`
		OrgId      string `json:"orgId"`
		OrgName    string `json:"orgName"`
		ReceiverNo string `json:"receiverNo"`
	} `json:"respData"`
}

// QuerySeparateRecipientResp 分账接收方信息查询
type QuerySeparateRecipientResp struct {
	ReceiverNo                 string `json:"receiverNo"`                 // 接收方编号
	ReceiverName               string `json:"receiverName"`               // 分账接收方名称
	ContactMobile              string `json:"contactMobile"`              // 联系手机号
	LicenseNo                  string `json:"licenseNo"`                  // 营业执照号码
	LicenseName                string `json:"licenseName"`                // 营业执照名称
	LegalPersonName            string `json:"legalPersonName"`            // 法人姓名
	LegalPersonCertificateType string `json:"legalPersonCertificateType"` // 法人证件类型 17 身份证，18 护照，19 港澳居民来往内地通行证 20 台湾居民来往内地通行证
	LegalPersonCertificateNo   string `json:"legalPersonCertificateNo"`   // 法人ID号
	AcctNo                     string `json:"acctNo"`                     // 收款账户卡号
	AcctName                   string `json:"acctName"`                   // 收款账户名称
	AcctTypeCode               string `json:"acctTypeCode"`               // 收款账户账户类型
	AcctCertificateType        string `json:"acctCertificateType"`        // 收款证件类型 17 身份证，18 护照，19 港澳居民来往内地通行证 20 台湾居民来往内地通行证
	AcctCertificateNo          string `json:"acctCertificateNo"`          // 收款账户证件号
	AcctOpenBankCode           string `json:"acctOpenBankCode"`           // 收款账户开户行号
	AcctOpenBankName           string `json:"acctOpenBankName"`           // 收款账户开户名称
	AcctClearBankCode          string `json:"acctClearBankCode"`          // 收款账户清算行行号

	RowStatus         interface{} `json:"rowStatus"`
	RowSno            string      `json:"rowSno"`
	RowCreateUser     interface{} `json:"rowCreateUser"`
	RowCreateUserName string      `json:"rowCreateUserName"`
	RowCreateTm       string      `json:"rowCreateTm"`
	RowModifyUser     interface{} `json:"rowModifyUser"`
	RowModifyUserName interface{} `json:"rowModifyUserName"`
	RowModifyTm       string      `json:"rowModifyTm"`
	RowVerNo          interface{} `json:"rowVerNo"`
	Id                int         `json:"id"`
	SettlePeriod      interface{} `json:"settlePeriod"`
	SettleModel       interface{} `json:"settleModel"`
	ClearDt           interface{} `json:"clearDt"`
	OrgId             string      `json:"orgId"`
	OrgName           string      `json:"orgName"`
	OrgPath           string      `json:"orgPath"`
	ReceiverStatus    interface{} `json:"receiverStatus"`
	WalletId          string      `json:"walletId"`
	Remark            interface{} `json:"remark"`
}

// SeparateApplyBindReq 分账关系申请绑定
type SeparateApplyBindReq struct {
	Version         string       `json:"version"`
	OrderNo         string       `json:"orderNo"`         // 订单编号（便于后续跟踪排查问题及核对报文）
	OrgCode         string       `json:"orgCode"`         // 分账接收方所属机构代码
	MerInnerNo      string       `json:"merInnerNo"`      // 分账商户内部商户号
	MerCupNo        string       `json:"merCupNo"`        // 分账商户银联商户号
	ReceiverNo      string       `json:"receiverNo"`      // 分账接收方编号
	EntrustFileName string       `json:"entrustFileName"` // 合作协议附件名称
	EntrustFilePath string       `json:"entrustFilePath"` // 合作协议附件路径
	RetUrl          string       `json:"retUrl"`          // 回调通知地址
	Attachments     []AttachList `json:"attachments"`     // 其它附加资料文件信息
}

// SeparateApplyBindResp 申请绑定返回值
type SeparateApplyBindResp struct {
	RetCode  string `json:"retCode"`
	RetMsg   string `json:"retMsg"`
	RespData struct {
		Version string `json:"version"`
		OrderNo string `json:"orderNo"`
		OrgCode string `json:"orgCode"`
		ApplyId int64  `json:"applyId"`
	} `json:"respData"`
}

// SeparateUnBindReq 申请解除分账绑定
type SeparateUnBindReq struct {
	Version         string `json:"version"`         // 必传	String	8	接口版本号	1.0
	OrderNo         string `json:"orderNo"`         // 必传	String	32	订单编号（便于后续跟踪排查问题及核对报文）	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode         string `json:"orgCode"`         // 必传	String	32	分账接收方所属机构代码
	MerInnerNo      string `json:"merInnerNo"`      // 必传	String	32	分账商户内部商户号	merInnerNo、merCupNo选传其一，不能都为空
	MerCupNo        string `json:"merCupNo"`        // 必传	String	32	分账商户银联商户号	merInnerNo、merCupNo选传其一，不能都为空
	ReceiverNo      string `json:"receiverNo"`      // 必传	String	32	分账接收方编号
	EntrustFileName string `json:"entrustFileName"` // 必传	String	32	解除分账说明附件名称
	EntrustFilePath string `json:"entrustFilePath"` // 必传	String	32	解除分账说明附件路径	（调用进件附件上传接口获取到附件路径） 文件上传
	Remark          string `json:"remark"`          // 必传	String	128	备注说明
	RetUrl          string `json:"retUrl"`          // 必传	String	128	回调通知地址	审核通过后通知的地址
}

// UpdateSeparateRecipientReq 修改分账接收方参数
type UpdateSeparateRecipientReq struct {
	Version           string       `json:"version"`           // 必传	String	8	接口版本号	1.0
	OrderNo           string       `json:"orderNo"`           // 必传	String	32	订单编号（便于后续跟踪排查问题及核对报文）	14位年月日时（24小时制）分秒+8位的随机数（不重复）如：2021020112000012345678
	OrgCode           string       `json:"orgCode"`           // 必传	String	32	机构代码
	ReceiverNo        string       `json:"receiverNo"`        // 必传 	分账接收方编号
	ReceiverName      string       `json:"receiverName"`      // 必传	String	64	分账接收方名称
	ContactMobile     string       `json:"contactMobile"`     // 必传	String	16	联系手机号
	AcctNo            string       `json:"acctNo"`            // 必传	String	32	收款账户卡号
	AcctTypeCode      string       `json:"acctTypeCode"`      // 必传	String	32	收款账户账户类型	57：对公 58：对私
	AcctOpenBankCode  string       `json:"acctOpenBankCode"`  // 必传	String	32	收款账户开户行号	参照卡BIN信息查询，仅支持对私结算账户
	AcctOpenBankName  string       `json:"acctOpenBankName"`  // 必传	String	64	收款账户开户名称
	AcctClearBankCode string       `json:"acctClearBankCode"` // 必传	String	32	收款账户清算行行号	参照卡BIN信息查询，仅支持对私结算账户
	AttachList        []AttachList `json:"attachList"`        // 可选	集合 接收方附件资料
	AttachType        string       `json:"attachType"`        // 可选	String	32	附件类型编码
	AttachName        string       `json:"attachName"`        // 可选	String	32	附件名称
	AttachStorePath   string       `json:"attachStorePath"`   // 文件路径
	Status            string       `json:"status"`            // 接收方状态 有效：VALID 无效：INVALID
}

// OrderSeparateReq 订单分账
type OrderSeparateReq struct {
	MerchantNo    string           `json:"merchant_no"`     // M	String	32	商户号
	LogNo         string           `json:"log_no"`          // M	String	14	拉卡拉对账单流水号	posp流水号，查清结算用
	LogDate       string           `json:"log_date"`        // M	String	8	交易日期	posp日期，yyyyMMdd，查清结算用
	OutSeparateNo string           `json:"out_separate_no"` // M	String	32	商户分账指令流水号	商户分账指令流水号，每个商户号下唯一，否则会校验失败
	TotalAmt      string           `json:"total_amt"`       // M	String	15	分账总金额	[单位：分]
	LklOrgNo      string           `json:"lkl_org_no"`      // C	String	16	拉卡拉机构编号
	CalType       string           `json:"cal_type"`        // C	String	2	分账计算类型	0- 按照指定金额，1- 按照指定比例。默认 0
	NotifyUrl     string           `json:"notify_url"`      // C	String	128	回调地址	分账，分账撤销或分账回退时，是异步接口。通过该地址通知商户最终处理结果。不传时，不回调
	RecvDatas     []RecvDatasParam `json:"recv_datas"`      // C	List 分账接收数据对象	分账接收方编号必须已创建
}

// RecvDatasParam 分账接收数据对象
type RecvDatasParam struct {
	//RecvMerchantNo string `json:"recv_merchant_no"` // C	String	32	接收方商户号	分账接收方商户号，分给自己时使用，需和merchantNo一样，否则检查报错；分账接收方商户号 和 分账接收方 只能填写一个。
	RecvNo        string `json:"recv_no"`        // C	String	32	分账接收方编号	分账接收方编号, 分给他人时使用；分账接收方商户号 和 分账接收方 只能填写一个。
	SeparateValue string `json:"separate_value"` // M	String	32	分账数值	calType为0时，按照固定金额分账，单位：分 calType为1时，按照比例分账，单位：百分比的小数值，比如0.55 （55%）
}

// OrderSeparateResp 分账结束返回
type OrderSeparateResp struct {
	Msg      string `json:"msg"`
	RespTime string `json:"resp_time"`
	Code     string `json:"code"`
	RespData struct {
		TotalAmt      string `json:"total_amt"`       // 分账总金额
		LogDate       string `json:"log_date"`        // 拉卡拉订单日期
		SeparateNo    string `json:"separate_no"`     // 分账指令流水号
		LogNo         string `json:"log_no"`          // 拉卡拉对账单流水号
		OutSeparateNo string `json:"out_separate_no"` // 商户订单号
		Status        string `json:"status"`          // 分账状态 处理中：PROCESSING, 已受理：ACCEPTED, 成功：SUCCESS, 失败：FAIL
	} `json:"resp_data"`
}

// SeparateCancelReq 订单分账撤销请求参数
type SeparateCancelReq struct {
	MerchantNo          string `json:"merchant_no"`            // 分账方商户号
	OriginSeparateNo    string `json:"origin_separate_no"`     // 分账指令接口返回的分账流水，origin_out_separate_no和该字段至少二选一，优先级: origin_separate_no> origin_out_separate_no
	OriginOutSeparateNo string `json:"origin_out_separate_no"` // 分账指令请求时，入参中的origin_separate_no该字段至少二选一，优先级: origin_separate_no> origin_out_separate_no
	OutSeparateNo       string `json:"out_separate_no"`        // 商户分账指令流水号
	TotalAmt            string `json:"total_amt"`              // 撤销金额
}

// SeparateCancelResp 订单分账撤销返回参数
type SeparateCancelResp struct {
	Msg      string `json:"msg"`
	RespTime string `json:"resp_time"`
	Code     string `json:"code"`
	RespData struct {
		TotalAmt            string `json:"total_amt"`              // 撤销金额	单位：分 和分账总金额一致，否则校验报错
		SeparateNo          string `json:"separate_no"`            // 分账撤销流水号	分账系统生成，系统唯一
		OriginSeparateNo    string `json:"origin_separate_no"`     // 原分账指令流水	请求透返
		OutSeparateNo       string `json:"out_separate_no"`        // 商户分账指令流水号	请求透返
		OriginOutSeparateNo string `json:"origin_out_separate_no"` // 原商户分账指令流水号	请求透返
		Status              string `json:"status"`                 // 分账状态	处理中：PROCESSING, 已受理：ACCEPTED, 成功：SUCCESS, 失败：FAIL
	} `json:"resp_data"`
}

// SeparateFallReq 分账退回请求参数
type SeparateFallReq struct {
	MerchantNo          string             `json:"merchant_no"`            // 分账方商户号
	OriginSeparateNo    string             `json:"origin_separate_no"`     // 分账指令接口返回的分账流水，origin_out_separate_no和该字段至少二选一，优先级: origin_separate_no> origin_out_separate_no
	OutSeparateNo       string             `json:"out_separate_no"`        // 商户分账指令流水号
	OriginOutSeparateNo string             `json:"origin_out_separate_no"` // 分账指令请求时，入参中的origin_separate_no该字段至少二选一，优先级: origin_separate_no> origin_out_separate_no
	FallbackReason      string             `json:"fallback_reason"`        // 回退原因
	TotalAmt            string             `json:"total_amt"`              // 撤销金额
	OriginRecvDatas     []*OriginRecvDatas `json:"origin_recv_datas"`      // 原分账接收数据对象
}

type OriginRecvDatas struct {
	RecvNo string `json:"recv_no"` // 分账接收方编号
	Amt    string `json:"amt"`     // 回退金额
}

// SeparateFallResp 分账退回响应参数
type SeparateFallResp struct {
	Msg      string `json:"msg"`
	RespTime string `json:"resp_time"`
	Code     string `json:"code"`
	RespData struct {
		TotalAmt            string `json:"total_amt"`              // 回退金额
		SeparateNo          string `json:"separate_no"`            // 分账回退流水号
		OriginSeparateNo    string `json:"origin_separate_no"`     // 原分账指令流水号
		OriginOutSeparateNo string `json:"origin_out_separate_no"` // 原商户分账指令请求流水号
		OutSeparateNo       string `json:"out_separate_no"`        // 商户分账指令请求流水号
		Status              string `json:"status"`                 // 原分账指令流水号
	} `json:"resp_data"`
}

// SeparateResultQueryResp 分账结构查询
type SeparateResultQueryResp struct {
	SeparateNo        string `json:"separate_no"`         //
	OutSeparateNo     string `json:"out_separate_no"`     //
	CmdType           string `json:"cmd_type"`            // 指令类型 SEPARATE：分账 CANCEL：分账撤销 FALLBACK：分账回退
	LogNo             string `json:"log_no"`              //
	LogDate           string `json:"log_date"`            //
	CalType           string `json:"cal_type"`            // 分账计算类型	0 按照指定金额。1 按照指定比例，默认 0 （cmd_type为SEPARATE分账指令类型才有值）
	SeparateDate      string `json:"separate_date"`       //
	FinishDate        string `json:"finish_date"`         //
	TotalAmt          string `json:"total_amt"`           //
	Status            string `json:"status"`              // 分账状态 ACCEPTED:已受理, PROCESSING:处理中, FAIL:失败, SUCCESS:成功, （如果分账指令后有反向操作指令，则原分账指令会变更成以下的状态之一：）CANCELING:撤销中, CANCELED:撤销成功, CANCEL_FAIL:撤销失败, FALLBACKING:回退中, FALLBACK_END:回退结束
	FinalStatus       string `json:"final_status"`        // 处理状态	ACCEPTED:已受理, PROCESSING:处理中, FAIL:失败, SUCCESS:成功
	FrontRuleId       string `json:"front_rule_id"`       // 分账前置规则ID
	ActualSeparateAmt string `json:"actual_separate_amt"` // 实分金额	若该笔分账收取手续费，则该字段有值
	TotalFeeAmt       string `json:"total_fee_amt"`       // 手续费金额
	DetailDatas       []struct {
		RecvMerchantNo string `json:"recv_merchant_no"` // 接收方商户号
		RecvNo         string `json:"recv_no"`          // 接收方编号
		Amt            int64  `json:"amt"`              // 分账金额
	} `json:"detail_datas"` // 明细数据
	SeparateType string `json:"separate_type"` //
}

// SeparateQueryAmtResp 可分账金额查询
type SeparateQueryAmtResp struct {
	MerchantNo       string `json:"merchant_no"`        // 商户号
	TotalSeparateAmt string `json:"total_separate_amt"` // 总分账金额
	CanSeparateAmt   string `json:"can_separate_amt"`   // 可分账金额
	LogDate          string `json:"log_date"`           // 拉卡拉对账单交易日期
	LogNo            string `json:"log_no"`             // 拉卡拉对账单流水号
}

// BinInfo 卡bin查询
type BinInfo struct {
	CardBin          string `json:"cardBin"`          // 卡bin
	BankCode         string `json:"bankCode"`         // 开户行号
	OrderNo          string `json:"orderNo"`          // 订单号
	CardName         string `json:"cardName"`         // 卡种名称
	OrgCode          string `json:"orgCode"`          // 机构代码
	CardType         string `json:"cardType"`         // 银行卡类别
	BankName         string `json:"bankName"`         // 开户行名称
	ClearingBankCode string `json:"clearingBankCode"` // 清算行号
	CardNo           string `json:"cardNo"`           // 银行卡号
}

// AuthenticationInfo 支付认证
type AuthenticationInfo struct {
	Version            string `json:"version"`            // 接口版本号	1.0
	OrderNo            string `json:"orderNo"`            // 14位年月日时（24小时制）分秒+8位的随机数（不重复）如
	OrgCode            string `json:"orgCode"`            // 机构代码
	MerInnerNo         string `json:"merInnerNo"`         // 拉卡拉内部商户号
	ContactType        string `json:"contactType"`        // 联系人类型 LEGAL：经营者/法人 SUPER：经办人
	Name               string `json:"name"`               // 联系人名称
	ContactIdDocType   string `json:"contactIdDocType"`   // 联系人证件类型 IDENTIFICATION_TYPE_IDCARD
	IdCardNumber       string `json:"idCardNumber"`       // 联系人证件号码
	ContactPeriodBegin string `json:"contactPeriodBegin"` // 联系人证件有效期开始时间
	ContactPeriodEnd   string `json:"contactPeriodEnd"`   // 联系人证件有效期结束时间
	Mobile             string `json:"mobile"`             // 联系人手机号
}

// UpdateAuthentication 修改报备请求
type UpdateAuthentication struct {
	Version     string `json:"version"`
	OrderNo     string `json:"orderNo"`
	OrgCode     string `json:"orgCode"`
	MerInnerNo  string `json:"merInnerNo"`
	ReceOrgNo   string `json:"receOrgNo"`
	SubMchId    string `json:"subMchId"`
	ChannelId   string `json:"channelId"`
	ApplymentId string `json:"applymentId"`
}

// QueryAuthentication 认证结果查询
type QueryAuthentication struct {
	Version    string `json:"version"`
	OrderNo    string `json:"orderNo"`
	OrgCode    string `json:"orgCode"`
	MerInnerNo string `json:"merInnerNo"`
	SubMchId   string `json:"subMchId"`
	ChannelId  string `json:"channelId"`
}

// QueryAuthenticationResp 认证结果查询
type QueryAuthenticationResp struct {
	MerInnerNo      string `json:"merInnerNo"`      // 拉卡拉内部商户号
	SubMchId        string `json:"subMchId"`        // 账户端子商户号
	ChannelId       string `json:"channelId"`       // 渠道号
	ApplymentState  string `json:"applymentState"`  // 申请状态
	ReceOrgNo       string `json:"receOrgNo"`       // 从业机构号
	ApplymentId     string `json:"applymentId"`     // 申请编号
	AuthorizeState  string `json:"authorizeState"`  // 认证状态
	RegisterChannel string `json:"registerChannel"` // 报备通道
	QrcodeData      string `json:"qrcodeData"`      // 小程序码图片
	RealNameType    string `json:"realNameType"`    // 实名认证类型
	RejectParameter string `json:"rejectParameter"` // 驳回参数
	RejectReason    string `json:"rejectReason"`    // 驳回原因
}
