From d86d7c7fb6c8245d04e4477b5d4610d2f8ed56de Mon Sep 17 00:00:00 2001 From: gaoda <2772718884@qq.com> Date: Sat, 13 Dec 2025 11:49:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(lklsdk):=20=E6=96=B0=E5=A2=9E=E5=95=86?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E5=92=8C=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除已弃用的订单分账结果查询相关代码 - 新增 QuerySubMerInfo 方法用于查询子商户信息 - 新增 MrchAuthStateQuery 方法用于查询商户认证状态 - 移除 WechatRealNameQuery 相关实现和模型定义 - 更新常量定义,移除不再使用的 URL 配置 - 添加新的请求和响应模型结构体定义 - 调整 SDK 接口方法,适配新的商户服务功能 --- consts/url.go | 11 +++--- lklsdk/merchant.go | 28 ++++++++++++++-- lklsdk/sdk.go | 13 ++++---- lklsdk/split_ledger_more.go | 19 ----------- model/mrchAuthStateQuery.go | 29 ++++++++++++++++ model/orderSplitLedgerResultQuery.go | 49 --------------------------- model/querySubMerInfo.go | 50 ++++++++++++++++++++++++++++ model/wechatRealNameQuery.go | 46 ------------------------- 8 files changed, 115 insertions(+), 130 deletions(-) create mode 100644 model/mrchAuthStateQuery.go delete mode 100644 model/orderSplitLedgerResultQuery.go create mode 100644 model/querySubMerInfo.go delete mode 100644 model/wechatRealNameQuery.go diff --git a/consts/url.go b/consts/url.go index f817057..4ba000b 100644 --- a/consts/url.go +++ b/consts/url.go @@ -23,9 +23,8 @@ const ( // LKL_ACCOUNT_BALANCE_QUERY_URL 拉卡拉账户余额查询 LKL_ACCOUNT_BALANCE_QUERY_URL = "/v2/laep/industry/ewalletBalanceQuery" // LKL_ACCOUNT_WITHDRAW_URL 拉卡拉账户提现 - LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1" - LKL_SPLIT_LEDGER_RESULT_QUERY_URL = "/v3/sacs/query_plus" - LKL_SPLIT_LEDGER_FALLBACK_URL = "/v3/sacs/fallback" + LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1" + LKL_SPLIT_LEDGER_FALLBACK_URL = "/v3/sacs/fallback" ) const ( @@ -57,9 +56,9 @@ const ( // LKL_EC_APPLY_MANUAL 拉卡拉商户电子合同人工复核申请 LKL_EC_APPLY_MANUAL = "/v3/mms/open_api/ec/apply_manual" // LKL_EC_QMA_STATUS 拉卡拉商户电子合同人工复核结果查询 - LKL_EC_QMA_STATUS = "/v3/mms/open_api/ec/qma_status" - // LKL_WECHAT_REAL_NAME_QUERY 拉卡拉微信实名认证结果查询 - LKL_WECHAT_REAL_NAME_QUERY = "/v2/mms/openApi/wechatRealNameQuery" + LKL_EC_QMA_STATUS = "/v3/mms/open_api/ec/qma_status" + LKL_QUERY_SUB_MER_INFO_URL = "/v2/mms/openApi/querySubMerInfo" + LKL_MRCH_AUTH_STATE_QUERY_URL = "/v2/mms/sme/mrchAuthStateQuery" ) // unifiedReturn 统一退货API地址 diff --git a/lklsdk/merchant.go b/lklsdk/merchant.go index c3e3773..130a50e 100644 --- a/lklsdk/merchant.go +++ b/lklsdk/merchant.go @@ -206,15 +206,37 @@ func (t *MerService[T]) ReconsiderSubmitTest(req *model.ReConfSubmitRequestData) return respBody, nil } -func (t *MerService[T]) WechatRealNameQuery(req *model.WechatRealNameQueryReqData) (*T, error) { +func (t *MerService[T]) QuerySubMerInfo(req *model.QuerySubMerInfoReqData) (*T, error) { // 构建请求参数 - url := consts.BASE_URL + consts.LKL_WECHAT_REAL_NAME_QUERY + url := consts.BASE_TEST_URL + consts.LKL_QUERY_SUB_MER_INFO_URL md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix())) if err != nil { return nil, fmt.Errorf("创建ReqId失败") } // 构建BaseModel请求 - baseReq := model.WechatRealNameQueryRequest{ + baseReq := model.QuerySubMerInfoRequest{ + ReqData: req, + ReqId: md5, + Timestamp: time.Now().Unix(), + Ver: "1.0", + } + + // 发送请求 + respBody, err := t.client.DoRequest(url, baseReq) + if err != nil { + return nil, err + } + return respBody, nil +} +func (t *MerService[T]) MrchAuthStateQuery(req *model.MrchAuthStateQueryReqData) (*T, error) { + // 构建请求参数 + url := consts.BASE_TEST_URL + consts.LKL_MRCH_AUTH_STATE_QUERY_URL + md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix())) + if err != nil { + return nil, fmt.Errorf("创建ReqId失败") + } + // 构建BaseModel请求 + baseReq := model.MrchAuthStateQueryRequest{ ReqData: req, ReqId: md5, Timestamp: time.Now().Unix(), diff --git a/lklsdk/sdk.go b/lklsdk/sdk.go index 28e328f..b190534 100644 --- a/lklsdk/sdk.go +++ b/lklsdk/sdk.go @@ -153,11 +153,6 @@ func (s *SDK[T]) OrderSplitLedgerTest(req *model.OrderSplitLedgerReqData) (*T, e return s.SplitLedger.OrderSplitLedgerTest(req) } -// OrderSplitLedgerResultQuery 订单分账结果查询 -func (s *SDK[T]) OrderSplitLedgerResultQuery(req *model.OrderSplitLedgerResultQueryReqData) (*T, error) { - return s.SplitLedger.OrderSplitLedgerResultQuery(req) -} - // OrderSplitLedgerFallback 订单分账回退 func (s *SDK[T]) OrderSplitLedgerFallback(req *model.OrderSplitLedgerFallbackReqData) (*T, error) { return s.SplitLedger.OrderSplitLedgerFallback(req) @@ -248,6 +243,10 @@ func (s *SDK[T]) ECQmaStatusTest(req *ecQmaStatus.ECQmaStatusRequestData) (*ecQm return s.ECPeQmaStatus.ECQmaStatusTest(req) } -func (s *SDK[T]) WechatRealNameQuery(req *model.WechatRealNameQueryReqData) (*T, error) { - return s.Merchant.WechatRealNameQuery(req) +func (s *SDK[T]) QuerySubMerInfo(req *model.QuerySubMerInfoReqData) (*T, error) { + return s.Merchant.QuerySubMerInfo(req) +} + +func (s *SDK[T]) MrchAuthStateQuery(req *model.MrchAuthStateQueryReqData) (*T, error) { + return s.Merchant.MrchAuthStateQuery(req) } diff --git a/lklsdk/split_ledger_more.go b/lklsdk/split_ledger_more.go index b6889b8..0f8fa49 100644 --- a/lklsdk/split_ledger_more.go +++ b/lklsdk/split_ledger_more.go @@ -138,25 +138,6 @@ func (s *SplitLedgerService[T]) OrderSplitLedgerTest(req *model.OrderSplitLedger return respBody, nil } -func (s *SplitLedgerService[T]) OrderSplitLedgerResultQuery(req *model.OrderSplitLedgerResultQueryReqData) (*T, error) { - // 构建请求参数 - url := consts.BASE_URL + consts.LKL_SPLIT_LEDGER_RESULT_QUERY_URL - - // 构建BaseModel请求 - baseReq := model.OrderSplitLedgerResultQueryRequest{ - ReqTime: time.Now().Format("20060102150405"), - Version: "3.0", - ReqData: req, - } - - // 发送请求 - respBody, err := s.client.DoRequest(url, baseReq) - if err != nil { - return nil, err - } - return respBody, nil -} - func (s *SplitLedgerService[T]) OrderSplitLedgerFallback(req *model.OrderSplitLedgerFallbackReqData) (*T, error) { // 构建请求参数 url := consts.BASE_URL + consts.LKL_SPLIT_LEDGER_FALLBACK_URL diff --git a/model/mrchAuthStateQuery.go b/model/mrchAuthStateQuery.go new file mode 100644 index 0000000..806706e --- /dev/null +++ b/model/mrchAuthStateQuery.go @@ -0,0 +1,29 @@ +package model + +type MrchAuthStateQueryRequest struct { + ReqData *MrchAuthStateQueryReqData `json:"reqData"` + Ver string `json:"ver"` + Timestamp int64 `json:"timestamp"` + ReqId string `json:"reqId"` +} + +type MrchAuthStateQueryReqData struct { + TradeMode string `json:"tradeMode" dc:"交易模式"` + SubMerchantId string `json:"subMerchantId" dc:"子商户号"` + MerchantNo string `json:"merchantNo" dc:"商户号"` +} + +type MrchAuthStateQueryResponse struct { + RetCode string `json:"retCode"` + RetMsg string `json:"retMsg"` + RespData *MrchAuthStateQueryRespData `json:"respData"` +} + +type MrchAuthStateQueryRespData struct { + SubMerchantId string `json:"subMerchantId"` + CheckResult string `json:"checkResult"` +} + +func (t *MrchAuthStateQueryResponse) SuccessOrFail() bool { + return t.RetCode == "000000" +} diff --git a/model/orderSplitLedgerResultQuery.go b/model/orderSplitLedgerResultQuery.go deleted file mode 100644 index 8379f3a..0000000 --- a/model/orderSplitLedgerResultQuery.go +++ /dev/null @@ -1,49 +0,0 @@ -package model - -type OrderSplitLedgerResultQueryRequest struct { - ReqData *OrderSplitLedgerResultQueryReqData `json:"req_data"` // 请求业务数据 - Version string `json:"version"` // 接口版本号 - ReqTime string `json:"req_time"` // 请求时间,格式为yyyyMMddHHmmss -} - -type OrderSplitLedgerResultQueryReqData struct { - MerchantNo string `json:"merchant_no"` // 商户号,必传,长度32 - SeparateNo string `json:"separate_no"` // 分账核心系统返回的分账流水号,入参中的separate_no,out_separate_no至少二选一,优先级: separate_no> out_separate_no - OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号,入入参中的separate_no,out_separate_no至少二选一,优先级: separate_no> out_separate_no -} - -type OrderSplitLedgerResultQueryResponse struct { - Msg string `json:"msg"` // 消息 - RespTime string `json:"resp_time"` // 响应时间 - Code string `json:"code"` // 响应码 SACS0000表示成功 - RespData 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"` // 交易日期 posp日期,yyyyMMdd,查清结算用 - 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"` // 手续费金额 - AccResultDesc string `json:"acc_result_desc"` // 账户处理错误描述 - DetailDatas []*OrderSplitLedgerResultQueryRespDetailDatas `json:"detail_datas"` // 明细数据 - } -} - -type OrderSplitLedgerResultQueryRespDetailDatas struct { - RecvMerchantNo string `json:"recv_merchant_no"` // 接收方商户号 - RecvNo string `json:"recv_no"` // 接收方编号 - Amt string `json:"amt"` // 分账金额 - ActualAmt string `json:"actual_amt"` // 实分金额 - FeeAmt string `json:"fee_amt"` // 手续费金额 -} - -func (s *OrderSplitLedgerResultQueryResponse) SuccessOrFail() bool { - return s.Code == "SACS0000" -} diff --git a/model/querySubMerInfo.go b/model/querySubMerInfo.go new file mode 100644 index 0000000..5cf5929 --- /dev/null +++ b/model/querySubMerInfo.go @@ -0,0 +1,50 @@ +package model + +type QuerySubMerInfoRequest struct { + ReqData *QuerySubMerInfoReqData `json:"reqData"` + Ver string `json:"ver"` + Timestamp int64 `json:"timestamp"` + ReqId string `json:"reqId"` +} + +type QuerySubMerInfoReqData struct { + Version string `json:"version" dc:"接口版本号"` + OrderNo string `json:"orderNo" dc:"订单编号,保证唯一"` + OrgCode string `json:"orgCode" dc:"机构代码"` + MerInnerNo string `json:"merInnerNo" dc:"拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准。"` + MerCupNo string `json:"merCupNo" dc:"拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准。"` + RegisterChannel string `json:"registerChannel" dc:"报备渠道"` + RegisterType string `json:"registerType" dc:"报备类型"` + RegisterStatus string `json:"registerStatus" dc:"报备状态 SUCCESS:成功;FAIL:失败"` + SubMchId string `json:"subMchId" dc:"子商户号"` +} + +type QuerySubMerInfoResponse struct { + RetCode string `json:"retCode"` + RetMsg string `json:"retMsg"` + RespData *QueryMerResponseData `json:"respData"` +} + +type QuerySubMerInfoRespData struct { + OrgCode string `json:"orgCode"` + OrderNo string `json:"orderNo"` + List []*RegisterList `json:"list"` +} +type RegisterList struct { + MerInnerNo string `json:"merInnerNo" dc:"内部商户号"` + SubMchId string `json:"subMchId" dc:"子商户号"` + SubMchIdBank string `json:"subMchIdBank" dc:"交易子商户号"` + DcWalletId string `json:"dcWalletId" dc:"数币钱包ID"` + ChannelId string `json:"channelId" dc:"渠道号"` + ReceOrgNo string `json:"receOrgNo" dc:"从业机构号"` + RegisterChannel string `json:"registerChannel" dc:"报备渠道"` + RegisterType string `json:"registerType" dc:"报备类型"` + RegisterTm string `json:"registerTm" dc:"报备时间"` + RegisterStatus string `json:"registerStatus" dc:"报备状态"` + ResultCode string `json:"resultCode" dc:"结果返回码"` + ResultMessage string `json:"resultMessage" dc:"结果描述"` +} + +func (t *QuerySubMerInfoResponse) SuccessOrFail() bool { + return t.RetCode == "000000" +} diff --git a/model/wechatRealNameQuery.go b/model/wechatRealNameQuery.go deleted file mode 100644 index ad0d677..0000000 --- a/model/wechatRealNameQuery.go +++ /dev/null @@ -1,46 +0,0 @@ -package model - -type WechatRealNameQueryRequest struct { - // 请求业务数据 - ReqData *WechatRealNameQueryReqData `json:"reqData"` - // 接口版本号 - Ver string `json:"ver"` - // 请求时间,格式为yyyyMMddHHmmss - Timestamp int64 `json:"timestamp"` - ReqId string `json:"reqId"` -} - -type WechatRealNameQueryReqData struct { - Version string `json:"version" dc:"接口版本号"` - OrderNo string `json:"orderNo" dc:"订单编号 14位年月日时(24小时制)分秒+8位的随机数(不重复)如:2021020112000012345678"` - OrgCode string `json:"orgCode" dc:"机构代码"` - MerInnerNo string `json:"merInnerNo" dc:"拉卡拉内部商户号"` - SubMchId string `json:"subMchId" dc:"子商户号"` - ChannelId string `json:"channelId" dc:"渠道号 (建议传入,能具体定位用的渠道,仅支持拉卡拉渠道查询)"` -} - -type WechatRealNameQueryResponse struct { - // 响应状态码,000000表示成功 - RetCode string `json:"retCode"` - // 响应消息 - RetMsg string `json:"retMsg"` - // 响应业务数据,当code为000000时返回 - RespData *WechatRealNameQueryRespData `json:"respData"` -} - -type WechatRealNameQueryRespData struct { - MerInnerNo string `json:"merInnerNo" dc:"拉卡拉内部商户号"` - SubMchId string `json:"subMchId" dc:"账户端子商户号 "` - ChannelId string `json:"channelId" dc:"渠道号"` - ReceOrgNo string `json:"receOrgNo" dc:"从业机构号"` - ApplymentId string `json:"applymentId" dc:"申请编号"` - ApplymentState string `json:"applymentState" dc:"申请状态"` - AuthorizeState string `json:"authorizeState" dc:"认证状态"` - QrcodeData string `json:"qrcodeData" dc:" 小程序码图片"` - RejectParameter string `json:"rejectParameter" dc:"驳回参数"` - RejectReason string `json:"rejectReason" dc:"驳回原因"` -} - -func (resp *WechatRealNameQueryResponse) SuccessOrFail() bool { - return resp.RetCode == "000000" -}