feat(电子合同): 添加电子合同相关功能及文档链接

- 在model/merchant.go中将AttType字段类型改为consts.AcctTypeCode
- 为所有电子合同相关接口添加文档链接注释
- 在consts/url.go中添加测试环境URL和电子合同相关API路径
- 在lklsdk/merchant/in_net/ec/applymanual/request.go中将AttachType字段类型改为consts.AttType
- 在lklsdk/sdk.go中添加电子合同相关服务初始化及接口封装
main
maguodong 2025-10-20 10:30:13 +08:00
parent e985b790d4
commit ee259e7c9a
9 changed files with 109 additions and 19 deletions

View File

@ -2,6 +2,7 @@ package consts
const (
BASE_URL = "https://s2.lakala.com/api"
BASE_TEST_URL = "https://test.wsmsd.cn/sit/api"
)
const (
@ -45,6 +46,16 @@ const (
LKL_MER_VALIDATE = "/v2/mms/openApi/verifyContractInfo"
// LKL_RECONF_SUBMIT 拉卡拉商户进件复议提交
LKL_RECONF_SUBMIT = "/v2/mms/openApi/reconsiderSubmit"
// LKL_EC_APPLY 拉卡拉商户电子合同
LKL_EC_APPLY = "/v3/mms/open_api/ec/apply"
// LKL_EC_QUERY_STATUS 拉卡拉商户电子合同查询状态
LKL_EC_QUERY_STATUS = "/v3/mms/open_api/ec/q_status"
// LKL_EC_DOWNLOAD 拉卡拉商户电子合同下载
LKL_EC_DOWNLOAD = "/v3/mms/open_api/ec/download"
// 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"
)
// unifiedReturn 统一退货API地址

View File

@ -20,6 +20,7 @@ func NewEcApply(client *common.Client[ECApplyResponse]) *Apply {
// 提供与拉卡拉进行电子签约的第四方进行电子合同申请
// 电子合同签约成功后不需要将其下载出来作为附件上传只需将电子合同编号ecNo
// 在“新增商户入网”接口中在contractNo字段中传入即可
// https://o.lakala.com/#/home/document/detail?id=289
func (a *Apply) ECApply(req *ECApplyRequestData) (*ECApplyResponse, error) {
// 构建请求
baseReq := ECApplyRequest{
@ -35,6 +36,7 @@ func (a *Apply) ECApply(req *ECApplyRequestData) (*ECApplyResponse, error) {
// 提供与拉卡拉进行电子签约的第四方进行电子合同申请
// 电子合同签约成功后不需要将其下载出来作为附件上传只需将电子合同编号ecNo
// 在“新增商户入网”接口中在contractNo字段中传入即可
// https://o.lakala.com/#/home/document/detail?id=289
func (a *Apply) ECApplyTest(req *ECApplyRequestData) (*ECApplyResponse, error) {
// 构建请求
baseReq := ECApplyRequest{

View File

@ -19,6 +19,7 @@ func NewApplyManual(client *common.Client[ECApplyManualResponse]) *ApplyManual {
}
// ECApplyManual 电子合同人工复核申请(生产环境)
// https://o.lakala.com/#/home/document/detail?id=981
func (a *ApplyManual) ECApplyManual(req *ECApplyManualRequestData) (*ECApplyManualResponse, error) {
// 创建请求对象
request := ECApplyManualRequest{
@ -30,6 +31,7 @@ func (a *ApplyManual) ECApplyManual(req *ECApplyManualRequestData) (*ECApplyManu
}
// ECApplyManualTest 电子合同人工复核申请(测试环境)
// https://o.lakala.com/#/home/document/detail?id=981
func (a *ApplyManual) ECApplyManualTest(req *ECApplyManualRequestData) (*ECApplyManualResponse, error) {
// 创建请求对象
request := ECApplyManualRequest{

View File

@ -1,5 +1,9 @@
package applymanual
import (
"github.com/black1552/lkl_sdk/consts"
)
// ECApplyManualRequestData 电子合同人工复核申请请求数据结构体
type ECApplyManualRequestData struct {
Version string `json:"version"` // 版本号默认1.0
@ -13,7 +17,7 @@ type ECApplyManualRequestData struct {
// ECFileData 附件信息结构体
type ECFileData struct {
AttachType string `json:"attach_type"` // 附件类型,必填,枚举值见文档
AttachType consts.AttType `json:"attach_type"` // 附件类型,必填,枚举值见文档
AttachName string `json:"attach_name"` // 附件名称必填最大32字符
AttachExtName string `json:"attach_ext_name"` // 附件格式必填jpg、pdf等
AttachStorePath string `json:"attach_store_path"` // 附件坐标URL必填如G1/M00/00/61/CrFdEl3IyceAVVd8AAA0ADuZsA0911.jpg

View File

@ -19,6 +19,7 @@ func NewDownload(client *common.Client[ECDownloadResponse]) *Download {
// ECDownload 电子合同下载
// 提供已完成的签约电子合同下载
// https://o.lakala.com/#/home/document/detail?id=294
func (d *Download) ECDownload(req *ECDownloadRequestData) (*ECDownloadResponse, error) {
// 构建请求
baseReq := ECDownloadRequest{
@ -33,6 +34,7 @@ func (d *Download) ECDownload(req *ECDownloadRequestData) (*ECDownloadResponse,
// ECDownloadTest 电子合同下载(测试环境)
// 提供已完成的签约电子合同下载
// https://o.lakala.com/#/home/document/detail?id=294
func (d *Download) ECDownloadTest(req *ECDownloadRequestData) (*ECDownloadResponse, error) {
// 构建请求
baseReq := ECDownloadRequest{

View File

@ -16,7 +16,8 @@ func NewQmaStatus(client *common.Client[ECQmaStatusResponse]) *QmaStatus {
return &QmaStatus{Client: client}
}
// ECQmaStatus 电子合同人工复核结果查询(生产环境)
// ECQmaStatus
// https://o.lakala.com/#/home/document/detail?id=982
func (q *QmaStatus) ECQmaStatus(req *ECQmaStatusRequestData) (*ECQmaStatusResponse, error) {
// 创建请求对象
request := ECQmaStatusRequest{
@ -28,6 +29,7 @@ func (q *QmaStatus) ECQmaStatus(req *ECQmaStatusRequestData) (*ECQmaStatusRespon
}
// ECQmaStatusTest 电子合同人工复核结果查询(测试环境)
// https://o.lakala.com/#/home/document/detail?id=982
func (q *QmaStatus) ECQmaStatusTest(req *ECQmaStatusRequestData) (*ECQmaStatusResponse, error) {
// 创建请求对象
request := ECQmaStatusRequest{

View File

@ -19,6 +19,7 @@ func NewQStatus(client *common.Client[ECQueryStatusResponse]) *QStatus {
// QueryStatus 电子合同查询状态
// 提供申请过与拉卡拉电子签约用户查询电子合同签署状态
// https://o.lakala.com/#/home/document/detail?id=293
func (q *QStatus) QueryStatus(req *ECQueryStatusRequestData) (*ECQueryStatusResponse, error) {
// 构建请求
baseReq := ECQueryStatusRequest{
@ -33,6 +34,7 @@ func (q *QStatus) QueryStatus(req *ECQueryStatusRequestData) (*ECQueryStatusResp
// QueryStatusTest 电子合同查询状态(测试环境)
// 提供申请过与拉卡拉电子签约用户查询电子合同签署状态
// https://o.lakala.com/#/home/document/detail?id=293
func (q *QStatus) QueryStatusTest(req *ECQueryStatusRequestData) (*ECQueryStatusResponse, error) {
// 构建请求
baseReq := ECQueryStatusRequest{

View File

@ -4,6 +4,11 @@ import (
"context"
"github.com/black1552/lkl_sdk/lklsdk/common"
ecApply "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/apply"
ecApplyManual "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/applymanual"
ecDownload "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/download"
ecQmaStatus "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/qmastatus"
ecQuery "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/querystatus"
"github.com/black1552/lkl_sdk/model"
)
@ -16,6 +21,11 @@ type SDK[T any] struct {
UploadFile *UploadFileService[T]
MergePre *MergePreService[T]
Merchant *MerService[T]
EC *ecApply.Apply
ECQuery *ecQuery.QStatus
ECFileDownload *ecDownload.Download
ECPeApplyManual *ecApplyManual.ApplyManual
ECPeQmaStatus *ecQmaStatus.QmaStatus
}
// NewSDK 创建拉卡拉SDK实例
@ -29,6 +39,11 @@ func NewSDK[T any](ctx context.Context, cfgJson string) *SDK[T] {
UploadFile: NewUploadFileService(client),
MergePre: NewMergePreService(client),
Merchant: NewMerService(client),
EC: ecApply.NewEcApply(common.NewClient[ecApply.ECApplyResponse](ctx, cfgJson)),
ECQuery: ecQuery.NewQStatus(common.NewClient[ecQuery.ECQueryStatusResponse](ctx, cfgJson)),
ECFileDownload: ecDownload.NewDownload(common.NewClient[ecDownload.ECDownloadResponse](ctx, cfgJson)),
ECPeApplyManual: ecApplyManual.NewApplyManual(common.NewClient[ecApplyManual.ECApplyManualResponse](ctx, cfgJson)),
ECPeQmaStatus: ecQmaStatus.NewQmaStatus(common.NewClient[ecQmaStatus.ECQmaStatusResponse](ctx, cfgJson)),
}
}
@ -117,3 +132,53 @@ func (s *SDK[T]) UploadFileQuery(req *model.UploadFileReqData) (*T, error) {
func (s *SDK[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
return s.Account.Withdraw(req)
}
// ECApply 电子合同申请
func (s *SDK[T]) ECApply(req *ecApply.ECApplyRequestData) (*ecApply.ECApplyResponse, error) {
return s.EC.ECApply(req)
}
// ECApplyTest 电子合同申请(测试环境)
func (s *SDK[T]) ECApplyTest(req *ecApply.ECApplyRequestData) (*ecApply.ECApplyResponse, error) {
return s.EC.ECApplyTest(req)
}
// ECQueryStatus 电子合同查询状态
func (s *SDK[T]) ECQueryStatus(req *ecQuery.ECQueryStatusRequestData) (*ecQuery.ECQueryStatusResponse, error) {
return s.ECQuery.QueryStatus(req)
}
// ECQueryStatusTest 电子合同查询状态(测试环境)
func (s *SDK[T]) ECQueryStatusTest(req *ecQuery.ECQueryStatusRequestData) (*ecQuery.ECQueryStatusResponse, error) {
return s.ECQuery.QueryStatusTest(req)
}
// ECDownload 电子合同下载
func (s *SDK[T]) ECDownload(req *ecDownload.ECDownloadRequestData) (*ecDownload.ECDownloadResponse, error) {
return s.ECFileDownload.ECDownload(req)
}
// ECDownloadTest 电子合同下载(测试环境)
func (s *SDK[T]) ECDownloadTest(req *ecDownload.ECDownloadRequestData) (*ecDownload.ECDownloadResponse, error) {
return s.ECFileDownload.ECDownloadTest(req)
}
// ECApplyManual 电子合同人工复核申请
func (s *SDK[T]) ECApplyManual(req *ecApplyManual.ECApplyManualRequestData) (*ecApplyManual.ECApplyManualResponse, error) {
return s.ECPeApplyManual.ECApplyManual(req)
}
// ECApplyManualTest 电子合同人工复核申请(测试环境)
func (s *SDK[T]) ECApplyManualTest(req *ecApplyManual.ECApplyManualRequestData) (*ecApplyManual.ECApplyManualResponse, error) {
return s.ECPeApplyManual.ECApplyManualTest(req)
}
// ECQmaStatus 电子合同人工复核结果查询
func (s *SDK[T]) ECQmaStatus(req *ecQmaStatus.ECQmaStatusRequestData) (*ecQmaStatus.ECQmaStatusResponse, error) {
return s.ECPeQmaStatus.ECQmaStatus(req)
}
// ECQmaStatusTest 电子合同人工复核结果查询(测试环境)
func (s *SDK[T]) ECQmaStatusTest(req *ecQmaStatus.ECQmaStatusRequestData) (*ecQmaStatus.ECQmaStatusResponse, error) {
return s.ECPeQmaStatus.ECQmaStatusTest(req)
}

View File

@ -82,7 +82,7 @@ type FeeData struct {
type FileData struct {
AttFileId string `json:"attFileId"` // 文件编号/附件上传后返回的编号,必填
AttType string `json:"attType"` // 附件类型,必填
AttType consts.AcctTypeCode `json:"attType"` // 附件类型,必填
}
// MerchantApplyResponse 商户进件响应结构体