编程 拉卡拉SDK:Go语言支付集成SDK,分账交易账户进件一站式封装

2026-07-29 11:23:24 +0800 CST views 7

拉卡拉 SDK:Go 语言支付集成 SDK,分账交易账户进件一站式封装

来源:微信公众号

lkl_sdk 是一个通用的拉卡拉 SDK,提供了分账、交易、账户等功能的 API 接口封装,方便开发者快速集成拉卡拉支付服务。

项目地址:https://github.com/black1552/lkl_sdk

目录结构

lklsdk/
├── account.go              # 账户相关功能
├── common/                 # 通用工具和客户端
│   ├── client.go           # 核心客户端
│   ├── json_cleaner.go     # JSON 清理工具
│   └── structs.go          # 通用结构体定义
├── merchant.go             # 商户相关功能
├── merchant/in_net/ec/     # 电子合同模块
│   ├── apply/              # 电子合同申请
│   ├── applymanual/        # 人工复核申请
│   ├── download/           # 合同下载
│   ├── qmastatus/          # 复核结果查询
│   └── querystatus/        # 签署状态查询
├── mergePre.go             # 主扫合单交易
├── sdk.go                  # SDK 主入口
├── split_ledger.go         # 分账基本功能
├── split_ledger_more.go    # 分账扩展功能
├── trade.go                # 交易相关功能
├── unifiedreturn/          # 统一退款
└── uploadFile.go           # 文件上传

快速安装

go get -u github.com/black1552/lkl_sdk

初始化 SDK

import (
    "github.com/black1552/lkl_sdk/lklsdk"
    "github.com/black1552/lkl_sdk/model"
)

cfgJson := `{
    "public_key": "your_public_key",
    "private_key": "your_private_key",
    "app_id": "your_app_id",
    "serial_no": "your_serial_no",
    "sub_app_id": "your_sub_app_id",
    "version": "3.0",
    "account_type": "WECHAT",
    "trans_type": "71",
    "notify_url": "your_notify_url"
}`

sdk := lklsdk.NewSDK[model.ResponseType](gctx.New(), cfgJson)

核心功能模块

1. 主扫合单交易

支持多笔子订单合并为一笔交易,适合购物车多商品场景:

sdk := lklsdk.NewSDK[model.MergePreorderResponse](gctx.New(), cfgJson)

outSplitInfo := []*model.OutSplitInfo{
    {OutSubTradeNo: "子交易流水号1", Amount: "100"},
    {OutSubTradeNo: "子交易流水号2", Amount: "200"},
}

mergePreorderReq := &model.MergePreorderReqData{
    MerchantNo: config.MerchantNo,
    TermNo:     config.TermNo,
    OutTradeNo: "商户交易流水号",
    OutSplitInfo: outSplitInfo,
    AccountType:  "WECHAT",
    TransType:    "71",
    TotalAmount:  "300",
    Subject:      "测试订单",
    NotifyUrl:    "https://your-notify-url.com",
}

mergePreorderResp, err := sdk.MergePreOrder(mergePreorderReq)

2. 商户分账业务开通

applyLedgerReq := &model.ApplyLedgerMerReqData{
    OrderNo:              "12345678901234567890123456789012",
    MerInnerNo:           "1234567821",
    ContactMobile:        "13311111111",
    SplitLowestRatio:     3.51,
    SplitRange:           consts.SPLIT_RANGE_ALL,
    RetUrl:               "notifyUrl.com",
}

expectResp, err := sdk.ApplyLedgerMer(applyLedgerReq)

3. 交易查询

tradeQueryReq := &model.TradeQueryReqData{
    MerchantNo: config.MerchantNo,
    TermNo:     config.TermNo,
    OutTradeNo: "商户订单号",
}

tradeQueryResp, err := sdk.TradeQuery(tradeQueryReq)

4. 订单分账

支持按金额或按比例计算分账,分账接收方可动态添加:

var recvDatas []*model.OrderSplitLedgerRecvDatas

splitLedgerReq := &model.OrderSplitLedgerReqData{
    TotalAmt:  "",
    CalType:   consts.CAL_TYPE_AMOUNT,
    NotifyUrl: "",
    RecvDatas: recvDatas,
}

splitLedgerResp, err := sdk.OrderSplitLedger(splitLedgerReq)

5. 退款

refundReq := &model.RefundReqData{
    OutTradeNo:   "original_out_trade_no",
    OutRefundNo:  "your_refund_out_trade_no",
    RefundAmount: "100",
    TotalAmount:  "100",
    RefundReason: "退款原因",
    NotifyUrl:    "https://your-notify-url.com",
}

refundResp, err := sdk.Refound(refundReq)

6. 账户余额查询

balanceQueryReq := &model.BalanceQueryReqData{
    MerchantNo: config.MerchantNo,
    PayType:    consts.PAY_TYPE_CARD,
    MgtFlag:    consts.MGT_FLAG_NO,
}

balanceQueryResp, err := sdk.BalanceQuery(balanceQueryReq)

7. 账户提现

withdrawReq := &model.WithdrawReqData{
    OutTradeNo:  "your_withdraw_out_trade_no",
    Amount:      "10000",
    Currency:    "CNY",
    AccountType: "WECHAT",
}

withdrawResp, err := sdk.Withdraw(withdrawReq)

8. 商户进件

支持商户入驻申请、信息查询、信息校验、复议提交全流程:

// 商户进件
merchantApplyReq := &model.MerchantApplyReqData{
    MerchantName: "商户名称",
    ContactName:  "联系人姓名",
    ContactPhone: "联系电话",
}
merchantApplyResp, err := sdk.AddMer(merchantApplyReq)

// 查询进件信息
queryMerResp, err := sdk.QueryMerchant(queryMerReq)

// 进件信息校验
merValidateResp, err := sdk.MerValidate(merValidateReq)

错误处理

SDK 使用两层错误处理机制:

// 第一层:网络或 SDK 层面错误
resp, err := sdk.SomeFunction(req)
if err != nil {
    return err  // 网络错误或 SDK 内部错误
}

// 第二层:业务响应状态
if !resp.SuccessOrFail() {
    return errors.New("业务处理失败")
}

电子合同管理

商户电子合同功能覆盖了申请、人工复核、结果查询、签署状态查询、合同下载等完整流程,每个子模块都按 api.go / request.go / response.go 三层结构组织,代码清晰,易于扩展。

设计特点

  • 泛型响应类型:每个接口方法使用 Go 泛型指定具体的响应结构体,编译时类型安全
  • 统一错误处理SuccessOrFail() 方法统一判断业务请求是否成功
  • 模块化分层:按功能模块划分,每个模块独立文件,代码组织清晰
  • 完整参数校验:请求结构体中定义了完整的验证规则
  • JSON 清理工具:内置 json_cleaner.go 处理拉卡拉接口的特殊 JSON 格式要求

GitHub:https://github.com/black1552/lkl_sdk

推荐文章

Vue 3 是如何实现更好的性能的?
2024-11-19 09:06:25 +0800 CST
PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
GROMACS:一个美轮美奂的C++库
2024-11-18 19:43:29 +0800 CST
程序员茄子在线接单