拉卡拉 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