Compare commits

..

No commits in common. "main" and "v1.0.0" have entirely different histories.
main ... v1.0.0

68 changed files with 347 additions and 4442 deletions

413
README.md
View File

@ -6,53 +6,20 @@
``` ```
lklsdk/ lklsdk/
├── account.go # 账户相关功能 ├── client.go # 核心客户端
├── common/ # 通用工具和客户端
│ ├── client.go # 核心客户端
│ ├── json_cleaner.go # JSON清理工具
│ └── structs.go # 通用结构体定义
├── merchant.go # 商户相关功能
├── merchant/ # 商户相关模块
│ └── in_net/ # 网络接口
│ └── ec/ # 电子合同功能
│ ├── apply/ # 电子合同申请
│ │ ├── api.go # API实现
│ │ ├── request.go # 请求结构体
│ │ └── response.go # 响应结构体
│ ├── applymanual/ # 电子合同人工复核申请
│ │ ├── api.go # API实现
│ │ ├── request.go # 请求结构体
│ │ └── response.go # 响应结构体
│ ├── download/ # 电子合同下载
│ │ ├── api.go # API实现
│ │ ├── request.go # 请求结构体
│ │ └── response.go # 响应结构体
│ ├── qmastatus/ # 电子合同人工复核结果查询
│ │ ├── api.go # API实现
│ │ ├── request.go # 请求结构体
│ │ └── response.go # 响应结构体
│ └── querystatus/ # 电子合同签署状态查询
│ ├── api.go # API实现
│ ├── request.go # 请求结构体
│ └── response.go # 响应结构体
├── mergePre.go # 主扫合单交易功能
├── sdk.go # SDK主入口
├── split_ledger.go # 分账基本功能 ├── split_ledger.go # 分账基本功能
├── split_ledger_more.go # 分账扩展功能 ├── split_ledger_more.go # 分账扩展功能
├── trade.go # 交易相关功能 ├── trade.go # 交易相关功能
├── unifiedreturn/ # 统一退款功能 ├── account.go # 账户相关功能
│ ├── mergerefund/ # 合并退款 ├── merge_pre.go # 主扫合单交易功能
│ ├── refund/ # 退款 └── sdk.go # SDK主入口
│ ├── refundfee/ # 退款手续费
│ └── refundquery/ # 退款查询
└── uploadFile.go # 文件上传相关功能
``` ```
## 安装 ## 安装
```bash ```bash
# 将SDK引入到您的项目中 # 将SDK引入到您的项目中
go get -u github.com/black1552/lkl_sdk go get -u github.com/black1552/lkl_sdk/lklsdk
``` ```
## 快速开始 ## 快速开始
@ -63,25 +30,25 @@ go get -u github.com/black1552/lkl_sdk
import ( import (
"github.com/black1552/lkl_sdk/lklsdk" "github.com/black1552/lkl_sdk/lklsdk"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
"github.com/black1552/lkl_sdk/consts"
"github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gctx"
) )
// 创建配置JSON字符串 // 创建配置
cfgJson := `{ config := &lklsdk.Config{
"public_key": "your_public_key", // 公钥字符串 AppID: "your_app_id", // 拉卡拉分配的AppID
"private_key": "your_private_key", // 私钥字符串 TermNo: "your_term_no", // 终端号
"app_id": "your_app_id", // lakala应用ID MerchantNo: "your_merchant_no", // 商户号
"serial_no": "your_serial_no", // 序列号 SettleMerNo: "your_settle_mer_no", // 结算商户号
"sub_app_id": "your_sub_app_id", // 子应用ID 微信AppId SettleTermNo: "your_settle_term_no", // 结算终端号
"version": "3.0", // lakala版本号 AccountType: "WECHAT", // 账户类型如WECHAT、ALIPAY等
"account_type": "WECHAT", // 账户类型 TransType: "71", // 交易类型
"trans_type": "71", // 交易类型 Version: "3.0", // API版本
"notify_url": "your_notify_url" // 回调地址 NotifyURL: "your_notify_url", // 回调URL
}` SerialNo: "your_mch_api_key", // 商户API密钥
}
// 初始化SDK使用泛型指定响应类型 // 初始化SDK使用泛型指定响应类型
sdk := lklsdk.NewSDK[model.ResponseType](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.ResponseType](gctx.New(), config)
``` ```
## 功能模块 ## 功能模块
@ -90,7 +57,7 @@ sdk := lklsdk.NewSDK[model.ResponseType](gctx.New(), cfgJson)
```go ```go
// 初始化特定响应类型的SDK // 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.MergePreorderResponse](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.MergePreorderResponse](gctx.New(), config)
// 准备拆单信息 // 准备拆单信息
outSplitInfo := []*model.OutSplitInfo{ outSplitInfo := []*model.OutSplitInfo{
@ -143,7 +110,7 @@ if !mergePreorderResp.SuccessOrFail() {
```go ```go
// 初始化特定响应类型的SDK // 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.ApplyLedgerMerResponse](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.ApplyLedgerMerResponse](gctx.New(), config)
// 构建请求参数 // 构建请求参数
applyLedgerReq := &model.ApplyLedgerMerReqData{ applyLedgerReq := &model.ApplyLedgerMerReqData{
@ -156,7 +123,7 @@ applyLedgerReq := &model.ApplyLedgerMerReqData{
SplitLowestRatio: 3.51, // 最低分账比例 SplitLowestRatio: 3.51, // 最低分账比例
SplitEntrustFileName: "授权委托书.pdf", // 授权委托书文件名 SplitEntrustFileName: "授权委托书.pdf", // 授权委托书文件名
SplitEntrustFilePath: "path", // 授权委托书文件路径 SplitEntrustFilePath: "path", // 授权委托书文件路径
SplitRange: consts.SPLIT_RANGE_ALL, // 分账范围ALL全部交易分账MARK标记交易分账 SplitRange: "ALL", // 分账范围ALL全部交易分账MARK标记交易分账
RetUrl: "notifyUrl.com", // 回调URL RetUrl: "notifyUrl.com", // 回调URL
} }
@ -176,7 +143,7 @@ if !expectResp.SuccessOrFail() {
```go ```go
// 初始化特定响应类型的SDK // 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.TradeQueryResponse](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.TradeQueryResponse](gctx.New(), config)
// 构建请求参数 // 构建请求参数
tradeQueryReq := &model.TradeQueryReqData{ tradeQueryReq := &model.TradeQueryReqData{
@ -201,7 +168,7 @@ if !tradeQueryResp.SuccessOrFail() {
```go ```go
// 初始化特定响应类型的SDK // 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.OrderSplitLedgerResponse](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.OrderSplitLedgerResponse](gctx.New(), config)
// 准备分账接收方数据 // 准备分账接收方数据
var recvDatas []*model.OrderSplitLedgerRecvDatas var recvDatas []*model.OrderSplitLedgerRecvDatas
@ -215,7 +182,7 @@ splitLedgerReq := &model.OrderSplitLedgerReqData{
OutSeparateNo: "", // 商户分账指令流水号 OutSeparateNo: "", // 商户分账指令流水号
TotalAmt: "", // 分账总金额,单位为分 TotalAmt: "", // 分账总金额,单位为分
LklOrgNo: "", // 拉卡拉机构编号 LklOrgNo: "", // 拉卡拉机构编号
CalType: consts.CAL_TYPE_AMOUNT, // 分账计算类型0-按金额1-按比例) CalType: "", // 分账计算类型0-按金额1-按比例)
NotifyUrl: "", // 回调地址 NotifyUrl: "", // 回调地址
RecvDatas: recvDatas, // 分账接收方数据 RecvDatas: recvDatas, // 分账接收方数据
} }
@ -232,52 +199,19 @@ if !splitLedgerResp.SuccessOrFail() {
} }
``` ```
### 5. 退款 ### 5. 账户余额查询
```go ```go
// 初始化特定响应类型的SDK // 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.RefundResponse](gctx.New(), cfgJson) sdk := lklsdk.NewSDK[model.BalanceQueryResponse](gctx.New(), config)
// 构建请求参数
refundReq := &model.RefundReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
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)
if err != nil {
log.Printf("退款失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !refundResp.SuccessOrFail() {
log.Printf("退款失败: %s\n", refundResp.Msg)
}
// 处理成功响应
// 可以从refundResp.RespData中获取退款结果数据
```
### 6. 账户余额查询
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.BalanceQueryResponse](gctx.New(), cfgJson)
// 构建请求参数 // 构建请求参数
balanceQueryReq := &model.BalanceQueryReqData{ balanceQueryReq := &model.BalanceQueryReqData{
MerchantNo: config.MerchantNo, MerchantNo: config.MerchantNo,
OrgNo: "", // 机构号 OrgNo: "", // 机构号
PayNo: "", // 支付单号 PayNo: "", // 支付单号
PayType: consts.PAY_TYPE_CARD, // 支付类型CARD-卡支付COUPON-优惠券支付DISCOUNT-折扣支付POINT-积分支付MIX-混合支付) PayType: "", // 支付类型
MgtFlag: consts.MGT_FLAG_NO, // 管理标志NO-普通交易YES-管理交易) MgtFlag: "", // 管理标志
} }
// 调用接口 // 调用接口
@ -316,295 +250,6 @@ if !resp.SuccessOrFail() {
// 使用resp获取返回的数据 // 使用resp获取返回的数据
``` ```
### 7. 账户提现
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.WithdrawResponse](gctx.New(), cfgJson)
// 构建请求参数
withdrawReq := &model.WithdrawReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
OutTradeNo: "your_withdraw_out_trade_no", // 提现商户流水号
Amount: "10000", // 提现金额,单位为分
Currency: "CNY", // 货币类型
AccountType: "WECHAT", // 账户类型
}
// 调用接口
withdrawResp, err := sdk.Withdraw(withdrawReq)
if err != nil {
log.Printf("账户提现失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !withdrawResp.SuccessOrFail() {
log.Printf("账户提现失败: %s\n", withdrawResp.Msg)
}
```
### 8. 商户进件
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.MerchantApplyResponse](gctx.New(), cfgJson)
// 构建请求参数
merchantApplyReq := &model.MerchantApplyReqData{
// 填写商户进件所需的各项参数
MerchantName: "商户名称",
ContactName: "联系人姓名",
ContactPhone: "联系电话",
// ... 其他必要参数
}
// 调用接口
merchantApplyResp, err := sdk.AddMer(merchantApplyReq)
if err != nil {
log.Printf("商户进件失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !merchantApplyResp.SuccessOrFail() {
log.Printf("商户进件失败: %s\n", merchantApplyResp.Msg)
}
```
### 9. 商户进件信息查询
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.QueryMerResponse](gctx.New(), cfgJson)
// 构建请求参数
queryMerReq := &model.QueryMerRequestData{
MerchantNo: "your_merchant_no", // 商户号
// ... 其他必要参数
}
// 调用接口
queryMerResp, err := sdk.QueryMerchant(queryMerReq)
if err != nil {
log.Printf("商户进件信息查询失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !queryMerResp.SuccessOrFail() {
log.Printf("商户进件信息查询失败: %s\n", queryMerResp.Msg)
}
```
### 10. 商户进件信息校验
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.MerValidateResponse](gctx.New(), cfgJson)
// 构建请求参数
merValidateReq := &model.MerValidateRequestData{
// 填写商户进件校验所需的各项参数
MerchantName: "商户名称",
// ... 其他必要参数
}
// 调用接口
merValidateResp, err := sdk.MerValidate(merValidateReq)
if err != nil {
log.Printf("商户进件信息校验失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !merValidateResp.SuccessOrFail() {
log.Printf("商户进件信息校验失败: %s\n", merValidateResp.Msg)
}
```
### 11. 商户进件复议提交
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.ReConfSubmitResponse](gctx.New(), cfgJson)
// 构建请求参数
reConfSubmitReq := &model.ReConfSubmitRequestData{
// 填写商户进件复议所需的各项参数
MerchantNo: "your_merchant_no",
// ... 其他必要参数
}
// 调用接口
reConfSubmitResp, err := sdk.ReconsiderSubmit(reConfSubmitReq)
if err != nil {
log.Printf("商户进件复议提交失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !reConfSubmitResp.SuccessOrFail() {
log.Printf("商户进件复议提交失败: %s\n", reConfSubmitResp.Msg)
}
```
### 12. 聚合预下单
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.PreorderResponse](gctx.New(), cfgJson)
// 构建请求参数
preOrderReq := &model.PreorderReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
OutTradeNo: "your_out_trade_no", // 商户交易流水号
AccountType: "WECHAT", // 账户类型
TransType: "71", // 交易类型
Amount: "100", // 金额,单位为分
Subject: "测试订单", // 订单标题
NotifyUrl: "https://your-notify-url.com", // 回调地址
}
// 调用接口
preOrderResp, err := sdk.PreOrder(preOrderReq)
if err != nil {
log.Printf("聚合预下单失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !preOrderResp.SuccessOrFail() {
log.Printf("聚合预下单失败: %s\n", preOrderResp.Msg)
}
```
### 13. 文件上传查询
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.UploadFileResponse](gctx.New(), cfgJson)
// 构建请求参数
uploadFileReq := &model.UploadFileReqData{
// 填写文件上传查询所需的各项参数
// ...
}
// 调用接口
uploadFileResp, err := sdk.UploadFileQuery(uploadFileReq)
if err != nil {
log.Printf("文件上传查询失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !uploadFileResp.SuccessOrFail() {
log.Printf("文件上传查询失败: %s\n", uploadFileResp.Msg)
}
```
### 14. 分账接收方创建申请
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.ApplyLedgerReceiverResponse](gctx.New(), cfgJson)
// 构建请求参数
applyLedgerReceiverReq := &model.ApplyLedgerReceiverReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
ReceiverType: "PERSON", // 接收方类型
ReceiverName: "接收方名称", // 接收方名称
ReceiverNo: "接收方编号", // 接收方编号
ReceiverAccNo: "接收方账号", // 接收方账号
// ... 其他必要参数
}
// 调用接口
applyLedgerReceiverResp, err := sdk.ApplyLedgerReceiver(applyLedgerReceiverReq)
if err != nil {
log.Printf("分账接收方创建申请失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !applyLedgerReceiverResp.SuccessOrFail() {
log.Printf("分账接收方创建申请失败: %s\n", applyLedgerReceiverResp.Msg)
}
```
### 15. 分账关系绑定申请
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.ApplyBindResponse](gctx.New(), cfgJson)
// 构建请求参数
applyBindReq := &model.ApplyBindReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
ReceiverType: "PERSON", // 接收方类型
ReceiverNo: "接收方编号", // 接收方编号
BindType: "1", // 绑定类型
// ... 其他必要参数
}
// 调用接口
applyBindResp, err := sdk.ApplyBind(applyBindReq)
if err != nil {
log.Printf("分账关系绑定申请失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !applyBindResp.SuccessOrFail() {
log.Printf("分账关系绑定申请失败: %s\n", applyBindResp.Msg)
}
```
### 16. 可分账金额查询
```go
// 初始化特定响应类型的SDK
sdk := lklsdk.NewSDK[model.SplitBalanceResponse](gctx.New(), cfgJson)
// 构建请求参数
splitBalanceReq := &model.SplitBalanceReqData{
MerchantNo: "your_merchant_no", // 商户号
TermNo: "your_term_no", // 终端号
// ... 其他必要参数
}
// 调用接口
splitBalanceResp, err := sdk.QuerySplitBalance(splitBalanceReq)
if err != nil {
log.Printf("可分账金额查询失败: %v\n", err)
}
// 使用SuccessOrFail方法判断请求是否成功
if !splitBalanceResp.SuccessOrFail() {
log.Printf("可分账金额查询失败: %s\n", splitBalanceResp.Msg)
}
```
## 错误处理
SDK使用两层错误处理机制请确保同时检查网络错误和业务响应状态
```go
// 1. 首先检查网络或SDK层面的错误
resp, err := sdk.SomeFunction(req)
if err != nil {
log.Printf("调用接口失败: %v\n", err)
// 处理网络错误或SDK内部错误
return err
}
// 2. 然后使用SuccessOrFail()方法判断业务响应是否成功
if !resp.SuccessOrFail() {
log.Printf("业务处理失败: %s\n", resp.Msg) // 或resp.RetMsg
// 处理业务失败情况
return errors.New("业务处理失败")
}
// 处理成功响应
// 使用resp获取返回的数据
```
## 注意事项 ## 注意事项
1. 请妥善保管您的AppID、商户号、密钥等敏感信息 1. 请妥善保管您的AppID、商户号、密钥等敏感信息

View File

@ -1,141 +0,0 @@
package consts
type AttType string
const (
ATT_TYPE_FR_ID_CARD_FRONT AttType = "FR_ID_CARD_FRONT" // 法人身份证正面
ATT_TYPE_FR_ID_CARD_BEHIND AttType = "FR_ID_CARD_BEHIND" // 法人身份证反面
ATT_TYPE_ID_CARD_FRONT AttType = "ID_CARD_FRONT" // 结算人身份证正面
ATT_TYPE_ID_CARD_BEHIND AttType = "ID_CARD_BEHIND" // 结算人身份证反面
ATT_TYPE_BANK_CARD AttType = "BANK_CARD" // 银行卡
ATT_TYPE_BUSINESS_LICENCE AttType = "BUSINESS_LICENCE" // 营业执照
ATT_TYPE_MERCHANT_PHOTO AttType = "MERCHANT_PHOTO" // 商户门头照片
ATT_TYPE_SHOPINNER AttType = "SHOPINNER" // 商铺内部照片
ATT_TYPE_XY AttType = "XY" // 线下纸质协议
ATT_TYPE_NETWORK_XY AttType = "NETWORK_XY" // 电子协议
ATT_TYPE_HT AttType = "HT" // 租赁合同
ATT_TYPE_COOPERATION_QUALIFICATION_PROOF AttType = "COOPERATION_QUALIFICATION_PROOF" // 合作资质证明
ATT_TYPE_FOOD_QUALIFICATION_PROOF AttType = "FOOD_QUALIFICATION_PROOF" // 食品经营相关资质
ATT_TYPE_NO_LEGAL_PERSON_SETT_AUTH_LETTER AttType = "NO_LEGAL_PERSON_SETT_AUTH_LETTER" // 非法人结算授权书
ATT_TYPE_SPLIT_ENTRUST_FILE AttType = "SPLIT_ENTRUST_FILE" // 结算授权委托书
ATT_TYPE_RENTAL_AGREEMENT AttType = "RENTAL_AGREEMENT" // 集市方与场地方间的租赁协议
ATT_TYPE_SPLIT_COOPERATION_FILE AttType = "SPLIT_COOPERATION_FILE" // 集市方与摊主间的合作协议
ATT_TYPE_OTHERS AttType = "OTHERS" // 其他
)
func (at AttType) Ptr() string {
return string(at)
}
type MgtFlag string
const (
MGT_FLAG_AVERAGE MgtFlag = "01" // 一般账户
MGT_FLAG_HOUSEHOLD MgtFlag = "03" // 虚户
)
type SplitRange string
const (
SPLIT_RANGE_ALL SplitRange = "ALL" // 全部交易分账
SPLIT_RANGE_MARK SplitRange = "MARK" // 标记交易分账
)
func (sr SplitRange) Ptr() string {
return string(sr)
}
type SepFundSource string
const (
SEP_FUND_SOURCE_TR SepFundSource = "TR" // 交易分账
SEP_FUND_SOURCE_BA SepFundSource = "BR" // 余额分账
)
func (sf SepFundSource) Ptr() string {
return string(sf)
}
type SplitLaunchMode string
const (
SPLIT_LAUNCH_MODE_AUTO SplitLaunchMode = "AUTO" // 自动触发分账
SPLIT_LAUNCH_MODE_POINTRULE SplitLaunchMode = "POINTRULE" // 指定规则分账
SPLIT_LAUNCH_MODE_MANUAL SplitLaunchMode = "MANUAL" // 手动分账
)
func (slm SplitLaunchMode) Ptr() string {
return string(slm)
}
type SplitSettleType string
const (
SPLIT_SETTLE_TYPE_01 SplitSettleType = "01" // 主扫现结
SPLIT_SETTLE_TYPE_03 SplitSettleType = "03" // 交易自动结算
)
func (sst SplitSettleType) Ptr() string {
return string(sst)
}
type SplitRuleSource string
const (
SPLIT_RULE_SOURCE_MER SplitRuleSource = "MER" // 商户分账规则
SPLIT_RULE_SOURCE_PLATFORM SplitRuleSource = "PLATFORM" // 平台分账规则
)
func (srs SplitRuleSource) Ptr() string {
return string(srs)
}
type AcctTypeCode string
const (
ACCT_TYPE_CODE_57 AcctTypeCode = "57" // 对公
ACCT_TYPE_CODE_58 AcctTypeCode = "58" // 对私
)
func (act AcctTypeCode) Ptr() string {
return string(act)
}
type AcctCertificateType string
const (
ACCT_CERTIFICATE_TYPE_ID_CARD AcctCertificateType = "17" // 身份证
ACCT_CERTIFICATE_TYPE_PASSPORT AcctCertificateType = "18" // 护照
ACCT_CERTIFICATE_TYPE_HONGKONG_MACAO AcctCertificateType = "19" // 港澳居民来往内地通行证
ACCT_CERTIFICATE_TYPE_TRAVEL AcctCertificateType = "20" // 台湾居民来往内地通行证
)
func (act AcctCertificateType) Ptr() string {
return string(act)
}
type CalType string
const (
CAL_TYPE_0 CalType = "0" // 按固定金额分账
CAL_TYPE_1 CalType = "1" // 按比例分账
)
func (ct CalType) Ptr() string {
return string(ct)
}
type PayType string
const (
PAY_TYPE_01 PayType = "01" // 收款账户
PAY_TYPE_02 PayType = "02" // 付款账户
PAY_TYPE_03 PayType = "03" // 分账商户账户
PAY_TYPE_04 PayType = "04" // 分账接收方账户
PAY_TYPE_05 PayType = "05" // 充值代付账户
PAY_TYPE_06 PayType = "06" // 结算代付账户
)
func (pt PayType) Ptr() string {
return string(pt)
}

View File

@ -1,745 +0,0 @@
// Package consts 提供常量定义
package consts
// AddrCode 地区码枚举
type AddrCode string
const (
// 地区码常量定义根据地区码表NEW.xlsx生成
// 常量命名规则大写字母加下划线格式使用表格B列值的拼音
// 常量值表格A列的值
// ADDR_CODE_QUAN_GUO 全国
ADDR_CODE_QUAN_GUO AddrCode = "1"
// ADDR_CODE_BEI_JING_SHI 北京市
ADDR_CODE_BEI_JING_SHI AddrCode = "1000"
// ADDR_CODE_MI_YUN_QU 密云区
ADDR_CODE_MI_YUN_QU AddrCode = "1027"
// ADDR_CODE_YAN_QING_QU 延庆区
ADDR_CODE_YAN_QING_QU AddrCode = "1028"
// ADDR_CODE_TIAN_JIN_SHI 天津市
ADDR_CODE_TIAN_JIN_SHI AddrCode = "1100"
// ADDR_CODE_NING_HE_QU 宁河区
ADDR_CODE_NING_HE_QU AddrCode = "1121"
// ADDR_CODE_JING_HAI_QU 静海区
ADDR_CODE_JING_HAI_QU AddrCode = "1123"
// ADDR_CODE_TIAN_JIN_SHI_JI_ZHOU_QU 蓟州区
ADDR_CODE_TIAN_JIN_SHI_JI_ZHOU_QU AddrCode = "1125"
// ADDR_CODE_BIN_HAI_XIN_QU 滨海新区
ADDR_CODE_BIN_HAI_XIN_QU AddrCode = "1127"
// ADDR_CODE_HE_BEI_SHENG 河北省
ADDR_CODE_HE_BEI_SHENG AddrCode = "1200"
// ADDR_CODE_SHI_JIA_ZHUANG_SHI 石家庄市
ADDR_CODE_SHI_JIA_ZHUANG_SHI AddrCode = "1210"
// ADDR_CODE_JING_XING_XIAN 井陉县
ADDR_CODE_JING_XING_XIAN AddrCode = "1211"
// ADDR_CODE_LU_QUAN_QU 鹿泉区
ADDR_CODE_LU_QUAN_QU AddrCode = "1212"
// ADDR_CODE_ZHENG_DING_XIAN 正定县
ADDR_CODE_ZHENG_DING_XIAN AddrCode = "1213"
// ADDR_CODE_LUAN_CHENG_QU 栾城区
ADDR_CODE_LUAN_CHENG_QU AddrCode = "1214"
// ADDR_CODE_CHANG_AN_QU 长安区
ADDR_CODE_CHANG_AN_QU AddrCode = "1215"
// ADDR_CODE_JIA_ZHUANG_SHI_QIAO_XI_QU 桥西区
ADDR_CODE_JIA_ZHUANG_SHI_QIAO_XI_QU AddrCode = "1216"
// ADDR_CODE_SHI_JIA_ZHUANG_SHI_XIN_HUA_QU 新华区
ADDR_CODE_SHI_JIA_ZHUANG_SHI_XIN_HUA_QU AddrCode = "1217"
// ADDR_CODE_JING_XING_KUANG_QU 井陉矿区
ADDR_CODE_JING_XING_KUANG_QU AddrCode = "1218"
// ADDR_CODE_YU_HUA_QU 裕华区
ADDR_CODE_YU_HUA_QU AddrCode = "1219"
// ADDR_CODE_XIN_JI_SHI 辛集市
ADDR_CODE_XIN_JI_SHI AddrCode = "1221"
// ADDR_CODE_JIN_ZHOU_SHI 晋州市
ADDR_CODE_JIN_ZHOU_SHI AddrCode = "1222"
// ADDR_CODE_SHEN_ZE_XIAN 深泽县
ADDR_CODE_SHEN_ZE_XIAN AddrCode = "1223"
// ADDR_CODE_WU_JI_XIAN 无极县
ADDR_CODE_WU_JI_XIAN AddrCode = "1224"
// ADDR_CODE_GAO_CHENG_QU 藁城区
ADDR_CODE_GAO_CHENG_QU AddrCode = "1225"
// ADDR_CODE_ZHAO_XIAN 赵县
ADDR_CODE_ZHAO_XIAN AddrCode = "1226"
// ADDR_CODE_XIN_LE_SHI 新乐市
ADDR_CODE_XIN_LE_SHI AddrCode = "1227"
// ADDR_CODE_GAO_YI_XIAN 高邑县
ADDR_CODE_GAO_YI_XIAN AddrCode = "1228"
// ADDR_CODE_YUAN_SHI_XIAN 元氏县
ADDR_CODE_YUAN_SHI_XIAN AddrCode = "1229"
// ADDR_CODE_ZAN_HUANG_XIAN 赞皇县
ADDR_CODE_ZAN_HUANG_XIAN AddrCode = "1231"
// ADDR_CODE_PING_SHAN_XIAN 平山县
ADDR_CODE_PING_SHAN_XIAN AddrCode = "1232"
// ADDR_CODE_LING_SHOU_XIAN 灵寿县
ADDR_CODE_LING_SHOU_XIAN AddrCode = "1233"
// ADDR_CODE_XING_TANG_XIAN 行唐县
ADDR_CODE_XING_TANG_XIAN AddrCode = "1234"
// ADDR_CODE_TANG_SHAN_SHI 唐山市
ADDR_CODE_TANG_SHAN_SHI AddrCode = "1240"
// ADDR_CODE_LU_NAN_QU 路南区
ADDR_CODE_LU_NAN_QU AddrCode = "1241"
// ADDR_CODE_LU_BEI_QU 路北区
ADDR_CODE_LU_BEI_QU AddrCode = "1242"
// ADDR_CODE_LUAN_ZHOU_SHI 滦州市
ADDR_CODE_LUAN_ZHOU_SHI AddrCode = "1243"
// ADDR_CODE_LUAN_NAN_XIAN 滦南县
ADDR_CODE_LUAN_NAN_XIAN AddrCode = "1244"
// ADDR_CODE_LE_TING_XIAN 乐亭县
ADDR_CODE_LE_TING_XIAN AddrCode = "1245"
// ADDR_CODE_QIAN_AN_SHI 迁安市
ADDR_CODE_QIAN_AN_SHI AddrCode = "1246"
// ADDR_CODE_QIAN_XI_XIAN 迁西县
ADDR_CODE_QIAN_XI_XIAN AddrCode = "1247"
// ADDR_CODE_ZUN_HUA_SHI 遵化市
ADDR_CODE_ZUN_HUA_SHI AddrCode = "1248"
// ADDR_CODE_YU_TIAN_XIAN 玉田县
ADDR_CODE_YU_TIAN_XIAN AddrCode = "1249"
// ADDR_CODE_FENG_NAN_QU 丰南区
ADDR_CODE_FENG_NAN_QU AddrCode = "1251"
// ADDR_CODE_GU_YE_QU 古冶区
ADDR_CODE_GU_YE_QU AddrCode = "1252"
// ADDR_CODE_KAI_PING_QU 开平区
ADDR_CODE_KAI_PING_QU AddrCode = "1253"
// ADDR_CODE_FENG_RUN_QU 丰润区
ADDR_CODE_FENG_RUN_QU AddrCode = "1254"
// ADDR_CODE_CAO_FEI_DIAN_QU 曹妃甸区
ADDR_CODE_CAO_FEI_DIAN_QU AddrCode = "1255"
// ADDR_CODE_QIN_HUANG_DAO_SHI 秦皇岛市
ADDR_CODE_QIN_HUANG_DAO_SHI AddrCode = "1260"
// ADDR_CODE_QING_LONG_MAN_ZU_ZI_ZHI_XIAN 青龙满族自治县
ADDR_CODE_QING_LONG_MAN_ZU_ZI_ZHI_XIAN AddrCode = "1261"
// ADDR_CODE_CHANG_LI_XIAN 昌黎县
ADDR_CODE_CHANG_LI_XIAN AddrCode = "1262"
// ADDR_CODE_FU_NING_QU 抚宁区
ADDR_CODE_FU_NING_QU AddrCode = "1263"
// ADDR_CODE_LU_LONG_XIAN 卢龙县
ADDR_CODE_LU_LONG_XIAN AddrCode = "1264"
// ADDR_CODE_HAI_GANG_QU 海港区
ADDR_CODE_HAI_GANG_QU AddrCode = "1265"
// ADDR_CODE_SHAN_HAI_GU_QU 山海关区
ADDR_CODE_SHAN_HAI_GU_QU AddrCode = "1266"
// ADDR_CODE_BEI_DAI_HE_QU 北戴河区
ADDR_CODE_BEI_DAI_HE_QU AddrCode = "1267"
// ADDR_CODE_HAN_DAN_SHI 邯郸市
ADDR_CODE_HAN_DAN_SHI AddrCode = "1270"
// ADDR_CODE_HAN_DAN_XIAN 邯郸县
ADDR_CODE_HAN_DAN_XIAN AddrCode = "1271"
// ADDR_CODE_HAN_SHAN_QU 邯山区
ADDR_CODE_HAN_SHAN_QU AddrCode = "1272"
// ADDR_CODE_CONG_TAI_QU 丛台区
ADDR_CODE_CONG_TAI_QU AddrCode = "1273"
// ADDR_CODE_FU_XING_QU 复兴区
ADDR_CODE_FU_XING_QU AddrCode = "1274"
// ADDR_CODE_FENG_FENG_KUANG_QU 峰峰矿区
ADDR_CODE_FENG_FENG_KUANG_QU AddrCode = "1275"
// ADDR_CODE_DA_MING_XIAN 大名县
ADDR_CODE_DA_MING_XIAN AddrCode = "1281"
// ADDR_CODE_HAN_DAN_SHI_WEI_XIAN 魏县
ADDR_CODE_HAN_DAN_SHI_WEI_XIAN AddrCode = "1282"
// ADDR_CODE_QU_ZHOU_XIAN 曲周县
ADDR_CODE_QU_ZHOU_XIAN AddrCode = "1283"
// ADDR_CODE_QIU_XIAN 邱县
ADDR_CODE_QIU_XIAN AddrCode = "1284"
// ADDR_CODE_JI_ZE_XIAN 鸡泽县
ADDR_CODE_JI_ZE_XIAN AddrCode = "1285"
// ADDR_CODE_FEI_XIANG_QU 肥乡区
ADDR_CODE_FEI_XIANG_QU AddrCode = "1286"
// ADDR_CODE_GUANG_PING_XIAN 广平县
ADDR_CODE_GUANG_PING_XIAN AddrCode = "1287"
// ADDR_CODE_CHENG_AN_XIAN 成安县
ADDR_CODE_CHENG_AN_XIAN AddrCode = "1288"
// ADDR_CODE_LIN_ZHANG_XIAN 临漳县
ADDR_CODE_LIN_ZHANG_XIAN AddrCode = "1289"
// ADDR_CODE_CI_XIAN 磁县
ADDR_CODE_CI_XIAN AddrCode = "1291"
// ADDR_CODE_SHE_XIAN 涉县
ADDR_CODE_SHE_XIAN AddrCode = "1292"
// ADDR_CODE_YONG_NIAN_QU 永年区
ADDR_CODE_YONG_NIAN_QU AddrCode = "1293"
// ADDR_CODE_GUAN_TAO_XIAN 馆陶县
ADDR_CODE_GUAN_TAO_XIAN AddrCode = "1294"
// ADDR_CODE_WU_AN_SHI 武安市
ADDR_CODE_WU_AN_SHI AddrCode = "1295"
// ADDR_CODE_XING_TAI_SHI 邢台市
ADDR_CODE_XING_TAI_SHI AddrCode = "1310"
// ADDR_CODE_XING_TAI_XIAN 邢台县
ADDR_CODE_XING_TAI_XIAN AddrCode = "1311"
// ADDR_CODE_XIANG_DOU_QU 襄都区
ADDR_CODE_XIANG_DOU_QU AddrCode = "1312"
// ADDR_CODE_XIN_DU_QU 信都区
ADDR_CODE_XIN_DU_QU AddrCode = "1313"
// ADDR_CODE_NAN_GONG_SHI 南宫市
ADDR_CODE_NAN_GONG_SHI AddrCode = "1321"
// ADDR_CODE_SHA_HE_SHI 沙河市
ADDR_CODE_SHA_HE_SHI AddrCode = "1322"
// ADDR_CODE_LIN_CHENG_XIAN 临城县
ADDR_CODE_LIN_CHENG_XIAN AddrCode = "1323"
// ADDR_CODE_NEI_QIU_XIAN 内丘县
ADDR_CODE_NEI_QIU_XIAN AddrCode = "1324"
// ADDR_CODE_BAI_XIANG_XIAN 柏乡县
ADDR_CODE_BAI_XIANG_XIAN AddrCode = "1325"
// ADDR_CODE_LONG_YAO_XIAN 隆尧县
ADDR_CODE_LONG_YAO_XIAN AddrCode = "1326"
// ADDR_CODE_REN_ZE_QU 任泽区
ADDR_CODE_REN_ZE_QU AddrCode = "1327"
// ADDR_CODE_NAN_HE_QU 南和区
ADDR_CODE_NAN_HE_QU AddrCode = "1328"
// ADDR_CODE_NING_JIN_XIAN 宁晋县
ADDR_CODE_NING_JIN_XIAN AddrCode = "1329"
// ADDR_CODE_JU_LU_XIAN 巨鹿县
ADDR_CODE_JU_LU_XIAN AddrCode = "1331"
// ADDR_CODE_XIN_HE_XIAN 新河县
ADDR_CODE_XIN_HE_XIAN AddrCode = "1332"
// ADDR_CODE_GUANG_ZONG_XIAN 广宗县
ADDR_CODE_GUANG_ZONG_XIAN AddrCode = "1333"
// ADDR_CODE_PING_XIANG_XIAN 平乡县
ADDR_CODE_PING_XIANG_XIAN AddrCode = "1334"
// ADDR_CODE_WEI_XIAN 威县
ADDR_CODE_XING_TAI_SHI_WEI_XIAN AddrCode = "1335"
// ADDR_CODE_QING_HE_XIAN 清河县
ADDR_CODE_QING_HE_XIAN AddrCode = "1336"
// ADDR_CODE_SHA_HE_SHI_LIN_XI_XIAN 临西县
ADDR_CODE_SHA_HE_SHI_LIN_XI_XIAN AddrCode = "1337"
// ADDR_CODE_BAO_DING_SHI 保定市
ADDR_CODE_BAO_DING_SHI AddrCode = "1340"
// ADDR_CODE_MAN_CHENG_QU 满城区
ADDR_CODE_MAN_CHENG_QU AddrCode = "1341"
// ADDR_CODE_QING_YUAN_QU 清苑区
ADDR_CODE_QING_YUAN_QU AddrCode = "1342"
// ADDR_CODE_JING_XIU_QU 竞秀区
ADDR_CODE_JING_XIU_QU AddrCode = "1343"
// ADDR_CODE_LIAN_CHI_QU 莲池区
ADDR_CODE_LIAN_CHI_QU AddrCode = "1344"
// ADDR_CODE_DING_ZHOU_SHI 定州市
ADDR_CODE_DING_ZHOU_SHI AddrCode = "1351"
// ADDR_CODE_ZHUO_ZHOU_SHI 涿州市
ADDR_CODE_ZHUO_ZHOU_SHI AddrCode = "1352"
// ADDR_CODE_YI_XIAN 易县
ADDR_CODE_YI_XIAN AddrCode = "1353"
// ADDR_CODE_XU_SHUI_QU 徐水区
ADDR_CODE_XU_SHUI_QU AddrCode = "1354"
// ADDR_CODE_LAI_YUAN_XIAN 涞源县
ADDR_CODE_LAI_YUAN_XIAN AddrCode = "1355"
// ADDR_CODE_DING_XING_XIAN 定兴县
ADDR_CODE_DING_XING_XIAN AddrCode = "1356"
// ADDR_CODE_SHUN_PING_XIAN 顺平县
ADDR_CODE_SHUN_PING_XIAN AddrCode = "1357"
// ADDR_CODE_TANG_XIAN 唐县
ADDR_CODE_TANG_XIAN AddrCode = "1358"
// ADDR_CODE_WANG_DU_XIAN 望都县
ADDR_CODE_WANG_DU_XIAN AddrCode = "1359"
// ADDR_CODE_LAI_SHUI_XIAN 涞水县
ADDR_CODE_LAI_SHUI_XIAN AddrCode = "1361"
// ADDR_CODE_GAO_YANG_XIAN 高阳县
ADDR_CODE_GAO_YANG_XIAN AddrCode = "1362"
// ADDR_CODE_AN_XIN_XIAN 安新县
ADDR_CODE_AN_XIN_XIAN AddrCode = "1363"
// ADDR_CODE_XIONG_XIAN 雄县
ADDR_CODE_XIONG_XIAN AddrCode = "1364"
// ADDR_CODE_RONG_CHENG_XIAN 容城县
ADDR_CODE_RONG_CHENG_XIAN AddrCode = "1365"
// ADDR_CODE_GAO_BEI_DIAN_SHI 高碑店市
ADDR_CODE_GAO_BEI_DIAN_SHI AddrCode = "1366"
// ADDR_CODE_QU_YANG_XIAN 曲阳县
ADDR_CODE_QU_YANG_XIAN AddrCode = "1367"
// ADDR_CODE_FU_PING_XIAN 阜平县
ADDR_CODE_FU_PING_XIAN AddrCode = "1368"
// ADDR_CODE_AN_GUO_SHI 安国市
ADDR_CODE_AN_GUO_SHI AddrCode = "1369"
// ADDR_CODE_BO_YE_XIAN 博野县
ADDR_CODE_BO_YE_XIAN AddrCode = "1371"
// ADDR_CODE_LI_XIAN 蠡县
ADDR_CODE_LI_XIAN AddrCode = "1372"
// ADDR_CODE_ZHANG_JIA_KOU_SHI 张家口市
ADDR_CODE_ZHANG_JIA_KOU_SHI AddrCode = "1380"
// ADDR_CODE_XUAN_HUA_XIAN 宣化县
ADDR_CODE_XUAN_HUA_XIAN AddrCode = "1381"
// ADDR_CODE_QIAO_DONG_QU 桥东区
ADDR_CODE_QIAO_DONG_QU AddrCode = "1382"
// ADDR_CODE_JIA_KOU_SHI_QIAO_XI_QU 桥西区
ADDR_CODE_JIA_KOU_SHI_QIAO_XI_QU AddrCode = "1383"
// ADDR_CODE_XUAN_HUA_QU 宣化区
ADDR_CODE_XUAN_HUA_QU AddrCode = "1384"
// ADDR_CODE_XIA_HUA_YUAN_QU 下花园区
ADDR_CODE_XIA_HUA_YUAN_QU AddrCode = "1385"
// ADDR_CODE_ZHANG_BEI_XIAN 张北县
ADDR_CODE_ZHANG_BEI_XIAN AddrCode = "1391"
// ADDR_CODE_KANG_BAO_XIAN 康保县
ADDR_CODE_KANG_BAO_XIAN AddrCode = "1392"
// ADDR_CODE_GU_YUAN_XIAN 沽源县
ADDR_CODE_GU_YUAN_XIAN AddrCode = "1393"
// ADDR_CODE_SHANG_YI_XIAN 尚义县
ADDR_CODE_SHANG_YI_XIAN AddrCode = "1394"
// ADDR_CODE_ZHANG_JIA_KOU_SHI_YU_XIAN 蔚县
ADDR_CODE_ZHANG_JIA_KOU_SHI_YU_XIAN AddrCode = "1395"
// ADDR_CODE_YANG_YUAN_XIAN 阳原县
ADDR_CODE_YANG_YUAN_XIAN AddrCode = "1396"
// ADDR_CODE_HUAI_AN_XIAN 怀安县
ADDR_CODE_HUAI_AN_XIAN AddrCode = "1397"
// ADDR_CODE_WAN_QUAN_QU 万全区
ADDR_CODE_WAN_QUAN_QU AddrCode = "1398"
// ADDR_CODE_HUAI_LAI_XIAN 怀来县
ADDR_CODE_HUAI_LAI_XIAN AddrCode = "1399"
// ADDR_CODE_ZHUO_LU_XIAN 涿鹿县
ADDR_CODE_ZHUO_LU_XIAN AddrCode = "1401"
// ADDR_CODE_CHI_CHENG_XIAN 赤城县
ADDR_CODE_CHI_CHENG_XIAN AddrCode = "1402"
// ADDR_CODE_CHONG_LI_QU 崇礼区
ADDR_CODE_CHONG_LI_QU AddrCode = "1403"
// ADDR_CODE_CHENG_DE_SHI 承德市
ADDR_CODE_CHENG_DE_SHI AddrCode = "1410"
// ADDR_CODE_CHENG_DE_XIAN 承德县
ADDR_CODE_CHENG_DE_XIAN AddrCode = "1411"
// ADDR_CODE_SHUANG_LUAN_QU 双滦区
ADDR_CODE_SHUANG_LUAN_QU AddrCode = "1413"
// ADDR_CODE_YING_SHOU_YING_ZI_KUANG_QU 鹰手营子矿区
ADDR_CODE_YING_SHOU_YING_ZI_KUANG_QU AddrCode = "1414"
// ADDR_CODE_KUAN_CHENG_MAN_ZU_ZI_ZHI_XIAN 宽城满族自治县
ADDR_CODE_KUAN_CHENG_MAN_ZU_ZI_ZHI_XIAN AddrCode = "1421"
// ADDR_CODE_XING_LONG_XIAN 兴隆县
ADDR_CODE_XING_LONG_XIAN AddrCode = "1422"
// ADDR_CODE_PING_QUAN_SHI 平泉市
ADDR_CODE_PING_QUAN_SHI AddrCode = "1423"
// ADDR_CODE_LUAN_PING_XIAN 滦平县
ADDR_CODE_LUAN_PING_XIAN AddrCode = "1424"
// ADDR_CODE_FENG_NING_MAN_ZU_ZI_ZHI_XIAN 丰宁满族自治县
ADDR_CODE_FENG_NING_MAN_ZU_ZI_ZHI_XIAN AddrCode = "1425"
// ADDR_CODE_LONG_HUA_XIAN 隆化县
ADDR_CODE_LONG_HUA_XIAN AddrCode = "1426"
// ADDR_CODE_WEI_CHANG_MAN_ZU_MENG_GU_ZU_ZI_ZHI_XIAN 围场满族蒙古族自治县
ADDR_CODE_WEI_CHANG_MAN_ZU_MENG_GU_ZU_ZI_ZHI_XIAN AddrCode = "1427"
// ADDR_CODE_CANG_ZHOU_SHI 沧州市
ADDR_CODE_CANG_ZHOU_SHI AddrCode = "1430"
// ADDR_CODE_CANG_XIAN 沧县
ADDR_CODE_CANG_XIAN AddrCode = "1431"
// ADDR_CODE_QING_XIAN 青县
ADDR_CODE_QING_XIAN AddrCode = "1432"
// ADDR_CODE_XIN_HUA_QU_TWO 新华区
ADDR_CODE_XIN_HUA_QU_TWO AddrCode = "1433"
// ADDR_CODE_PO_TOU_SHI 泊头市
ADDR_CODE_PO_TOU_SHI AddrCode = "1441"
// ADDR_CODE_REN_QIU_SHI 任丘市
ADDR_CODE_REN_QIU_SHI AddrCode = "1442"
// ADDR_CODE_HE_JIAN_SHI 河间市
ADDR_CODE_HE_JIAN_SHI AddrCode = "1443"
// ADDR_CODE_SU_NING_XIAN 肃宁县
ADDR_CODE_SU_NING_XIAN AddrCode = "1444"
// ADDR_CODE_XIAN_XIAN 献县
ADDR_CODE_XIAN_XIAN AddrCode = "1445"
// ADDR_CODE_WU_QIAO_XIAN 吴桥县
ADDR_CODE_WU_QIAO_XIAN AddrCode = "1446"
// ADDR_CODE_DONG_GUANG_XIAN 东光县
ADDR_CODE_DONG_GUANG_XIAN AddrCode = "1447"
// ADDR_CODE_NAN_PI_XIAN 南皮县
ADDR_CODE_NAN_PI_XIAN AddrCode = "1448"
// ADDR_CODE_YAN_SHAN_XIAN 盐山县
ADDR_CODE_YAN_SHAN_XIAN AddrCode = "1449"
// ADDR_CODE_HUANG_HUA_SHI 黄骅市
ADDR_CODE_HUANG_HUA_SHI AddrCode = "1451"
// ADDR_CODE_MENG_CUN_HUI_ZU_ZI_ZHI_XIAN 孟村回族自治县
ADDR_CODE_MENG_CUN_HUI_ZU_ZI_ZHI_XIAN AddrCode = "1452"
// ADDR_CODE_HAI_XING_XIAN 海兴县
ADDR_CODE_HAI_XING_XIAN AddrCode = "1453"
// ADDR_CODE_YUN_HE_QU 运河区
ADDR_CODE_YUN_HE_QU AddrCode = "1454"
// ADDR_CODE_LANG_FANG_SHI 廊坊市
ADDR_CODE_LANG_FANG_SHI AddrCode = "1460"
// ADDR_CODE_SAN_HE_SHI 三河市
ADDR_CODE_SAN_HE_SHI AddrCode = "1461"
// ADDR_CODE_GU_AN_XIAN 固安县
ADDR_CODE_GU_AN_XIAN AddrCode = "1462"
// ADDR_CODE_YONG_QING_XIAN 永清县
ADDR_CODE_YONG_QING_XIAN AddrCode = "1463"
// ADDR_CODE_XIANG_HE_XIAN 香河县
ADDR_CODE_XIANG_HE_XIAN AddrCode = "1464"
// ADDR_CODE_DA_CHENG_XIAN 大城县
ADDR_CODE_DA_CHENG_XIAN AddrCode = "1465"
// ADDR_CODE_WEN_AN_XIAN 文安县
ADDR_CODE_WEN_AN_XIAN AddrCode = "1466"
// ADDR_CODE_BA_ZHOU_SHI 霸州市
ADDR_CODE_BA_ZHOU_SHI AddrCode = "1467"
// ADDR_CODE_DA_CHANG_HUI_ZU_ZI_ZHI_XIAN 大厂回族自治县
ADDR_CODE_DA_CHANG_HUI_ZU_ZI_ZHI_XIAN AddrCode = "1468"
// ADDR_CODE_AN_CI_QU 安次区
ADDR_CODE_AN_CI_QU AddrCode = "1469"
// ADDR_CODE_GUANG_YANG_QU 广阳区
ADDR_CODE_GUANG_YANG_QU AddrCode = "1471"
// ADDR_CODE_HENG_SHUI_SHI 衡水市
ADDR_CODE_HENG_SHUI_SHI AddrCode = "1480"
// ADDR_CODE_JI_ZHOU_QU_TWO 冀州区
ADDR_CODE_JI_ZHOU_QU_TOW AddrCode = "1482"
// ADDR_CODE_ZAO_QIANG_XIAN 枣强县
ADDR_CODE_ZAO_QIANG_XIAN AddrCode = "1483"
// ADDR_CODE_WU_YI_XIAN 武邑县
ADDR_CODE_WU_YI_XIAN AddrCode = "1484"
// ADDR_CODE_SHEN_ZHOU_SHI 深州市
ADDR_CODE_SHEN_ZHOU_SHI AddrCode = "1485"
// ADDR_CODE_WU_QIANG_XIAN 武强县
ADDR_CODE_WU_QIANG_XIAN AddrCode = "1486"
// ADDR_CODE_RAO_YANG_XIAN 饶阳县
ADDR_CODE_RAO_YANG_XIAN AddrCode = "1487"
// ADDR_CODE_AN_PING_XIAN 安平县
ADDR_CODE_AN_PING_XIAN AddrCode = "1488"
// ADDR_CODE_GU_CHENG_XIAN 故城县
ADDR_CODE_GU_CHENG_XIAN AddrCode = "1489"
// ADDR_CODE_JING_XIAN 景县
ADDR_CODE_JING_XIAN AddrCode = "1491"
// ADDR_CODE_FU_CHENG_XIAN 阜城县
ADDR_CODE_FU_CHENG_XIAN AddrCode = "1492"
// ADDR_CODE_SHAN_XI_SHENG 山西省
ADDR_CODE_SHAN_XI_SHENG AddrCode = "1600"
// ADDR_CODE_TAI_YUAN_SHI 太原市
ADDR_CODE_TAI_YUAN_SHI AddrCode = "1610"
// ADDR_CODE_QING_XU_XIAN 清徐县
ADDR_CODE_QING_XU_XIAN AddrCode = "1611"
// ADDR_CODE_YANG_QU_XIAN 阳曲县
ADDR_CODE_YANG_QU_XIAN AddrCode = "1612"
// ADDR_CODE_LOU_FAN_XIAN 娄烦县
ADDR_CODE_LOU_FAN_XIAN AddrCode = "1613"
// ADDR_CODE_GU_JIAO_SHI 古交市
ADDR_CODE_GU_JIAO_SHI AddrCode = "1614"
// ADDR_CODE_JIAN_CAO_PING_QU 尖草坪区
ADDR_CODE_JIAN_CAO_PING_QU AddrCode = "1615"
// ADDR_CODE_XIAO_DIAN_QU 小店区
ADDR_CODE_XIAO_DIAN_QU AddrCode = "1616"
// ADDR_CODE_YING_ZE_QU 迎泽区
ADDR_CODE_YING_ZE_QU AddrCode = "1617"
// ADDR_CODE_XING_HUA_LING_QU 杏花岭区
ADDR_CODE_XING_HUA_LING_QU AddrCode = "1618"
// ADDR_CODE_WAN_BAI_LIN_QU 万柏林区
ADDR_CODE_WAN_BAI_LIN_QU AddrCode = "1619"
// ADDR_CODE_DA_TONG_SHI 大同市
ADDR_CODE_DA_TONG_SHI AddrCode = "1620"
// ADDR_CODE_JIN_YUAN_QU 晋源区
ADDR_CODE_JIN_YUAN_QU AddrCode = "1621"
// ADDR_CODE_YANG_GAO_XIAN 阳高县
ADDR_CODE_YANG_GAO_XIAN AddrCode = "1631"
// ADDR_CODE_TIAN_ZHEN_XIAN 天镇县
ADDR_CODE_TIAN_ZHEN_XIAN AddrCode = "1632"
// ADDR_CODE_GUANG_LING_XIAN 广灵县
ADDR_CODE_GUANG_LING_XIAN AddrCode = "1633"
// ADDR_CODE_LING_QIU_XIAN 灵丘县
ADDR_CODE_LING_QIU_XIAN AddrCode = "1634"
// ADDR_CODE_HUN_YUAN_XIAN 浑源县
ADDR_CODE_HUN_YUAN_XIAN AddrCode = "1635"
// ADDR_CODE_ZUO_YUN_XIAN 左云县
ADDR_CODE_ZUO_YUN_XIAN AddrCode = "1637"
// ADDR_CODE_NAN_JIAO_QU 南郊区
ADDR_CODE_NAN_JIAO_QU AddrCode = "1638"
// ADDR_CODE_YUN_ZHOU_QU 云州区
ADDR_CODE_YUN_ZHOU_QU AddrCode = "1639"
// ADDR_CODE_PING_CHENG_QU 平城区
ADDR_CODE_PING_CHENG_QU AddrCode = "1641"
// ADDR_CODE_YUN_GANG_QU 云冈区
ADDR_CODE_YUN_GANG_QU AddrCode = "1642"
// ADDR_CODE_XIN_RONG_QU 新荣区
ADDR_CODE_XIN_RONG_QU AddrCode = "1643"
// ADDR_CODE_YANG_QUAN_SHI 阳泉市
ADDR_CODE_YANG_QUAN_SHI AddrCode = "1650"
// ADDR_CODE_PING_DING_XIAN 平定县
ADDR_CODE_PING_DING_XIAN AddrCode = "1651"
// ADDR_CODE_YU_XIAN_TWO 盂县
ADDR_CODE_YU_XIAN_TWO AddrCode = "1652"
// ADDR_CODE_CHENG_QU 城区
ADDR_CODE_YU_XIAN_TWO_CHENG_QU AddrCode = "1653"
// ADDR_CODE_YU_XIAN_TWO_KUANG_QU 矿区
ADDR_CODE_YU_XIAN_TWO_KUANG_QU AddrCode = "1654"
// ADDR_CODE_JIAO_QU 郊区
ADDR_CODE_YU_XIAN_TWO_JIAO_QU AddrCode = "1655"
// ADDR_CODE_CHANG_ZHI_SHI 长治市
ADDR_CODE_CHANG_ZHI_SHI AddrCode = "1660"
// ADDR_CODE_SHANG_DANG_QU 上党区
ADDR_CODE_SHANG_DANG_QU AddrCode = "1661"
// ADDR_CODE_LU_CHENG_QU 潞城区
ADDR_CODE_LU_CHENG_QU AddrCode = "1662"
// ADDR_CODE_XIANG_YUAN_XIAN 襄垣县
ADDR_CODE_XIANG_YUAN_XIAN AddrCode = "1663"
// ADDR_CODE_TUN_LIU_QU 屯留区
ADDR_CODE_TUN_LIU_QU AddrCode = "1664"
// ADDR_CODE_PIN_SHUN_XIAN 平顺县
ADDR_CODE_PIN_SHUN_XIAN AddrCode = "1665"
// ADDR_CODE_LI_CHENG_XIAN 黎城县
ADDR_CODE_LI_CHENG_XIAN AddrCode = "1666"
// ADDR_CODE_HU_GUAN_XIAN 壶关县
ADDR_CODE_HU_GUAN_XIAN AddrCode = "1667"
// ADDR_CODE_ZHANG_ZI_XIAN 长子县
ADDR_CODE_ZHANG_ZI_XIAN AddrCode = "1668"
// ADDR_CODE_WU_XIANG_XIAN 武乡县
ADDR_CODE_WU_XIANG_XIAN AddrCode = "1669"
// ADDR_CODE_QIN_XIAN 沁县
ADDR_CODE_QIN_XIAN AddrCode = "1671"
// ADDR_CODE_QIN_YUAN_XIAN 沁源县
ADDR_CODE_QIN_YUAN_XIAN AddrCode = "1672"
// ADDR_CODE_LU_ZHOU_QU 潞州区
ADDR_CODE_LU_ZHOU_QU AddrCode = "1673"
// ADDR_CODE_JIAO_QU 郊区
ADDR_CODE_JIAO_QU AddrCode = "1674"
// ADDR_CODE_JIN_CHENG_SHI 晋城市
ADDR_CODE_JIN_CHENG_SHI AddrCode = "1680"
// ADDR_CODE_QIN_SHUI_XIAN 沁水县
ADDR_CODE_QIN_SHUI_XIAN AddrCode = "1681"
// ADDR_CODE_YANG_CHENG_XIAN 阳城县
ADDR_CODE_YANG_CHENG_XIAN AddrCode = "1682"
// ADDR_CODE_GAO_PING_SHI 高平市
ADDR_CODE_GAO_PING_SHI AddrCode = "1683"
// ADDR_CODE_LING_CHUAN_XIAN 陵川县
ADDR_CODE_LING_CHUAN_XIAN AddrCode = "1684"
// ADDR_CODE_ZE_ZHOU_XIAN 泽州县
ADDR_CODE_ZE_ZHOU_XIAN AddrCode = "1685"
// ADDR_CODE_CHENG_QU 城区
ADDR_CODE_CHENG_QU AddrCode = "1686"
// ADDR_CODE_SHUO_ZHOU_SHI 朔州市
ADDR_CODE_SHUO_ZHOU_SHI AddrCode = "1690"
// ADDR_CODE_SHAN_YIN_XIAN 山阴县
ADDR_CODE_SHAN_YIN_XIAN AddrCode = "1691"
// ADDR_CODE_YING_XIAN 应县
ADDR_CODE_YING_XIAN AddrCode = "1692"
// ADDR_CODE_YOU_YU_XIAN 右玉县
ADDR_CODE_YOU_YU_XIAN AddrCode = "1693"
// ADDR_CODE_HUAI_REN_SHI 怀仁市
ADDR_CODE_HUAI_REN_SHI AddrCode = "1694"
// ADDR_CODE_SHUO_CHENG_QU 朔城区
ADDR_CODE_SHUO_CHENG_QU AddrCode = "1695"
// ADDR_CODE_PING_LU_QU 平鲁区
ADDR_CODE_PING_LU_QU AddrCode = "1696"
// ADDR_CODE_XIN_ZHOU_SHI 忻州市
ADDR_CODE_XIN_ZHOU_SHI AddrCode = "1710"
// ADDR_CODE_DING_XIANG_XIAN 定襄县
ADDR_CODE_DING_XIANG_XIAN AddrCode = "1712"
// ADDR_CODE_WU_TAI_XIAN 五台县
ADDR_CODE_WU_TAI_XIAN AddrCode = "1713"
// ADDR_CODE_YUAN_PING_SHI 原平市
ADDR_CODE_YUAN_PING_SHI AddrCode = "1714"
// ADDR_CODE_DAI_XIAN 代县
ADDR_CODE_DAI_XIAN AddrCode = "1715"
// ADDR_CODE_FAN_SHI_XIAN 繁峙县
ADDR_CODE_FAN_SHI_XIAN AddrCode = "1716"
// ADDR_CODE_NING_WU_XIAN 宁武县
ADDR_CODE_NING_WU_XIAN AddrCode = "1717"
// ADDR_CODE_JING_LE_XIAN 静乐县
ADDR_CODE_JING_LE_XIAN AddrCode = "1718"
// ADDR_CODE_SHEN_CHI_XIAN 神池县
ADDR_CODE_SHEN_CHI_XIAN AddrCode = "1719"
// ADDR_CODE_WU_ZHAI_XIAN 五寨县
ADDR_CODE_WU_ZHAI_XIAN AddrCode = "1721"
// ADDR_CODE_KE_LAN_XIAN 岢岚县
ADDR_CODE_KE_LAN_XIAN AddrCode = "1722"
// ADDR_CODE_HE_QU_XIAN 河曲县
ADDR_CODE_HE_QU_XIAN AddrCode = "1723"
// ADDR_CODE_BAO_DE_XIAN 保德县
ADDR_CODE_BAO_DE_XIAN AddrCode = "1724"
// ADDR_CODE_PIAN_GUAN_XIAN 偏关县
ADDR_CODE_PIAN_GUAN_XIAN AddrCode = "1725"
// ADDR_CODE_XIN_FU_QU 忻府区
ADDR_CODE_XIN_FU_QU AddrCode = "1726"
// ADDR_CODE_LV_LIANG_SHI 吕梁市
ADDR_CODE_LV_LIANG_SHI AddrCode = "1730"
// ADDR_CODE_FEN_YANG_SHI 汾阳市
ADDR_CODE_FEN_YANG_SHI AddrCode = "1731"
// ADDR_CODE_WEN_SHUI_XIAN 文水县
ADDR_CODE_WEN_SHUI_XIAN AddrCode = "1732"
// ADDR_CODE_JIAO_CHENG_XIAN 交城县
ADDR_CODE_JIAO_CHENG_XIAN AddrCode = "1733"
// ADDR_CODE_XIAO_YI_SHI 孝义市
ADDR_CODE_XIAO_YI_SHI AddrCode = "1734"
// ADDR_CODE_XING_XIAN 兴县
ADDR_CODE_XING_XIAN AddrCode = "1735"
// ADDR_CODE_LIN_XIAN 临县
ADDR_CODE_LIN_XIAN AddrCode = "1736"
// ADDR_CODE_LIU_LIN_XIAN 柳林县
ADDR_CODE_LIU_LIN_XIAN AddrCode = "1737"
// ADDR_CODE_SHI_LOU_XIAN 石楼县
ADDR_CODE_SHI_LOU_XIAN AddrCode = "1738"
// ADDR_CODE_LAN_XIAN 岚县
ADDR_CODE_LAN_XIAN AddrCode = "1739"
// ADDR_CODE_FANG_SHAN_XIAN 方山县
ADDR_CODE_FANG_SHAN_XIAN AddrCode = "1741"
// ADDR_CODE_ZHONG_YANG_XIAN 中阳县
ADDR_CODE_ZHONG_YANG_XIAN AddrCode = "1743"
// ADDR_CODE_JIAO_KOU_XIAN 交口县
ADDR_CODE_JIAO_KOU_XIAN AddrCode = "1744"
// ADDR_CODE_LI_SHI_QU 离石区
ADDR_CODE_LI_SHI_QU AddrCode = "1745"
// ADDR_CODE_JIN_ZHONG_SHI 晋中市
ADDR_CODE_JIN_ZHONG_SHI AddrCode = "1750"
// ADDR_CODE_YU_CI_QU 榆次区
ADDR_CODE_YU_CI_QU AddrCode = "1751"
// ADDR_CODE_YU_SHE_XIAN 榆社县
ADDR_CODE_YU_SHE_XIAN AddrCode = "1752"
// ADDR_CODE_ZUO_QUAN_XIAN 左权县
ADDR_CODE_ZUO_QUAN_XIAN AddrCode = "1753"
// ADDR_CODE_HE_SHUN_XIAN 和顺县
ADDR_CODE_HE_SHUN_XIAN AddrCode = "1754"
// ADDR_CODE_XI_YANG_XIAN 昔阳县
ADDR_CODE_XI_YANG_XIAN AddrCode = "1755"
// ADDR_CODE_SHOU_YANG_XIAN 寿阳县
ADDR_CODE_SHOU_YANG_XIAN AddrCode = "1756"
// ADDR_CODE_TAI_GU_QU 太谷区
ADDR_CODE_TAI_GU_QU AddrCode = "1757"
// ADDR_CODE_QI_XIAN 祁县
ADDR_CODE_QI_XIAN AddrCode = "1758"
// ADDR_CODE_PING_YAO_XIAN 平遥县
ADDR_CODE_PING_YAO_XIAN AddrCode = "1759"
// ADDR_CODE_JIE_XIU_SHI 介休市
ADDR_CODE_JIE_XIU_SHI AddrCode = "1761"
// ADDR_CODE_LING_SHI_XIAN 灵石县
ADDR_CODE_LING_SHI_XIAN AddrCode = "1762"
// ADDR_CODE_LIN_FEN_SHI 临汾市
ADDR_CODE_LIN_FEN_SHI AddrCode = "1770"
// ADDR_CODE_YAO_DU_QU 尧都区
ADDR_CODE_YAO_DU_QU AddrCode = "1771"
// ADDR_CODE_HOU_MA_SHI 侯马市
ADDR_CODE_HOU_MA_SHI AddrCode = "1772"
// ADDR_CODE_QU_WO_XIAN 曲沃县
ADDR_CODE_QU_WO_XIAN AddrCode = "1773"
// ADDR_CODE_YI_CHENG_XIAN 翼城县
ADDR_CODE_YI_CHENG_XIAN AddrCode = "1774"
// ADDR_CODE_XIANG_FEN_XIAN 襄汾县
ADDR_CODE_XIANG_FEN_XIAN AddrCode = "1775"
// ADDR_CODE_HONG_TONG_XIAN 洪洞县
ADDR_CODE_HONG_TONG_XIAN AddrCode = "1776"
// ADDR_CODE_HUO_ZHOU_SHI 霍州市
ADDR_CODE_HUO_ZHOU_SHI AddrCode = "1777"
// ADDR_CODE_GU_XIAN 古县
ADDR_CODE_GU_XIAN AddrCode = "1778"
// ADDR_CODE_AN_ZE_XIAN 安泽县
ADDR_CODE_AN_ZE_XIAN AddrCode = "1779"
// ADDR_CODE_FU_SHAN_XIAN 浮山县
ADDR_CODE_FU_SHAN_XIAN AddrCode = "1781"
// ADDR_CODE_JI_XIAN 吉县
ADDR_CODE_JI_XIAN AddrCode = "1782"
// ADDR_CODE_XIANG_NING_XIAN 乡宁县
ADDR_CODE_XIANG_NING_XIAN AddrCode = "1783"
// ADDR_CODE_PU_XIAN 蒲县
ADDR_CODE_PU_XIAN AddrCode = "1784"
// ADDR_CODE_DA_NING_XIAN 大宁县
ADDR_CODE_DA_NING_XIAN AddrCode = "1785"
// ADDR_CODE_YONG_HE_XIAN 永和县
ADDR_CODE_YONG_HE_XIAN AddrCode = "1786"
// ADDR_CODE_XI_XIAN 隰县
ADDR_CODE_XI_XIAN AddrCode = "1787"
// ADDR_CODE_FEN_XI_XIAN 汾西县
ADDR_CODE_FEN_XI_XIAN AddrCode = "1788"
// ADDR_CODE_YUN_CHENG_SHI 运城市
ADDR_CODE_YUN_CHENG_SHI AddrCode = "1810"
// ADDR_CODE_YAN_HU_QU 盐湖区
ADDR_CODE_YAN_HU_QU AddrCode = "1811"
// ADDR_CODE_YONG_JI_SHI 永济市
ADDR_CODE_YONG_JI_SHI AddrCode = "1812"
// ADDR_CODE_RUI_CHENG_XIAN 芮城县
ADDR_CODE_RUI_CHENG_XIAN AddrCode = "1813"
// ADDR_CODE_LIN_YI_XIAN 临猗县
ADDR_CODE_LIN_YI_XIAN AddrCode = "1814"
// ADDR_CODE_WAN_RONG_XIAN 万荣县
ADDR_CODE_WAN_RONG_XIAN AddrCode = "1815"
// ADDR_CODE_XIN_JIANG_XIAN 新绛县
ADDR_CODE_XIN_JIANG_XIAN AddrCode = "1816"
// ADDR_CODE_JI_SHAN_XIAN 稷山县
ADDR_CODE_JI_SHAN_XIAN AddrCode = "1817"
// ADDR_CODE_HE_JIN_SHI 河津市
ADDR_CODE_HE_JIN_SHI AddrCode = "1818"
// ADDR_CODE_WEN_XI_XIAN 闻喜县
ADDR_CODE_WEN_XI_XIAN AddrCode = "1819"
// ADDR_CODE_XIA_XIAN 夏县
ADDR_CODE_XIA_XIAN AddrCode = "1821"
// ADDR_CODE_JIANG_XIAN 绛县
ADDR_CODE_JIANG_XIAN AddrCode = "1822"
// ADDR_CODE_PING_LU_XIAN 平陆县
ADDR_CODE_PING_LU_XIAN AddrCode = "1823"
// ADDR_CODE_YUAN_QU_XIAN 垣曲县
ADDR_CODE_YUAN_QU_XIAN AddrCode = "1824"
// ADDR_CODE_NEI_MENG_GU_ZI_ZHI_QU 内蒙古自治区
ADDR_CODE_NEI_MENG_GU_ZI_ZHI_QU AddrCode = "1900"
// ADDR_CODE_HU_HE_HAO_TE_SHI 呼和浩特市
ADDR_CODE_HU_HE_HAO_TE_SHI AddrCode = "1910"
// ADDR_CODE_TU_MO_TE_ZUO_QI 土默特左旗
ADDR_CODE_TU_MO_TE_ZUO_QI AddrCode = "1911"
// ADDR_CODE_TUO_KE_TUO_XIAN 托克托县
ADDR_CODE_TUO_KE_TUO_XIAN AddrCode = "1912"
// ADDR_CODE_WU_CHUAN_XIAN 武川县
ADDR_CODE_WU_CHUAN_XIAN AddrCode = "1913"
// ADDR_CODE_HE_LIN_GE_ER_XIAN 和林格尔县
ADDR_CODE_HE_LIN_GE_ER_XIAN AddrCode = "1914"
// ADDR_CODE_QING_SHUI_HE_XIAN 清水河县
ADDR_CODE_QING_SHUI_HE_XIAN AddrCode = "1915"
// ADDR_CODE_HUI_MIN_QU 回民区
ADDR_CODE_HUI_MIN_QU AddrCode = "1916"
// ADDR_CODE_RU_YI_KAI_FA_QU 如意开发区
ADDR_CODE_RU_YI_KAI_FA_QU AddrCode = "1917"
// ADDR_CODE_SAI_HAN_QU 赛罕区
ADDR_CODE_SAI_HAN_QU AddrCode = "1918"
// ADDR_CODE_XIN_CHENG_QU 新城区
ADDR_CODE_XIN_CHENG_QU AddrCode = "1919"
// ADDR_CODE_BAO_TOU_SHI 包头市
ADDR_CODE_BAO_TOU_SHI AddrCode = "1920"
// ADDR_CODE_TU_MO_TE_YOU_QI 土默特右旗
ADDR_CODE_TU_MO_TE_YOU_QI AddrCode = "1921"
// ADDR_CODE_GU_YANG_XIAN 固阳县
ADDR_CODE_GU_YANG_XIAN AddrCode = "1922"
// ADDR_CODE_DA_ER_HAN_MAO_MING_AN_LIAN_HE_QI 达尔罕茂明安联合旗
ADDR_CODE_DA_ER_HAN_MAO_MING_AN_LIAN_HE_QI AddrCode = "1923"
// ADDR_CODE_DONG_HE_QU 东河区
ADDR_CODE_DONG_HE_QU AddrCode = "1924"
// ADDR_CODE_KUN_DOU_LUN_QU 昆都仑区
ADDR_CODE_KUN_DOU_LUN_QU AddrCode = "1925"
// ADDR_CODE_QING_SHAN_QU 青山区
ADDR_CODE_QING_SHAN_QU AddrCode = "1926"
// ADDR_CODE_SHI_GUAI_QU 石拐区
ADDR_CODE_SHI_GUAI_QU AddrCode = "1927"
// ADDR_CODE_BAI_YUN_E_BO_KUANG_QU 白云鄂博矿区
ADDR_CODE_BAI_YUN_E_BO_KUANG_QU AddrCode = "1928"
// ADDR_CODE_JIU_YUAN_QU 九原区
ADDR_CODE_JIU_YUAN_QU AddrCode = "1929"
// ADDR_CODE_WU_HAI_SHI 乌海市
ADDR_CODE_WU_HAI_SHI AddrCode = "1930"
// ADDR_CODE_HAI_BO_WAN_QU 海勃湾区
ADDR_CODE_HAI_BO_WAN_QU AddrCode = "1931"
// ADDR_CODE_HAI_NAN_QU 海南区
ADDR_CODE_HAI_NAN_QU AddrCode = "1932"
// ADDR_CODE_WU_DA_QU 乌达区
ADDR_CODE_WU_DA_QU AddrCode = "1933"
// ADDR_CODE_CHI_FENG_SHI 赤峰市
ADDR_CODE_CHI_FENG_SHI AddrCode = "1940"
// ADDR_CODE_A_LU_KE_ER_QIN_QI 阿鲁科尔沁旗
ADDR_CODE_A_LU_KE_ER_QIN_QI AddrCode = "1941"
// ADDR_CODE_BA_LIN_ZUO_QI 巴林左旗
ADDR_CODE_BA_LIN_ZUO_QI AddrCode = "1942"
// ADDR_CODE_BA_LIN_YOU_QI 巴林右旗
ADDR_CODE_BA_LIN_YOU_QI AddrCode = "1943"
// ADDR_CODE_LIN_XI_XIAN_TWO 林西县
ADDR_CODE_LIN_XI_XIAN_TWO AddrCode = "1944"
// ADDR_CODE_KE_SHI_KE_TENG_QI 克什克腾旗
ADDR_CODE_KE_SHI_KE_TENG_QI AddrCode = "1945"
// ADDR_CODE_WENG_NIU_TE_QI 翁牛特旗
ADDR_CODE_WENG_NIU_TE_QI AddrCode = "1946"
// ADDR_CODE_KA_LA_QIN_QI 喀喇沁旗
ADDR_CODE_KA_LA_QIN_QI AddrCode = "1947"
// ADDR_CODE_NING_CHENG_XIAN 宁城县
ADDR_CODE_NING_CHENG_XIAN AddrCode = "1948"
// ADDR_CODE_AO_HAN_QI 敖汉旗
ADDR_CODE_AO_HAN_QI AddrCode = "1949"
// ADDR_CODE_HONG_SHAN_QU 红山区
ADDR_CODE_HONG_SHAN_QU AddrCode = "1951"
// ADDR_CODE_YUAN_BAO_SHAN_QU 元宝山区
ADDR_CODE_YUAN_BAO_SHAN_QU AddrCode = "1952"
// ADDR_CODE_SONG_SHAN_QU 松山区
ADDR_CODE_SONG_SHAN_QU AddrCode = "1953"
// ADDR_CODE_HU_LUN_BEIER_SHI 呼伦贝尔市
ADDR_CODE_HU_LUN_BEIER_SHI AddrCode = "1960"
// ADDR_CODE_HAI_LA_ER_QU 海拉尔区
ADDR_CODE_HAI_LA_ER_QU AddrCode = "1961"
// ADDR_CODE_MAN_ZHOU_LI_SHI 满洲里市
ADDR_CODE_MAN_ZHOU_LI_SHI AddrCode = "1962"
// ADDR_CODE_ZHA_LAN_TUN_SHI 扎兰屯市
ADDR_CODE_ZHA_LAN_TUN_SHI AddrCode = "1963"
// ADDR_CODE_YA_KE_SHI_SHI 牙克石市
ADDR_CODE_YA_KE_SHI_SHI AddrCode = "1964"
// ADDR_CODE_ER_LUN_CHUN_ZU_ZI_ZHI_QI 额尔古纳市
ADDR_CODE_ER_LUN_CHUN_ZU_ZI_ZHI_QI AddrCode = "1965"
)
// Pre 将AddrCode枚举转换为字符串
func (ac AddrCode) Pre() string {
return string(ac)
}

View File

@ -1,42 +0,0 @@
package consts
type ECType string
const (
ECType001 ECType = "EC001" // EC001 : 特约商户支付服务合作协议V3.1(商户入网)
ECType002 ECType = "EC002" // EC002 : 特约商户支付服务合作协议V3.2(商户入网+分账)
ECType003 ECType = "EC003" // EC003 : 分账结算授权委托书
ECType004 ECType = "EC004" // EC004 : 特约商户支付服务合作协议V3.3(商户入网)
ECType005 ECType = "EC005" // EC005 : 特约商户支付服务合作协议V3.3(商户入网+分账)
ECType007 ECType = "EC007" // EC007 : 特约商户支付服务合作协议V4.1 + 结算授权委托书 (商户入网 + 分账 )
ECType008 ECType = "EC008" // EC008 : 特约商户支付服务合作协议V4.1 (商户入网)
ECType009 ECType = "EC009" // EC009 : 结算授权委托书
)
func (e ECType) Ptr() string {
return string(e)
}
type CertType string
const (
CertType_RESIDENT_ID CertType = "RESIDENT_ID" // RESIDENT_ID身份证)
CertType_PASSPORT CertType = "PASSPORT" // PASSPORT护照
CertType_HK_MACAO_PASS CertType = "HK_MACAO_PASS" // HK_MACAO_PASS港澳居民往来内地通行证
CertType_TAIWAN_PASS CertType = "TAIWAN_PASS" // TAIWAN_PASS台湾居民来往大陆通行证
)
func (c CertType) Ptr() string {
return string(c)
}
type AgentTag int
const (
AgentTag0 AgentTag = iota // 0不启用 缺省
AgentTag1 // 1: 启用
)
func (a AgentTag) Ptr() int {
return int(a)
}

View File

@ -1,67 +0,0 @@
package consts
type AccountType string
const (
ACCOUNT_TYPE_WECHAT AccountType = "WECHAT" // 微信
ACCOUNT_TYPE_ALIPAY AccountType = "ALIPAY" // 支付宝
ACCOUNT_TYPE_UQRCODEPAY AccountType = "UQRCODEPAY" // 银联
ACCOUNT_TYPE_BASTPAY AccountType = "BASTPAY" // 翼支付
ACCOUNT_TYPE_SUNING AccountType = "SUNING" // 苏宁
ACCOUNT_TYPE_LKLACC AccountType = "LKLACC" // 拉卡拉支付账户
ACCOUNT_TYPE_NUCSPAY AccountType = "NUCSPAY" // 网联小钱包
ACCOUNT_TYPE_JD AccountType = "JD"
)
func (at AccountType) Ptr() string {
return string(at)
}
type TransType string
const (
TRANS_TYPE_NATIVE TransType = "41" // NATIVEALIPAY, 云闪付支持, 京东白条分期)
TRANS_TYPE_JSAPI TransType = "51" // JSAPI微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期)
TRANS_TYPE_WECHATPAY TransType = "71" // 微信小程序支付
TRANS_TYPE_APP TransType = "61" // APP支付微信APP支付String(2)
)
func (tt TransType) Ptr() string {
return string(tt)
}
type SettleType string
const (
SETTLE_TYPE_NORMAL SettleType = "0" // 常规结算
SETTLE_TYPE_SPECIAL SettleType = "1" // 拉卡拉分账通结算
)
func (st SettleType) Ptr() string {
return string(st)
}
type RefundAccMode string
// 00退货账户余额 05商户余额 06终端余额 30终点账户
const (
REFUND_ACC_MODE_USER_BALANCE RefundAccMode = "00" // 退货账户余额
REFUND_ACC_MODE_MERCHANT_BALANCE RefundAccMode = "05" // 商户余额
REFUND_ACC_MODE_TERMINAL_BALANCE RefundAccMode = "06" // 终端余额
REFUND_ACC_MODE_ACCOUNT RefundAccMode = "30" // 终点账户
)
func (rat RefundAccMode) Ptr() string {
return string(rat)
}
type RefundAmtSts string
const (
REFUND_AMT_STS_NORMAL RefundAmtSts = "00" // 分账前
REFUND_AMT_STS_SPLIT RefundAmtSts = "01" // 分账后
)
func (ras RefundAmtSts) Ptr() string {
return string(ras)
}

View File

@ -1,249 +0,0 @@
// Package consts 提供常量定义
package consts
// Mcc 商户类别代码枚举
type Mcc string
const (
// MCC_0742 兽医服务
MCC_0742 Mcc = "0742"
// MCC_0763 农业合作
MCC_0763 Mcc = "0763"
// MCC_0780 景观美化及园艺服务
MCC_0780 Mcc = "0780"
// MCC_1520 一般承包商-住宅与商业楼
MCC_1520 Mcc = "1520"
// MCC_4011 铁路运输
MCC_4011 Mcc = "4011"
// MCC_4111 本市和市郊通勤旅客运输(包括轮渡)
MCC_4111 Mcc = "4111"
// MCC_4112 铁路客运
MCC_4112 Mcc = "4112"
// MCC_4119 救护车服务
MCC_4119 Mcc = "4119"
// MCC_4121 出租车服务
MCC_4121 Mcc = "4121"
// MCC_4131 公路客运
MCC_4131 Mcc = "4131"
// MCC_4214 货物搬运和托运—当地和长途,移动和存储公司,以及当地递送服务
MCC_4214 Mcc = "4214"
// MCC_4215 快递服务(空运、地面运输或海运)
MCC_4215 Mcc = "4215"
// MCC_4225 公共仓储服务-农产品、冷冻品和家用产品
MCC_4225 Mcc = "4225"
// MCC_4411 轮船及巡游航线服务
MCC_4411 Mcc = "4411"
// MCC_4457 出租船只
MCC_4457 Mcc = "4457"
// MCC_4468 船舶、海运服务提供商
MCC_4468 Mcc = "4468"
// MCC_4511 航空公司
MCC_4511 Mcc = "4511"
// MCC_4582 机场服务
MCC_4582 Mcc = "4582"
// MCC_4722 旅行社
MCC_4722 Mcc = "4722"
// MCC_4733 大型景区售票
MCC_4733 Mcc = "4733"
// MCC_4784 路桥通行费
MCC_4784 Mcc = "4784"
// MCC_4789 未列入其他代码的运输服务
MCC_4789 Mcc = "4789"
// MCC_4812 通讯设备和电话销售
MCC_4812 Mcc = "4812"
// MCC_4814 电信服务,包括本地和长途电话、信用卡电话、磁卡电话和传真
MCC_4814 Mcc = "4814"
// MCC_4816 计算机网络/信息服务
MCC_4816 Mcc = "4816"
// MCC_4821 电报服务
MCC_4821 Mcc = "4821"
// MCC_4899 有线和其他付费电视服务
MCC_4899 Mcc = "4899"
// MCC_4900 公共事业(电力、煤气、自来水、清洁服务)
MCC_4900 Mcc = "4900"
// MCC_5094 贵重珠宝、首饰,钟表零售
MCC_5094 Mcc = "5094"
// MCC_5211 木材和各类建材卖场
MCC_5211 Mcc = "5211"
// MCC_5231 玻璃、油漆涂料、墙纸零售
MCC_5231 Mcc = "5231"
// MCC_5251 五金商店
MCC_5251 Mcc = "5251"
// MCC_5261 草坪、花园用品商店
MCC_5261 Mcc = "5261"
// MCC_5309 免税商店
MCC_5309 Mcc = "5309"
// MCC_5310 折扣商店
MCC_5310 Mcc = "5310"
// MCC_5311 百货商店
MCC_5311 Mcc = "5311"
// MCC_5331 各类杂货店、便利店
MCC_5331 Mcc = "5331"
// MCC_5399 其他综合零售
MCC_5399 Mcc = "5399"
// MCC_5411 大型仓储式超级市场
MCC_5411 Mcc = "5411"
// MCC_5422 各类肉类零售商
MCC_5422 Mcc = "5422"
// MCC_5441 糖果及坚果商店
MCC_5441 Mcc = "5441"
// MCC_5451 乳制品店、冷饮店
MCC_5451 Mcc = "5451"
// MCC_5462 面包房、糕点商店
MCC_5462 Mcc = "5462"
// MCC_5499 各类食品店及专门食品零售店
MCC_5499 Mcc = "5499"
// MCC_5511 汽车货车经销商-新旧车的销售、服务、维修、零件及出租
MCC_5511 Mcc = "5511"
// MCC_5521 汽车货车经销商-专门从事旧车的销售、服务、维修、零件及出租
MCC_5521 Mcc = "5521"
// MCC_5532 汽车轮胎经销商
MCC_5532 Mcc = "5532"
// MCC_5533 汽车零配件商店
MCC_5533 Mcc = "5533"
// MCC_5541 加油站、服务站
MCC_5541 Mcc = "5541"
// MCC_5542 自助加油站
MCC_5542 Mcc = "5542"
// MCC_5551 船只销售商
MCC_5551 Mcc = "5551"
// MCC_5561 旅行拖车、娱乐用车销售商
MCC_5561 Mcc = "5561"
// MCC_5571 摩托车商店和经销商
MCC_5571 Mcc = "5571"
// MCC_5592 露营、房车销售商
MCC_5592 Mcc = "5592"
// MCC_5598 雪车商
MCC_5598 Mcc = "5598"
// MCC_5599 汽车、飞行器、农用机车综合经营商
MCC_5599 Mcc = "5599"
// MCC_5611 男子和男童服装及用品商店
MCC_5611 Mcc = "5611"
// MCC_5621 妇女成衣商店
MCC_5621 Mcc = "5621"
// MCC_5631 女性用品商店
MCC_5631 Mcc = "5631"
// MCC_5641 婴儿、儿童服装店
MCC_5641 Mcc = "5641"
// MCC_5651 家庭服装商店
MCC_5651 Mcc = "5651"
// MCC_5655 运动服饰商店
MCC_5655 Mcc = "5655"
// MCC_5661 鞋店
MCC_5661 Mcc = "5661"
// MCC_5681 皮货店
MCC_5681 Mcc = "5681"
// MCC_5722 家用电器商店
MCC_5722 Mcc = "5722"
// MCC_5811 包办伙食,宴会承包商
MCC_5811 Mcc = "5811"
// MCC_5812 就餐场所和餐馆
MCC_5812 Mcc = "5812"
// MCC_5813 饮酒场所(酒吧、酒馆、夜总会、鸡尾酒大厅、迪斯科舞厅)
MCC_5813 Mcc = "5813"
// MCC_5932 古玩店——出售、维修及还原
MCC_5932 Mcc = "5932"
// MCC_5933 典当、拍卖、信托
MCC_5933 Mcc = "5933"
// MCC_5937 古玩复制店
MCC_5937 Mcc = "5937"
// MCC_5944 银器店
MCC_5944 Mcc = "5944"
// MCC_5950 玻璃器皿和水晶饰品店
MCC_5950 Mcc = "5950"
// MCC_5960 直销-保险直销
MCC_5960 Mcc = "5960"
// MCC_5970 工艺美术商店
MCC_5970 Mcc = "5970"
// MCC_5971 艺术商和画廊
MCC_5971 Mcc = "5971"
// MCC_5994 报亭、报摊
MCC_5994 Mcc = "5994"
// MCC_5998 其他批发商
MCC_5998 Mcc = "5998"
// MCC_6012 金融机构-商品和服务
MCC_6012 Mcc = "6012"
// MCC_6300 保险销售、保险业和保险金
MCC_6300 Mcc = "6300"
// MCC_7011 住宿服务(旅馆、酒店、汽车旅馆、度假村等)
MCC_7011 Mcc = "7011"
// MCC_7012 分时使用的别墅或度假用房
MCC_7012 Mcc = "7012"
// MCC_7013 不动产代理——房地产经纪
MCC_7013 Mcc = "7013"
// MCC_7032 运动和娱乐露营地
MCC_7032 Mcc = "7032"
// MCC_7033 活动房车场及露营场所
MCC_7033 Mcc = "7033"
// MCC_7297 按摩店
MCC_7297 Mcc = "7297"
// MCC_7298 保健及美容SPA
MCC_7298 Mcc = "7298"
// MCC_7523 停车场
MCC_7523 Mcc = "7523"
// MCC_7631 手表、钟表和首饰维修店
MCC_7631 Mcc = "7631"
// MCC_7829 电影和录像创作、发行
MCC_7829 Mcc = "7829"
// MCC_7911 歌舞厅
MCC_7911 Mcc = "7911"
// MCC_7922 戏剧制片(不含电影)、演出和票务
MCC_7922 Mcc = "7922"
// MCC_7929 未列入其他代码的乐队、文艺表演
MCC_7929 Mcc = "7929"
// MCC_7932 台球、撞球场所
MCC_7932 Mcc = "7932"
// MCC_7933 保龄球馆
MCC_7933 Mcc = "7933"
// MCC_7941 商业体育场馆、职业体育俱乐部、运动场和体育推广公司
MCC_7941 Mcc = "7941"
// MCC_7992 公共高尔夫球场
MCC_7992 Mcc = "7992"
// MCC_7994 大型游戏机和游戏场所
MCC_7994 Mcc = "7994"
// MCC_7996 游乐园、马戏团、嘉年华、占卜
MCC_7996 Mcc = "7996"
// MCC_7997 会员俱乐部(体育、娱乐、运动等)、乡村俱乐部以及私人高尔夫课程班
MCC_7997 Mcc = "7997"
// MCC_7998 水族馆、海洋馆和海豚馆
MCC_7998 Mcc = "7998"
// MCC_7999 未列入其他代码的娱乐服务
MCC_7999 Mcc = "7999"
// MCC_8062 公立医院
MCC_8062 Mcc = "8062"
// MCC_8211 中小学校(公立)
MCC_8211 Mcc = "8211"
// MCC_8220 普通高校(公立)
MCC_8220 Mcc = "8220"
// MCC_8398 慈善和社会公益服务组织
MCC_8398 Mcc = "8398"
// MCC_8651 政治组织(政府机构)
MCC_8651 Mcc = "8651"
// MCC_9211 法庭费用,包括赡养费和子女抚养费
MCC_9211 Mcc = "9211"
// MCC_9222 罚款
MCC_9222 Mcc = "9222"
// MCC_9223 保释金
MCC_9223 Mcc = "9223"
// MCC_9311 纳税
MCC_9311 Mcc = "9311"
// MCC_9399 未列入其他代码的政府服务(社会保障服务,国家强制)
MCC_9399 Mcc = "9399"
// MCC_9400 使领馆收费
MCC_9400 Mcc = "9400"
// MCC_9402 国家邮政服务
MCC_9402 Mcc = "9402"
// MCC_3998 中国人民共和国铁道部
MCC_3998 Mcc = "3998"
// MCC_BIG_7299 其他个人服务 包括干洗店,育发,植发,保洁、保安、婚庆、殡葬、家政、清洁、保养、门卫服务,出租衣物服务
MCC_BIG_7299 Mcc = "7299"
// MCC_BIG_7399 商业服务 无明细分类的其它服务
MCC_BIG_7399 Mcc = "7399"
// MCC_BIG_8999 其他专业服务 包括拍卖行、法律服务、会计审计财务服务、公关服务的企业,建筑设计、工程和测量服务等从事专业服务的企业
MCC_BIG_8999 Mcc = "8999"
)
// Pre 将Mcc枚举转换为字符串
func (m Mcc) Pre() string {
return string(m)
}

View File

@ -1,347 +0,0 @@
package consts
// AccIdType 证件类型枚举
type AccIdType string
const (
// ACC_ID_TYPE_ID_CARD 身份证
ACC_ID_TYPE_ID_CARD AccIdType = "01"
// ACC_ID_TYPE_PASSPORT 护照
ACC_ID_TYPE_PASSPORT AccIdType = "02"
// ACC_ID_TYPE_HK_MO_PASS 港澳通行证
ACC_ID_TYPE_HK_MO_PASS AccIdType = "03"
// ACC_ID_TYPE_TAIWAN_PASS 台胞证
ACC_ID_TYPE_TAIWAN_PASS AccIdType = "04"
// ACC_ID_TYPE_FOREIGN_PERMANENT_RESIDENCE 外国人永久居留身份证
ACC_ID_TYPE_FOREIGN_PERMANENT_RESIDENCE AccIdType = "10"
// ACC_ID_TYPE_HK_MO_RESIDENCE 港澳居民居住证
ACC_ID_TYPE_HK_MO_RESIDENCE AccIdType = "11"
// ACC_ID_TYPE_TAIWAN_RESIDENCE 台湾居民居住证
ACC_ID_TYPE_TAIWAN_RESIDENCE AccIdType = "12"
// ACC_ID_TYPE_EXECUTIVE_PARTNER 执行事务合伙人
ACC_ID_TYPE_EXECUTIVE_PARTNER AccIdType = "13"
// ACC_ID_TYPE_OTHER 其它证件
ACC_ID_TYPE_OTHER AccIdType = "99"
)
// Pre 将AccIdType枚举转换为字符串
func (ait AccIdType) Pre() string {
return string(ait)
}
// SettlePeriod 结算周期枚举
type SettlePeriod string
const (
// SETTLE_PERIOD_T_PLUS_1 T+1结算
SETTLE_PERIOD_T_PLUS_1 SettlePeriod = "T+1"
// SETTLE_PERIOD_T_PLUS_1_PLUS_N T+1普通结算批次
SETTLE_PERIOD_T_PLUS_1_PLUS_N SettlePeriod = "T+1+N"
// SETTLE_PERIOD_T_PLUS_3 收单T+3结算
SETTLE_PERIOD_T_PLUS_3 SettlePeriod = "T+3"
// SETTLE_PERIOD_D_PLUS_1_PLUS_N D+1普通结算批次
SETTLE_PERIOD_D_PLUS_1_PLUS_N SettlePeriod = "D+1+N"
// SETTLE_PERIOD_W_T_PLUS_9999 喔噻T+9999
SETTLE_PERIOD_W_T_PLUS_9999 SettlePeriod = "W_T+9999"
// SETTLE_PERIOD_D_PLUS_1 收单D+1结算批次
SETTLE_PERIOD_D_PLUS_1 SettlePeriod = "D+1"
// SETTLE_PERIOD_D1_PLUS_24 D1+24结算批次
SETTLE_PERIOD_D1_PLUS_24 SettlePeriod = "D1+24"
// SETTLE_PERIOD_D_PLUS_30 收单D+30结算
SETTLE_PERIOD_D_PLUS_30 SettlePeriod = "D+30"
// SETTLE_PERIOD_BT_D_PLUS_1 D+1四方补贴结算批次
SETTLE_PERIOD_BT_D_PLUS_1 SettlePeriod = "BT_D+1"
// SETTLE_PERIOD_QZT_FULL_D_PLUS_1 钱账通D+1全额结算批次
SETTLE_PERIOD_QZT_FULL_D_PLUS_1 SettlePeriod = "QZT_FULL_D+1"
// SETTLE_PERIOD_QZT_NET_D_PLUS_1 钱账通D+1净额结算批次
SETTLE_PERIOD_QZT_NET_D_PLUS_1 SettlePeriod = "QZT_NET_D+1"
// SETTLE_PERIOD_FS 灵活结算
SETTLE_PERIOD_FS SettlePeriod = "FS"
)
// Pre 将SettlePeriod枚举转换为字符串
func (sp SettlePeriod) Pre() string {
return string(sp)
}
// ClearDt 日切时间枚举
type ClearDt string
const (
// CLEAR_DT_ZERO 0点
CLEAR_DT_ZERO ClearDt = "ZERO"
// CLEAR_DT_ONE 1点
CLEAR_DT_ONE ClearDt = "ONE"
// CLEAR_DT_TWO 2点
CLEAR_DT_TWO ClearDt = "TWO"
// CLEAR_DT_THREE 3点
CLEAR_DT_THREE ClearDt = "THREE"
// CLEAR_DT_FOUR 4点
CLEAR_DT_FOUR ClearDt = "FOUR"
// CLEAR_DT_FIVE 5点
CLEAR_DT_FIVE ClearDt = "FIVE"
// CLEAR_DT_SIX 6点
CLEAR_DT_SIX ClearDt = "SIX"
// CLEAR_DT_SEVEN 7点
CLEAR_DT_SEVEN ClearDt = "SEVEN"
// CLEAR_DT_EIGHT 8点
CLEAR_DT_EIGHT ClearDt = "EIGHT"
// CLEAR_DT_NINE 9点
CLEAR_DT_NINE ClearDt = "NINE"
// CLEAR_DT_TEN 10点
CLEAR_DT_TEN ClearDt = "TEN"
// CLEAR_DT_ELEVEN 11点
CLEAR_DT_ELEVEN ClearDt = "ELEVEN"
// CLEAR_DT_TWELVE 12点
CLEAR_DT_TWELVE ClearDt = "TWELVE"
// CLEAR_DT_THIRTEEN 13点
CLEAR_DT_THIRTEEN ClearDt = "THIRTEEN"
// CLEAR_DT_FOURTEEN 14点
CLEAR_DT_FOURTEEN ClearDt = "FOURTEEN"
// CLEAR_DT_FIFTEEN 15点
CLEAR_DT_FIFTEEN ClearDt = "FIFTEEN"
// CLEAR_DT_SIXTEEN 16点
CLEAR_DT_SIXTEEN ClearDt = "SIXTEEN"
// CLEAR_DT_SEVENTEEN 17点
CLEAR_DT_SEVENTEEN ClearDt = "SEVENTEEN"
// CLEAR_DT_EIGHTEEN 18点
CLEAR_DT_EIGHTEEN ClearDt = "EIGHTEEN"
// CLEAR_DT_NINETEEN 19点
CLEAR_DT_NINETEEN ClearDt = "NINETEEN"
// CLEAR_DT_TWENTY 20点
CLEAR_DT_TWENTY ClearDt = "TWENTY"
// CLEAR_DT_TWENTY_ONE 21点
CLEAR_DT_TWENTY_ONE ClearDt = "TWENTY_ONE"
// CLEAR_DT_TWENTY_TWO 22点
CLEAR_DT_TWENTY_TWO ClearDt = "TWENTY_TWO"
// CLEAR_DT_TWENTY_THREE 23点
CLEAR_DT_TWENTY_THREE ClearDt = "TWENTY_THREE"
// CLEAR_DT_TWENTY_FOUR 24点
CLEAR_DT_TWENTY_FOUR ClearDt = "TWENTY_FOUR"
)
// Pre 将ClearDt枚举转换为字符串
func (cd ClearDt) Pre() string {
return string(cd)
}
// MerBusiContent 经营内容枚举
type MerBusiContent string
const (
// MER_BUSI_CONTENT_RESTAURANT_HOTEL 餐饮、宾馆、娱乐、珠宝金饰、工艺美术品
MER_BUSI_CONTENT_RESTAURANT_HOTEL MerBusiContent = "640"
// MER_BUSI_CONTENT_REAL_ESTATE_AUTO 房地产汽车类
MER_BUSI_CONTENT_REAL_ESTATE_AUTO MerBusiContent = "641"
// MER_BUSI_CONTENT_DEPARTMENT_AGENCY 百货、中介、培训、景区门票等
MER_BUSI_CONTENT_DEPARTMENT_AGENCY MerBusiContent = "642"
// MER_BUSI_CONTENT_WHOLESALE 批发类商户
MER_BUSI_CONTENT_WHOLESALE MerBusiContent = "643"
// MER_BUSI_CONTENT_GAS_STATION_SUPERMARKET 加油、超市类
MER_BUSI_CONTENT_GAS_STATION_SUPERMARKET MerBusiContent = "644"
// MER_BUSI_CONTENT_TRANSPORT_TICKET 交通运输售票
MER_BUSI_CONTENT_TRANSPORT_TICKET MerBusiContent = "645"
// MER_BUSI_CONTENT_UTILITY_PAYMENT 水电气缴费
MER_BUSI_CONTENT_UTILITY_PAYMENT MerBusiContent = "646"
// MER_BUSI_CONTENT_GOVERNMENT 政府类
MER_BUSI_CONTENT_GOVERNMENT MerBusiContent = "647"
// MER_BUSI_CONTENT_CONVENIENCE 便民类
MER_BUSI_CONTENT_CONVENIENCE MerBusiContent = "648"
// MER_BUSI_CONTENT_PUBLIC_INSTITUTION 公立医院、公立学校、慈善
MER_BUSI_CONTENT_PUBLIC_INSTITUTION MerBusiContent = "649"
// MER_BUSI_CONTENT_HOTEL_FOOD_ENTERTAINMENT 宾馆餐饮娱乐类
MER_BUSI_CONTENT_HOTEL_FOOD_ENTERTAINMENT MerBusiContent = "650"
// MER_BUSI_CONTENT_PROPERTY_AUTO 房产汽车类
MER_BUSI_CONTENT_PROPERTY_AUTO MerBusiContent = "651"
// MER_BUSI_CONTENT_WHOLESALE_TYPE 批发类
MER_BUSI_CONTENT_WHOLESALE_TYPE MerBusiContent = "652"
// MER_BUSI_CONTENT_SUPERMARKET_GAS 超市加油类
MER_BUSI_CONTENT_SUPERMARKET_GAS MerBusiContent = "653"
// MER_BUSI_CONTENT_GENERAL_MERCHANT 一般类商户
MER_BUSI_CONTENT_GENERAL_MERCHANT MerBusiContent = "654"
// MER_BUSI_CONTENT_AGRICULTURE 三农商户
MER_BUSI_CONTENT_AGRICULTURE MerBusiContent = "655"
)
// Pre 将MerBusiContent枚举转换为字符串
func (mbc MerBusiContent) Pre() string {
return string(mbc)
}
// PosType POS类型枚举
type PosType string
const (
// POS_TYPE_GENERAL_POS 传统POS
POS_TYPE_GENERAL_POS PosType = "GENERAL_POS"
// POS_TYPE_SUPER_POS 智能POS
POS_TYPE_SUPER_POS PosType = "SUPER_POS"
// POS_TYPE_BLUE_WIZARD 蓝精灵
POS_TYPE_BLUE_WIZARD PosType = "BLUE_WIZARD"
// POS_TYPE_WECHAT_PAY 专业化扫码
POS_TYPE_WECHAT_PAY PosType = "WECHAT_PAY"
// POS_TYPE_SQB_SCAN_CODE 收钱吧扫码
POS_TYPE_SQB_SCAN_CODE PosType = "SQB_SCAN_CODE"
// POS_TYPE_SQB_PAPER_CODE 收钱吧码牌
POS_TYPE_SQB_PAPER_CODE PosType = "SQB_PAPER_CODE"
// POS_TYPE_SQB_DESK_CODE 收钱吧桌码
POS_TYPE_SQB_DESK_CODE PosType = "SQB_DESK_CODE"
// POS_TYPE_SQB_POS 收钱吧POS
POS_TYPE_SQB_POS PosType = "SQB_POS"
// POS_TYPE_SQB_INSTALLMENT 收钱吧聚分期
POS_TYPE_SQB_INSTALLMENT PosType = "SQB_INSTALLMENT"
// POS_TYPE_CLOUD_STORE_NEW 新云小店
POS_TYPE_CLOUD_STORE_NEW PosType = "CLOUD_STORE_NEW"
// POS_TYPE_CLOUD_DISTRIBUTION 增商专用云分销
POS_TYPE_CLOUD_DISTRIBUTION PosType = "CLOUD_DISTRIBUTION"
// POS_TYPE_CLOUD_DISTRIBUTION_CB 云分销线上
POS_TYPE_CLOUD_DISTRIBUTION_CB PosType = "CLOUD_DISTRIBUTION_CB"
// POS_TYPE_CLOUD_STORE_CB 云小店线上
POS_TYPE_CLOUD_STORE_CB PosType = "CLOUD_STORE_CB"
// POS_TYPE_CLOUD_STORE_BC 云小店线下
POS_TYPE_CLOUD_STORE_BC PosType = "CLOUD_STORE_BC"
// POS_TYPE_CLOUD_STORE_BC_NOTLKL 云小店非收银机
POS_TYPE_CLOUD_STORE_BC_NOTLKL PosType = "CLOUD_STORE_BC_NOTLKL"
// POS_TYPE_HM 惠码
POS_TYPE_HM PosType = "HM"
// POS_TYPE_HM_CB 惠码线上
POS_TYPE_HM_CB PosType = "HM_CB"
// POS_TYPE_HM_BC 惠码线下
POS_TYPE_HM_BC PosType = "HM_BC"
// POS_TYPE_SCAN_CODE_ORDER 扫码点餐
POS_TYPE_SCAN_CODE_ORDER PosType = "SCAN_CODE_ORDER"
// POS_TYPE_B2B_CASHIER_DESK B2B收银台
POS_TYPE_B2B_CASHIER_DESK PosType = "B2B_CASHIER_DESK"
// POS_TYPE_B2B_QR_CODE B2B收款码
POS_TYPE_B2B_QR_CODE PosType = "B2B_QR_CODE"
// POS_TYPE_MOBILE_POS 手机POS
POS_TYPE_MOBILE_POS PosType = "MOBILE_POS"
// POS_TYPE_YF_YM 御风云码
POS_TYPE_YF_YM PosType = "YF_YM"
// POS_TYPE_YF_YM_CB 御风云码线上
POS_TYPE_YF_YM_CB PosType = "YF_YM_CB"
// POS_TYPE_TRANSFER_ACCOUNT 大额理财
POS_TYPE_TRANSFER_ACCOUNT PosType = "TRANSFER_ACCOUNT"
// POS_TYPE_SUPER_MPOS 超级收款宝
POS_TYPE_SUPER_MPOS PosType = "SUPER_MPOS"
// POS_TYPE_W_BOX 收钱宝盒
POS_TYPE_W_BOX PosType = "W_BOX"
// POS_TYPE_MOON_BOS 月光宝盒
POS_TYPE_MOON_BOS PosType = "MOON_BOS"
// POS_TYPE_SCANNING_GUN_PAY XQ码精灵
POS_TYPE_SCANNING_GUN_PAY PosType = "SCANNING_GUN_PAY"
// POS_TYPE_WIDE_SUPER_POS 智能POS PRO
POS_TYPE_WIDE_SUPER_POS PosType = "WIDE_SUPER_POS"
// POS_TYPE_YUNCHAO_TECH_CB 云超科技线上
POS_TYPE_YUNCHAO_TECH_CB PosType = "YUNCHAO_TECH_CB"
// POS_TYPE_YUNCHAO_TECH_BC 云超科技线下
POS_TYPE_YUNCHAO_TECH_BC PosType = "YUNCHAO_TECH_BC"
// POS_TYPE_HUMMING_BIRD 蜂鸟佳
POS_TYPE_HUMMING_BIRD PosType = "HUMMING_BIRD"
// POS_TYPE_SIMPLE_SPEED_SCRM 简速SCRM
POS_TYPE_SIMPLE_SPEED_SCRM PosType = "SIMPLE_SPEED_SCRM"
// POS_TYPE_SMART_NETWORK 智网
POS_TYPE_SMART_NETWORK PosType = "SMART_NETWORK"
// POS_TYPE_EASY_PAYMENT 缴费易
POS_TYPE_EASY_PAYMENT PosType = "EASY_PAYMENT"
// POS_TYPE_LIANTUO_ELF 联拓小精灵
POS_TYPE_LIANTUO_ELF PosType = "LIANTUO_ELF"
// POS_TYPE_KAOLA_CLOUD_PAY 考拉云付
POS_TYPE_KAOLA_CLOUD_PAY PosType = "KAOLA_CLOUD_PAY"
// POS_TYPE_BUSINESS_CLOUD_PRINT 拉生意云打印
POS_TYPE_BUSINESS_CLOUD_PRINT PosType = "BUSINESS_CLOUD_PRINT"
// POS_TYPE_B2B_CASHIER_DESK_CB B2B收银台线上外卡
POS_TYPE_B2B_CASHIER_DESK_CB PosType = "B2B_CASHIER_DESK_CB"
// POS_TYPE_MOBILE_POS_CB 手机POS线上外卡
POS_TYPE_MOBILE_POS_CB PosType = "MOBILE_POS_CB"
// POS_TYPE_LKL_SCRM 拉卡拉SCRM
POS_TYPE_LKL_SCRM PosType = "LKL_SCRM"
// POS_TYPE_MI_XUN 米讯
POS_TYPE_MI_XUN PosType = "MI_XUN"
// POS_TYPE_YOU_KE_LI_LI 油客里里
POS_TYPE_YOU_KE_LI_LI PosType = "YOU_KE_LI_LI"
// POS_TYPE_LE_YOU_KE 乐友客
POS_TYPE_LE_YOU_KE PosType = "LE_YOU_KE"
// POS_TYPE_EASY_TO_PAY 即易付
POS_TYPE_EASY_TO_PAY PosType = "EASY_TO_PAY"
// POS_TYPE_SMART_YOUKE 智慧油客
POS_TYPE_SMART_YOUKE PosType = "SMART_YOUKE"
// POS_TYPE_MICRO_SUPER_POS 微智能
POS_TYPE_MICRO_SUPER_POS PosType = "MICRO_SUPER_POS"
// POS_TYPE_JI_YI_SHOU 集易收
POS_TYPE_JI_YI_SHOU PosType = "JI_YI_SHOU"
// POS_TYPE_UNIONPAY_APPLET 云微小程序
POS_TYPE_UNIONPAY_APPLET PosType = "UNIONPAY_APPLET"
// POS_TYPE_UNION_INSTALMENT 银联聚分期
POS_TYPE_UNION_INSTALMENT PosType = "UNION_INSTALMENT"
// POS_TYPE_PULL_BUSINESS 拉生意
POS_TYPE_PULL_BUSINESS PosType = "PULL_BUSINESS"
// POS_TYPE_MOSS Moss收银台
POS_TYPE_MOSS PosType = "MOSS"
)
// Pre 将PosType枚举转换为字符串
func (pt PosType) Pre() string {
return string(pt)
}
// FeeRateTypeCode 费率类型枚举
type FeeRateTypeCode string
const (
// FEE_RATE_TYPE_CODE_UNIONPAY_DEBIT 银联借记卡
FEE_RATE_TYPE_CODE_UNIONPAY_DEBIT FeeRateTypeCode = "300"
// FEE_RATE_TYPE_CODE_UNIONPAY_CREDIT 银联贷记卡
FEE_RATE_TYPE_CODE_UNIONPAY_CREDIT FeeRateTypeCode = "301"
// FEE_RATE_TYPE_CODE_WECHAT 微信
FEE_RATE_TYPE_CODE_WECHAT FeeRateTypeCode = "302"
// FEE_RATE_TYPE_CODE_WECHAT_DEBIT 微信借记
FEE_RATE_TYPE_CODE_WECHAT_DEBIT FeeRateTypeCode = "338"
// FEE_RATE_TYPE_CODE_WECHAT_CREDIT 微信贷记
FEE_RATE_TYPE_CODE_WECHAT_CREDIT FeeRateTypeCode = "339"
// FEE_RATE_TYPE_CODE_ALIPAY 支付宝
FEE_RATE_TYPE_CODE_ALIPAY FeeRateTypeCode = "303"
// FEE_RATE_TYPE_CODE_YEEPAY 翼支付
FEE_RATE_TYPE_CODE_YEEPAY FeeRateTypeCode = "306"
// FEE_RATE_TYPE_CODE_UNIONPAY_QR_DEBIT 银联二维码借记卡
FEE_RATE_TYPE_CODE_UNIONPAY_QR_DEBIT FeeRateTypeCode = "314"
// FEE_RATE_TYPE_CODE_UNIONPAY_QR_CREDIT 银联二维码贷记卡
FEE_RATE_TYPE_CODE_UNIONPAY_QR_CREDIT FeeRateTypeCode = "315"
// FEE_RATE_TYPE_CODE_CARDLESS_CREDIT 无卡贷记
FEE_RATE_TYPE_CODE_CARDLESS_CREDIT FeeRateTypeCode = "321"
// FEE_RATE_TYPE_CODE_PAY_ACCOUNT 支付账户
FEE_RATE_TYPE_CODE_PAY_ACCOUNT FeeRateTypeCode = "319"
// FEE_RATE_TYPE_CODE_B2B_TRANSFER B2B转账
FEE_RATE_TYPE_CODE_B2B_TRANSFER FeeRateTypeCode = "322"
// FEE_RATE_TYPE_CODE_WECHAT_ONLINE 微信线上(千米专用)
FEE_RATE_TYPE_CODE_WECHAT_ONLINE FeeRateTypeCode = "400"
// FEE_RATE_TYPE_CODE_ALIPAY_ONLINE 支付宝线上(千米专用)
FEE_RATE_TYPE_CODE_ALIPAY_ONLINE FeeRateTypeCode = "401"
// FEE_RATE_TYPE_CODE_WECHAT_FACE 微信刷脸
FEE_RATE_TYPE_CODE_WECHAT_FACE FeeRateTypeCode = "307"
// FEE_RATE_TYPE_CODE_WECHAT_FACE_DEBIT 微信刷脸借记
FEE_RATE_TYPE_CODE_WECHAT_FACE_DEBIT FeeRateTypeCode = "342"
// FEE_RATE_TYPE_CODE_WECHAT_FACE_CREDIT 微信刷脸贷记
FEE_RATE_TYPE_CODE_WECHAT_FACE_CREDIT FeeRateTypeCode = "343"
// FEE_RATE_TYPE_CODE_ALIPAY_FACE 支付宝刷脸
FEE_RATE_TYPE_CODE_ALIPAY_FACE FeeRateTypeCode = "308"
// FEE_RATE_TYPE_CODE_UNIONPAY_DISCOUNT_DEBIT 云闪付借记-优惠
FEE_RATE_TYPE_CODE_UNIONPAY_DISCOUNT_DEBIT FeeRateTypeCode = "411"
// FEE_RATE_TYPE_CODE_UNIONPAY_DISCOUNT_CREDIT 云闪付贷记-优惠
FEE_RATE_TYPE_CODE_UNIONPAY_DISCOUNT_CREDIT FeeRateTypeCode = "412"
// FEE_RATE_TYPE_CODE_UNIONPAY_QR_DISCOUNT_DEBIT 银联二维码借记-优惠
FEE_RATE_TYPE_CODE_UNIONPAY_QR_DISCOUNT_DEBIT FeeRateTypeCode = "413"
// FEE_RATE_TYPE_CODE_UNIONPAY_QR_DISCOUNT_CREDIT 银联二维码贷记-优惠
FEE_RATE_TYPE_CODE_UNIONPAY_QR_DISCOUNT_CREDIT FeeRateTypeCode = "414"
// FEE_RATE_TYPE_CODE_ALIPAY_DISCOUNT 支付宝费率-优惠
FEE_RATE_TYPE_CODE_ALIPAY_DISCOUNT FeeRateTypeCode = "415"
// FEE_RATE_TYPE_CODE_DIGITAL_CURRENCY 数字货币
FEE_RATE_TYPE_CODE_DIGITAL_CURRENCY FeeRateTypeCode = "318"
// FEE_RATE_TYPE_CODE_JINGDONG 京东
FEE_RATE_TYPE_CODE_JINGDONG FeeRateTypeCode = "346"
)
// Pre 将FeeRateTypeCode枚举转换为字符串
func (frtc FeeRateTypeCode) Pre() string {
return string(frtc)
}

View File

@ -2,7 +2,6 @@ package consts
const ( const (
BASE_URL = "https://s2.lakala.com/api" BASE_URL = "https://s2.lakala.com/api"
BASE_TEST_URL = "https://test.wsmsd.cn/sit/api"
) )
const ( const (
@ -24,10 +23,6 @@ const (
LKL_ACCOUNT_BALANCE_QUERY_URL = "/v2/laep/industry/ewalletBalanceQuery" LKL_ACCOUNT_BALANCE_QUERY_URL = "/v2/laep/industry/ewalletBalanceQuery"
// LKL_ACCOUNT_WITHDRAW_URL 拉卡拉账户提现 // LKL_ACCOUNT_WITHDRAW_URL 拉卡拉账户提现
LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1" LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1"
LKL_SPLIT_LEDGER_FALLBACK_URL = "/v3/sacs/fallback"
)
const (
// LKL_TRADE_QUERY_URL 拉卡拉交易查询 // LKL_TRADE_QUERY_URL 拉卡拉交易查询
LKL_TRADE_QUERY_URL = "/v3/labs/query/tradequery" LKL_TRADE_QUERY_URL = "/v3/labs/query/tradequery"
// LKL_PRE_ORDER_URL 拉卡拉聚合预下单 // LKL_PRE_ORDER_URL 拉卡拉聚合预下单
@ -37,38 +32,3 @@ const (
// LKL_REFOUND_URL 拉卡拉退款 // LKL_REFOUND_URL 拉卡拉退款
LKL_REFOUND_URL = "/v3/rfd/refund_front/refund" LKL_REFOUND_URL = "/v3/rfd/refund_front/refund"
) )
const (
// LKL_ADD_MER 拉卡拉商户进件
LKL_ADD_MER = "/v2/mms/openApi/addMer"
// LKL_QUERY_MER 拉卡拉商户查询
LKL_QUERY_MER = "/v2/mms/openApi/queryContract"
// LKL_MER_VALIDATE 拉卡拉商户进件效验
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"
LKL_QUERY_SUB_MER_INFO_URL = "/v2/mms/openApi/querySubMerInfo"
LKL_MRCH_AUTH_STATE_QUERY_URL = "/v2/mms/sme/mrchAuthStateQuery"
)
// unifiedReturn 统一退货API地址
const (
// LKL_UNIFIED_RETURN_MERGE_REFUND_URL 拉卡拉合单退货
LKL_UNIFIED_RETURN_MERGE_REFUND_URL = "/v3/rfd/refund_front/merge_refund"
// LKL_UNIFIED_RETURN_REFUND_URL 拉卡拉退货
LKL_UNIFIED_RETURN_REFUND_URL = "/v3/rfd/refund_front/refund"
// LKL_UNIFIED_RETURN_REFUND_QUERY_URL 拉卡拉退货查询
LKL_UNIFIED_RETURN_REFUND_QUERY_URL = "/v3/rfd/refund_front/refund_query"
// LKL_UNIFIED_RETURN_REFUND_FEE_URL 拉卡拉退货手续费查询
LKL_UNIFIED_RETURN_REFUND_FEE_URL = "/v3/rfd/refund_front/refund_fee"
)

1
go.mod
View File

@ -20,7 +20,6 @@ require (
github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.9.2 // indirect github.com/go-sql-driver/mysql v1.9.2 // indirect
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.3 // indirect github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.3 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect github.com/gorilla/websocket v1.5.3 // indirect
github.com/grokify/html-strip-tags-go v0.1.0 // indirect github.com/grokify/html-strip-tags-go v0.1.0 // indirect
github.com/magiconair/properties v1.8.10 // indirect github.com/magiconair/properties v1.8.10 // indirect

View File

@ -1,19 +1,19 @@
package lklsdk package lklsdk
import ( import (
"time"
"github.com/black1552/lkl_sdk/consts" "github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
"github.com/gogf/gf/v2/os/gtime"
) )
// AccountService 账户服务 // AccountService 账户服务
type AccountService[T any] struct { type AccountService[T any] struct {
client *common.Client[T] client *Client[T]
} }
// NewAccountService 创建账户服务实例 // NewAccountService 创建账户服务实例
func NewAccountService[T any](client *common.Client[T]) *AccountService[T] { func NewAccountService[T any](client *Client[T]) *AccountService[T] {
return &AccountService[T]{ return &AccountService[T]{
client: client, client: client,
} }
@ -26,31 +26,12 @@ func (a *AccountService[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, er
// 构建BaseModel请求 // 构建BaseModel请求
baseReq := model.BalanceQueryRequest{ baseReq := model.BalanceQueryRequest{
ReqTime: gtime.Now().Format("YmdHis"), ReqTime: time.Now().Format("20060102150405"),
Version: "3.0", Version: "3.0",
ReqData: req, ReqData: req,
} }
// 发送请求 // 发送请求
respBody, err := a.client.DoRequest(url, baseReq) respBody, err := a.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (a *AccountService[T]) BalanceQueryTest(req *model.BalanceQueryReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_ACCOUNT_BALANCE_QUERY_URL
// 构建BaseModel请求
baseReq := model.BalanceQueryRequest{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := a.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -65,32 +46,13 @@ func (a *AccountService[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
// 构建BaseModel请求 // 构建BaseModel请求
baseReq := model.WithdrawRequest{ baseReq := model.WithdrawRequest{
ReqTime: gtime.Now().Format("YmdHis"), ReqTime: time.Now().Format("20060102150405"),
Version: "3.0", Version: "3.0",
ReqData: req, ReqData: req,
} }
// 发送请求 // 发送请求
respBody, err := a.client.DoRequest(url, baseReq) respBody, err := a.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (a *AccountService[T]) WithdrawTest(req *model.WithdrawReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_ACCOUNT_WITHDRAW_URL
// 构建BaseModel请求
baseReq := model.WithdrawRequest{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := a.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,4 +1,4 @@
package common package lklsdk
import ( import (
"context" "context"
@ -8,34 +8,43 @@ import (
"crypto/sha256" "crypto/sha256"
"crypto/x509" "crypto/x509"
"encoding/base64" "encoding/base64"
"encoding/json"
"encoding/pem" "encoding/pem"
"fmt" "fmt"
ran "math/rand" ran "math/rand"
"time" "time"
"github.com/black1552/base-common/utils" "github.com/black1552/base-common/utils"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gfile" "github.com/gogf/gf/v2/os/gfile"
"github.com/gogf/gf/v2/util/gconv"
) )
// Config 拉卡拉SDK配置
type Config struct {
AppID string `json:"app_id"`
TermNo string `json:"term_no"`
MerchantNo string `json:"merchant_no"`
SettleMerNo string `json:"settle_merchant_no"`
SettleTermNo string `json:"settle_term_no"`
AccountType string `json:"account_type"`
TransType string `json:"trans_type"`
Version string `json:"version"`
NotifyURL string `json:"notify_url"`
PublicKey string `json:"public_key"`
PrivateKey string `json:"private_key"`
SerialNo string `json:"serial_no"`
}
// Client 拉卡拉SDK客户端 // Client 拉卡拉SDK客户端
type Client[T any] struct { type Client[T any] struct {
Config *Config config *Config
response T response T
ctx context.Context ctx context.Context
} }
// NewClient 创建拉卡拉SDK客户端 // NewClient 创建拉卡拉SDK客户端
func NewClient[T any](ctx context.Context, cfgJson string) *Client[T] { func NewClient[T any](ctx context.Context, config *Config) *Client[T] {
var config *Config
err := gconv.Struct(cfgJson, &config)
if err != nil {
return nil
}
return &Client[T]{ return &Client[T]{
Config: config, config: config,
ctx: ctx, ctx: ctx,
} }
} }
@ -56,7 +65,7 @@ func (c *Client[T]) generateSign(request []byte) (string, error) {
timestamp := fmt.Sprintf("%d", time.Now().Unix()) timestamp := fmt.Sprintf("%d", time.Now().Unix())
// 构建待签名报文 // 构建待签名报文
signData := fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n", c.Config.AppId, c.Config.SerialNo, timestamp, nonceStr, string(request)) signData := fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n", c.config.AppID, c.config.SerialNo, timestamp, nonceStr, string(request))
// 计算签名 // 计算签名
hashed := sha256.Sum256([]byte(signData)) hashed := sha256.Sum256([]byte(signData))
@ -73,12 +82,12 @@ func (c *Client[T]) generateSign(request []byte) (string, error) {
// 构建Authorization头 // 构建Authorization头
authorization := fmt.Sprintf("LKLAPI-SHA256withRSA appid=\"%s\",serial_no=\"%s\",timestamp=\"%s\",nonce_str=\"%s\",signature=\"%s\"", authorization := fmt.Sprintf("LKLAPI-SHA256withRSA appid=\"%s\",serial_no=\"%s\",timestamp=\"%s\",nonce_str=\"%s\",signature=\"%s\"",
c.Config.AppId, c.Config.SerialNo, timestamp, nonceStr, signatureBase64) c.config.AppID, c.config.SerialNo, timestamp, nonceStr, signatureBase64)
return authorization, nil return authorization, nil
} }
func (c *Client[T]) loadPrivateKey() (*rsa.PrivateKey, error) { func (c *Client[T]) loadPrivateKey() (*rsa.PrivateKey, error) {
block, _ := pem.Decode(gfile.GetBytes(c.Config.PrivateKey)) block, _ := pem.Decode(gfile.GetBytes(c.config.PrivateKey))
if block == nil { if block == nil {
return nil, fmt.Errorf("无法解码私钥PEM数据") return nil, fmt.Errorf("无法解码私钥PEM数据")
} }
@ -90,19 +99,15 @@ func (c *Client[T]) loadPrivateKey() (*rsa.PrivateKey, error) {
return privateKey.(*rsa.PrivateKey), nil return privateKey.(*rsa.PrivateKey), nil
} }
// DoRequest 发送HTTP请求 // doRequest 发送HTTP请求
func (c *Client[T]) DoRequest(url string, reqData interface{}) (*T, error) { func (c *Client[T]) doRequest(url string, reqData interface{}) (*T, error) {
jsonStr, err := gjson.EncodeString(reqData) // 序列化为JSON
jsonData, err := json.Marshal(reqData)
if err != nil { if err != nil {
return nil, fmt.Errorf("请求参数转JSON字符串失败: %v", err) return nil, fmt.Errorf("序列化请求数据失败: %v", err)
} }
reqJson, err := CleanJSON(jsonStr)
if err != nil {
return nil, fmt.Errorf("清理JSON空值失败: %v", err)
}
g.Log().Infof(c.ctx, "清理后的json: %v", string(reqJson))
auth, err := c.generateSign(reqJson) auth, err := c.generateSign(jsonData)
if err != nil { if err != nil {
return nil, fmt.Errorf("生成签名失败: %v", err) return nil, fmt.Errorf("生成签名失败: %v", err)
} }
@ -113,5 +118,5 @@ func (c *Client[T]) DoRequest(url string, reqData interface{}) (*T, error) {
} }
// 设置其他必要的请求头 // 设置其他必要的请求头
return utils.NewClient[T](reqJson, url, header).Post(c.ctx) return utils.NewClient[T](jsonData, url, header).Post(c.ctx)
} }

View File

@ -1,115 +0,0 @@
package common
import (
"reflect"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/glog"
)
// CleanJSON 清理JSON字符串中的空值和0值字段
func CleanJSON(jsonStr string) ([]byte, error) {
// 解析为JSON
json := gjson.NewWithOptions(jsonStr, gjson.Options{StrNumber: true})
glog.Infof(gctx.New(), "Cleaning JSON: %+v", json)
// 递归清理数据
cleaned := cleanData(json.Interface())
jsons, err := gjson.DecodeToJson(cleaned, gjson.Options{StrNumber: true})
if err != nil {
glog.Errorf(gctx.New(), "Error decoding JSON: %v", err)
return nil, err
}
return jsons.ToJson()
}
// cleanData 递归清理map或slice中的空值和0值
func cleanData(data interface{}) interface{} {
if data == nil {
return nil
}
v := reflect.ValueOf(data)
switch v.Kind() {
case reflect.Map:
cleanedMap := make(map[string]interface{})
for _, key := range v.MapKeys() {
val := v.MapIndex(key)
if val.Interface() != nil && !isEmptyValue(val) {
cleanedVal := cleanData(val.Interface())
// 只有清理后的值不为空才添加
if !isCleanedValueEmpty(cleanedVal) {
cleanedMap[key.String()] = cleanedVal
}
}
}
return cleanedMap
case reflect.Slice:
cleanedSlice := make([]interface{}, 0)
for i := 0; i < v.Len(); i++ {
item := v.Index(i)
if item.Interface() != nil && !isEmptyValue(item) {
cleanedItem := cleanData(item.Interface())
if !isCleanedValueEmpty(cleanedItem) {
cleanedSlice = append(cleanedSlice, cleanedItem)
}
}
}
// 如果slice为空则返回nil而不是空slice
if len(cleanedSlice) == 0 {
return nil
}
return cleanedSlice
default:
return data
}
}
// isEmptyValue 检查值是否为空值或0值
func isEmptyValue(v reflect.Value) bool {
switch v.Kind() {
case reflect.Interface, reflect.Ptr:
return v.IsNil()
case reflect.Slice, reflect.Map:
return v.Len() == 0
case reflect.String:
return v.String() == "" || v.String() == "0"
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return v.Int() == 0
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
return v.Uint() == 0
case reflect.Float32, reflect.Float64:
return v.Float() == 0
case reflect.Bool:
return !v.Bool()
}
// 特殊处理nil值
if !v.IsValid() {
return true
}
return false
}
// isCleanedValueEmpty 检查清理后的值是否为空
func isCleanedValueEmpty(val interface{}) bool {
if val == nil {
return true
}
v := reflect.ValueOf(val)
switch v.Kind() {
case reflect.Map:
return v.Len() == 0
case reflect.Slice:
return v.Len() == 0
case reflect.String:
return val == ""
}
return false
}

View File

@ -1,14 +0,0 @@
package common
// Config 拉卡拉SDK配置
type Config struct {
PublicKey string `json:"public_key" dc:"公钥字符串"`
PrivateKey string `json:"private_key" dc:"私钥字符串"`
AppId string `json:"app_id" dc:"lakala应用ID"`
SerialNo string `json:"serial_no" dc:"序列号"`
SubAppId string `json:"sub_app_id" dc:"子应用ID 微信AppId"`
Version string `json:"version" dc:"lakala版本号"`
AccountType string `json:"account_type" dc:"账户类型"`
TransType string `json:"trans_type" dc:"交易类型"`
NotifyUrl string `json:"notify_url" dc:"回调地址"`
}

View File

@ -1,252 +0,0 @@
package lklsdk
import (
"fmt"
"time"
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model"
"github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/util/gconv"
)
// MerService 商户服务
type MerService[T any] struct {
client *common.Client[T]
}
// NewMerService 创建交易服务实例
func NewMerService[T any](client *common.Client[T]) *MerService[T] {
return &MerService[T]{
client: client,
}
}
// AddMer 商户进件
func (t *MerService[T]) AddMer(req *model.MerchantApplyReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_ADD_MER
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.MerchantApplyRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
// AddMerTest 商户进件(测试)
func (t *MerService[T]) AddMerTest(req *model.MerchantApplyReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_ADD_MER
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.MerchantApplyRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *MerService[T]) QueryMer(req *model.QueryMerRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_QUERY_MER
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.QueryMerRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *MerService[T]) QueryMerTest(req *model.QueryMerRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_QUERY_MER
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.QueryMerRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *MerService[T]) MerValidate(req *model.MerValidateRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_MER_VALIDATE
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.MerValidateRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *MerService[T]) MerValidateTest(req *model.MerValidateRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_MER_VALIDATE
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.MerValidateRequest{
ReqData: req,
ReqId: md5,
Timestamp: time.Now().Unix(),
Ver: "1.0.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *MerService[T]) ReconsiderSubmit(req *model.ReConfSubmitRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_RECONF_SUBMIT
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.ReConfSubmitRequest{
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]) ReconsiderSubmitTest(req *model.ReConfSubmitRequestData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_RECONF_SUBMIT
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.ReConfSubmitRequest{
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]) QuerySubMerInfo(req *model.QuerySubMerInfoReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_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.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_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(),
Ver: "1.0",
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}

View File

@ -1,49 +0,0 @@
package apply
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
type Apply struct {
Client *common.Client[ECApplyResponse]
}
func NewEcApply(client *common.Client[ECApplyResponse]) *Apply {
return &Apply{
Client: client,
}
}
// ECApply 电子合同申请
// 提供与拉卡拉进行电子签约的第四方进行电子合同申请
// 电子合同签约成功后不需要将其下载出来作为附件上传只需将电子合同编号ecNo
// 在“新增商户入网”接口中在contractNo字段中传入即可
// https://o.lakala.com/#/home/document/detail?id=289
func (a *Apply) ECApply(req *ECApplyRequestData) (*ECApplyResponse, error) {
// 构建请求
baseReq := ECApplyRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_EC_APPLY, baseReq)
}
// ECApplyTest 电子合同申请(测试环境)
// 提供与拉卡拉进行电子签约的第四方进行电子合同申请
// 电子合同签约成功后不需要将其下载出来作为附件上传只需将电子合同编号ecNo
// 在“新增商户入网”接口中在contractNo字段中传入即可
// https://o.lakala.com/#/home/document/detail?id=289
func (a *Apply) ECApplyTest(req *ECApplyRequestData) (*ECApplyResponse, error) {
// 构建请求
baseReq := ECApplyRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return a.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_EC_APPLY, baseReq)
}

View File

@ -1,54 +0,0 @@
package apply
import (
"github.com/black1552/lkl_sdk/consts"
)
// ECApplyRequestData 电子合同申请请求数据
// 提供与拉卡拉进行电子签约的第四方进行电子合同申请
// 电子合同签约成功后不需要将其下载出来作为附件上传只需将电子合同编号ecNo
// 在“新增商户入网”接口中在contractNo字段中传入即可
// 合同类别适用业务场景说明:
// EC001: 特约商户支付服务合作协议V3.1(商户入网) - 历史存量推荐使用EC008
// EC002: 特约商户支付服务合作协议V3.2+分账结算授权委托书 - 历史存量推荐使用EC007
// EC003: 分账结算授权委托书 - 历史存量推荐使用EC009
// EC004: 特约商户支付服务合作协议V3.3(商户入网) - 历史存量推荐使用EC008
// EC005: 特约商户支付服务合作协议V3.3+分账结算授权委托书 - 历史存量推荐使用EC007
// EC007: 特约商户支付服务合作协议V4.1+分账结算授权委托书(商户入网+分账业务) - 当前最新版本
// EC008: 特约商户支付服务合作协议V4.1(商户入网) - 当前最新版本
// EC009: 清分结算授权委托书(分账业务) - 当前最新版本
type ECApplyRequestData struct {
OrderNo string `json:"order_no" dc:"四方机构自定义订单编号 必选,建议:平台编号+14位年月日时分秒+8位的随机数"` // 必选,建议:平台编号+14位年月日时分秒+8位的随机数
OrgID int `json:"org_id" dc:"机构号 必选,签约方所属拉卡拉机构"` // 必选,签约方所属拉卡拉机构
EcTypeCode consts.ECType `json:"ec_type_code" dc:"合同类别 必选,合同类别编码"` // 必选,合同类别编码
CertType consts.CertType `json:"cert_type" dc:"法人/经营者证件类型 必选RESIDENT_ID身份证PASSPORT护照HK_MACAO_PASS港澳居民往来内地通行证TAIWAN_PASS台湾居民来往大陆通行证"` // 必选RESIDENT_ID身份证PASSPORT护照HK_MACAO_PASS港澳居民往来内地通行证TAIWAN_PASS台湾居民来往大陆通行证
CertName string `json:"cert_name" dc:"法人/经营者姓名 必选"` // 必选
CertNo string `json:"cert_no" dc:"法人/经营者证件号码 必选"` // 必选
Mobile string `json:"mobile" dc:"签约手机号 必选,小微个人商户必须填写经营者本人手机号;个体工商户或企业商户必须填写法人手机号或者经办人手机号"` // 必选,小微个人商户必须填写经营者本人手机号;个体工商户或企业商户必须填写法人手机号或者经办人手机号
BusinessLicenseNo string `json:"business_license_no" dc:"营业执照号 可选,个体工商户或企业商户必传"` // 可选,个体工商户或企业商户必传
BusinessLicenseName string `json:"business_license_name" dc:"营业执照名称 可选,个体工商户或企业商户必传"` // 可选,个体工商户或企业商户必传
OpenningBankCode string `json:"openning_bank_code" dc:"企业/经营者结算开户行号 必选"` // 必选
OpenningBankName string `json:"openning_bank_name" dc:"企业/经营者结算开户行名称 必选"` // 必选
AcctTypeCode consts.AcctTypeCode `json:"acct_type_code" dc:"企业/经营者结算卡性质 必选57 对公、 58 对私"` // 必选57 对公、 58 对私
AcctNo string `json:"acct_no" dc:"企业/经营者结算卡号 必选"` // 必选
AcctName string `json:"acct_name" dc:"企业/经营者结算卡名称 必选"` // 必选
EcContentParameters string `json:"ec_content_parameters" dc:"电子合同内容参数集合 必选JSON字符串"` // 必选JSON字符串
AgentTag consts.AgentTag `json:"agent_tag" dc:"是否经办签约 可选0 不启用 1启用缺省 0"` // 可选0 不启用 1启用缺省 0
AgentName string `json:"agent_name" dc:"经办人名称 可选agentTag为1时必传"` // 可选agentTag为1时必传
AgentCertType consts.CertType `json:"agent_cert_type" dc:"经办人证件类型 可选agentTag为1时必传"` // 可选agentTag为1时必传
AgentCertNo string `json:"agent_cert_no" dc:"经办人证件号 可选agentTag为1时必传"` // 可选agentTag为1时必传
AgentFileName string `json:"agent_file_name" dc:"经办签约授权委托书文件名 可选agentTag为1时必传"` // 可选agentTag为1时必传
AgentFilePath string `json:"agent_file_path" dc:"经办授权委托书文件路径 可选agentTag为1时必传"` // 可选agentTag为1时必传
Remark string `json:"remark" dc:"备注说明 可选"` // 可选
RetUrl string `json:"ret_url" dc:"电子合同签约结果回调通知 可选,成功签约才通知"` // 可选,成功签约才通知
}
// ECApplyRequest 电子合同申请请求
// 请求URL
// 测试环境https://test.wsmsd.cn/sit/api/v3/mms/open_api/ec/apply
// 生产环境https://s2.lakala.com/api/v3/mms/open_api/ec/apply
type ECApplyRequest struct {
ReqTime string `json:"req_time" dc:"请求时间"` // 必选格式yyyyMMddHHmmss
ReqData *ECApplyRequestData `json:"req_data" dc:"请求数据"` // 请求数据
Version string `json:"version" dc:"版本号"` // 必选固定值1.0
}

View File

@ -1,20 +0,0 @@
package apply
// ECApplyResponseData 电子合同申请响应数据
type ECApplyResponseData struct {
OrderNo string `json:"order_no" dc:"请求上送的订单号"` // 请求上送的订单号
EcApplyID int64 `json:"ec_apply_id" dc:"电子签约申请受理编号"` // 电子签约申请受理编号
ResultUrl string `json:"result_url" dc:"电子签约申请结果H5链接地址"` // 申请成功时待签约合同H5链接申请失败时错误信息结果H5链接
}
// ECApplyResponse 电子合同申请响应
type ECApplyResponse struct {
Code string `json:"code" dc:"返回码"` // 成功 000000 其它失败
Msg string `json:"msg" dc:"返回码描述"` // 返回码描述
RespData *ECApplyResponseData `json:"resp_data" dc:"结果信息集合"` // 结果信息集合
RespTime string `json:"resp_time" dc:"响应时间"` // 格式yyyyMMddHHmmss
}
func (r *ECApplyResponse) SuccessOfFail() bool {
return r.Code == "000000"
}

View File

@ -1,43 +0,0 @@
package applymanual
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
// ApplyManual 电子合同人工复核申请服务
type ApplyManual struct {
Client *common.Client[ECApplyManualResponse]
}
// NewApplyManual 创建新的电子合同人工复核申请服务
func NewApplyManual(client *common.Client[ECApplyManualResponse]) *ApplyManual {
return &ApplyManual{
Client: client,
}
}
// ECApplyManual 电子合同人工复核申请(生产环境)
// https://o.lakala.com/#/home/document/detail?id=981
func (a *ApplyManual) ECApplyManual(req *ECApplyManualRequestData) (*ECApplyManualResponse, error) {
// 创建请求对象
request := ECApplyManualRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_EC_APPLY_MANUAL, request)
}
// ECApplyManualTest 电子合同人工复核申请(测试环境)
// https://o.lakala.com/#/home/document/detail?id=981
func (a *ApplyManual) ECApplyManualTest(req *ECApplyManualRequestData) (*ECApplyManualResponse, error) {
// 创建请求对象
request := ECApplyManualRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return a.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_EC_APPLY_MANUAL, request)
}

View File

@ -1,31 +0,0 @@
package applymanual
import (
"github.com/black1552/lkl_sdk/consts"
)
// ECApplyManualRequestData 电子合同人工复核申请请求数据结构体
type ECApplyManualRequestData struct {
Version string `json:"version"` // 版本号默认1.0
OrderNo string `json:"order_no"` // 四方机构自定义订单编号,必填,建议平台编号+14位年月日时分秒+8位随机数
OrgID int `json:"org_id"` // 机构号,必填,签约方所属拉卡拉机构
EcApplyID string `json:"ec_apply_id"` // 电子合同申请受理号,必填,申请接口反馈编号
ApplyDesc string `json:"apply_desc"` // 申请说明,必填,复议提交的原因说明
FileData []*ECFileData `json:"file_data"` // 附件信息集合,必填,提供给审核人员核对信息
RetURL string `json:"ret_url,omitempty"` // 回调地址,可选
}
// ECFileData 附件信息结构体
type ECFileData struct {
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
}
// ECApplyManualRequest 电子合同人工复核申请请求结构体
type ECApplyManualRequest struct {
ReqTime string `json:"req_time"` // 请求时间
ReqData *ECApplyManualRequestData `json:"req_data"` // 请求数据
Version string `json:"version"` // 接口版本号
}

View File

@ -1,19 +0,0 @@
package applymanual
// ECApplyManualResponseData 电子合同人工复核申请响应数据结构体
type ECApplyManualResponseData struct {
// 响应数据为空对象根据API文档成功时返回空的resp_data
}
// ECApplyManualResponse 电子合同人工复核申请响应结构体
type ECApplyManualResponse struct {
Code string `json:"code"` // 返回码成功为000000其他为失败
Msg string `json:"msg"` // 返回码描述
RespData ECApplyManualResponseData `json:"resp_data"` // 响应数据
}
// SuccessOfFail 检查响应是否成功
// 返回true表示成功false表示失败
func (r *ECApplyManualResponse) SuccessOfFail() bool {
return r.Code == "000000"
}

View File

@ -1,48 +0,0 @@
package download
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
type Download struct {
Client *common.Client[ECDownloadResponse]
}
// NewDownload 创建电子合同下载服务实例
func NewDownload(client *common.Client[ECDownloadResponse]) *Download {
return &Download{
Client: client,
}
}
// ECDownload 电子合同下载
// 提供已完成的签约电子合同下载
// https://o.lakala.com/#/home/document/detail?id=294
func (d *Download) ECDownload(req *ECDownloadRequestData) (*ECDownloadResponse, error) {
// 构建请求
baseReq := ECDownloadRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
// 使用生产环境URL
return d.Client.DoRequest(consts.BASE_URL+consts.LKL_EC_DOWNLOAD, baseReq)
}
// ECDownloadTest 电子合同下载(测试环境)
// 提供已完成的签约电子合同下载
// https://o.lakala.com/#/home/document/detail?id=294
func (d *Download) ECDownloadTest(req *ECDownloadRequestData) (*ECDownloadResponse, error) {
// 构建请求
baseReq := ECDownloadRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
// 使用测试环境URL
return d.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_EC_DOWNLOAD, baseReq)
}

View File

@ -1,15 +0,0 @@
package download
// ECDownloadRequestData 电子合同下载请求数据
type ECDownloadRequestData struct {
OrderNo string `json:"order_no" dc:"四方机构自定义订单编号"` // 四方机构自定义订单编号
OrgCode int `json:"org_code" dc:"机构号"` // 机构号
EcApplyID int64 `json:"ec_apply_id" dc:"电子合同申请受理号"` // 电子合同申请受理号
}
// ECDownloadRequest 电子合同下载请求结构
type ECDownloadRequest struct {
ReqTime string `json:"req_time"` // 请求时间
ReqData *ECDownloadRequestData `json:"req_data"` // 请求数据
Version string `json:"version"` // 接口版本号
}

View File

@ -1,22 +0,0 @@
package download
// ECDownloadResponseData 电子合同下载响应数据
type ECDownloadResponseData struct {
OrderNo string `json:"order_no"` // 请求上送的订单号
EcApplyID int64 `json:"ec_apply_id"` // 电子签约申请受理编号
EcStatus string `json:"ec_status"` // 电子合同状态: UNDONE 未完成, COMPLETED 已完成
EcNo string `json:"ec_no"` // 电子合同号合同状态为COMPLETED时返回
EcFile string `json:"ec_file"` // 电子合同pdf文件(base64格式字符合同状态为COMPLETED时返回)
}
// ECDownloadResponse 电子合同下载响应结构
type ECDownloadResponse struct {
Code string `json:"code"` // 返回码
Msg string `json:"msg"` // 返回码描述
RespData *ECDownloadResponseData `json:"resp_data"` // 结果信息集合
}
// SuccessOfFail 检查响应是否成功
func (r *ECDownloadResponse) SuccessOfFail() bool {
return r.Code == "000000"
}

View File

@ -1,41 +0,0 @@
package qmastatus
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
// QmaStatus 电子合同人工复核结果查询服务
type QmaStatus struct {
Client *common.Client[ECQmaStatusResponse]
}
// NewQmaStatus 创建新的电子合同人工复核结果查询服务
func NewQmaStatus(client *common.Client[ECQmaStatusResponse]) *QmaStatus {
return &QmaStatus{Client: client}
}
// ECQmaStatus
// https://o.lakala.com/#/home/document/detail?id=982
func (q *QmaStatus) ECQmaStatus(req *ECQmaStatusRequestData) (*ECQmaStatusResponse, error) {
// 创建请求对象
request := ECQmaStatusRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return q.Client.DoRequest(consts.BASE_URL+consts.LKL_EC_QMA_STATUS, request)
}
// ECQmaStatusTest 电子合同人工复核结果查询(测试环境)
// https://o.lakala.com/#/home/document/detail?id=982
func (q *QmaStatus) ECQmaStatusTest(req *ECQmaStatusRequestData) (*ECQmaStatusResponse, error) {
// 创建请求对象
request := ECQmaStatusRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
return q.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_EC_QMA_STATUS, request)
}

View File

@ -1,16 +0,0 @@
package qmastatus
// ECQmaStatusRequestData 电子合同人工复核结果查询请求数据结构体
type ECQmaStatusRequestData struct {
Version string `json:"version"` // 版本号默认1.0
OrderNo string `json:"order_no"` // 四方机构自定义订单编号,必填,建议平台编号+14位年月日时分秒+8位随机数
OrgID int `json:"org_id"` // 机构号,必填,签约方所属拉卡拉机构
EcApplyID string `json:"ec_apply_id"` // 电子合同申请受理号,必填,申请接口反馈编号
}
// ECQmaStatusRequest 电子合同人工复核结果查询请求结构体
type ECQmaStatusRequest struct {
ReqTime string `json:"req_time"` // 请求时间
ReqData *ECQmaStatusRequestData `json:"req_data"` // 请求数据
Version string `json:"version"` // 接口版本号
}

View File

@ -1,25 +0,0 @@
package qmastatus
// ECQmaStatusResponseData 电子合同人工复核结果查询响应数据结构体
type ECQmaStatusResponseData struct {
Version string `json:"version"` // 版本号
OrderNo string `json:"order_no"` // 四方机构自定义订单编号
OrgID int `json:"org_id"` // 机构号
EcApplyID string `json:"ec_apply_id"` // 电子合同申请受理号
AuditStatus string `json:"audit_status"` // 人工审核状态WAIT_AUDIT待审核、PASS审核通过、REFUSE审核拒绝、CLOSE审核关闭
AuditDesc string `json:"audit_desc"` // 人工审核结果说明
SignH5URL string `json:"sign_h5_url"` // 签约H5地址审核通过时返回
SignH5URLExpTm string `json:"sign_h5_url_exp_tm"` // 签约H5地址过期时间审核通过时返回
}
// ECQmaStatusResponse 电子合同人工复核结果查询响应结构体
type ECQmaStatusResponse struct {
Code string `json:"code"` // 返回码成功000000其它失败
Msg string `json:"msg"` // 返回码描述
RespData *ECQmaStatusResponseData `json:"resp_data"` // 响应数据
}
// SuccessOfFail 判断响应是否成功
func (r *ECQmaStatusResponse) SuccessOfFail() bool {
return r != nil && r.Code == "000000"
}

View File

@ -1,48 +0,0 @@
package querystatus
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
type QStatus struct {
Client *common.Client[ECQueryStatusResponse]
}
// NewQStatus 创建电子合同查询状态服务实例
func NewQStatus(client *common.Client[ECQueryStatusResponse]) *QStatus {
return &QStatus{
Client: client,
}
}
// QueryStatus 电子合同查询状态
// 提供申请过与拉卡拉电子签约用户查询电子合同签署状态
// https://o.lakala.com/#/home/document/detail?id=293
func (q *QStatus) QueryStatus(req *ECQueryStatusRequestData) (*ECQueryStatusResponse, error) {
// 构建请求
baseReq := ECQueryStatusRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
// 使用生产环境URL
return q.Client.DoRequest(consts.BASE_URL+consts.LKL_EC_QUERY_STATUS, baseReq)
}
// QueryStatusTest 电子合同查询状态(测试环境)
// 提供申请过与拉卡拉电子签约用户查询电子合同签署状态
// https://o.lakala.com/#/home/document/detail?id=293
func (q *QStatus) QueryStatusTest(req *ECQueryStatusRequestData) (*ECQueryStatusResponse, error) {
// 构建请求
baseReq := ECQueryStatusRequest{
ReqTime: gtime.Now().Format("YmdHis"),
ReqData: req,
Version: "1.0",
}
// 使用测试环境URL
return q.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_EC_QUERY_STATUS, baseReq)
}

View File

@ -1,19 +0,0 @@
package querystatus
// ECQueryStatusRequestData 电子合同查询状态请求数据
// 提供申请过与拉卡拉电子签约用户查询电子合同签署状态
// 请求URL
// 测试环境https://test.wsmsd.cn/sit/api/v3/mms/open_api/ec/q_status
// 生产环境https://s2.lakala.com/api/v3/mms/open_api/ec/q_status
type ECQueryStatusRequestData struct {
OrderNo string `json:"order_no" dc:"四方机构自定义订单编号 必选,建议:平台编号+14位年月日时24小时制分秒+8位的随机数同一接入机构不重复"` // 必选,建议:平台编号+14位年月日时24小时制分秒+8位的随机数同一接入机构不重复
OrgCode int `json:"org_code" dc:"机构号 必选,签约方所属拉卡拉机构"` // 必选,签约方所属拉卡拉机构
EcApplyID int64 `json:"ec_apply_id" dc:"电子合同申请受理号 必选,申请接口反馈编号"` // 必选,申请接口反馈编号
}
// ECQueryStatusRequest 电子合同查询状态请求
type ECQueryStatusRequest struct {
ReqTime string `json:"req_time" dc:"请求时间"` // 必选格式yyyyMMddHHmmss
ReqData *ECQueryStatusRequestData `json:"req_data" dc:"请求数据"` // 请求数据
Version string `json:"version" dc:"版本号"` // 必选固定值1.0
}

View File

@ -1,22 +0,0 @@
package querystatus
// ECQueryStatusResponseData 电子合同查询状态响应数据
type ECQueryStatusResponseData struct {
OrderNo string `json:"order_no" dc:"请求上送的订单号"` // 请求上送的订单号
EcApplyID int64 `json:"ec_apply_id" dc:"电子签约申请受理编号"` // 电子签约申请受理编号
EcStatus string `json:"ec_status" dc:"电子合同签署状态"` // 电子合同签署状态UNDONE 未完成COMPLETED 已完成
EcNo string `json:"ec_no" dc:"电子合同号"` // 签署完成反馈
}
// ECQueryStatusResponse 电子合同查询状态响应
type ECQueryStatusResponse struct {
Code string `json:"code" dc:"返回码"` // 成功 000000 其它失败
Msg string `json:"msg" dc:"返回码描述"` // 返回码描述
RespData *ECQueryStatusResponseData `json:"resp_data" dc:"结果信息集合"` // 结果信息集合
RespTime string `json:"resp_time" dc:"响应时间"` // 格式yyyyMMddHHmmss
}
// SuccessOfFail 检查响应是否成功
func (r *ECQueryStatusResponse) SuccessOfFail() bool {
return r.Code == "000000"
}

View File

@ -2,17 +2,16 @@ package lklsdk
import ( import (
"github.com/black1552/lkl_sdk/consts" "github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
) )
type MergePreService[T any] struct { type MergePreService[T any] struct {
client *common.Client[T] client *Client[T]
} }
// NewMergePreService 创建拉卡拉主扫合单交易 // NewMergePreService 创建拉卡拉主扫合单交易
func NewMergePreService[T any](client *common.Client[T]) *MergePreService[T] { func NewMergePreService[T any](client *Client[T]) *MergePreService[T] {
return &MergePreService[T]{ return &MergePreService[T]{
client: client, client: client,
} }
@ -30,7 +29,7 @@ func (s *MergePreService[T]) PreOrder(req *model.MergePreorderReqData) (*T, erro
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -3,34 +3,22 @@ package lklsdk
import ( import (
"context" "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" "github.com/black1552/lkl_sdk/model"
) )
// SDK 拉卡拉SDK主入口 // SDK 拉卡拉SDK主入口
type SDK[T any] struct { type SDK[T any] struct {
Client *common.Client[T] Client *Client[T]
SplitLedger *SplitLedgerService[T] SplitLedger *SplitLedgerService[T]
Trade *TradeService[T] Trade *TradeService[T]
Account *AccountService[T] Account *AccountService[T]
UploadFile *UploadFileService[T] UploadFile *UploadFileService[T]
MergePre *MergePreService[T] MergePre *MergePreService[T]
Merchant *MerService[T]
EC *ecApply.Apply
ECQuery *ecQuery.QStatus
ECFileDownload *ecDownload.Download
ECPeApplyManual *ecApplyManual.ApplyManual
ECPeQmaStatus *ecQmaStatus.QmaStatus
} }
// NewSDK 创建拉卡拉SDK实例 // NewSDK 创建拉卡拉SDK实例
func NewSDK[T any](ctx context.Context, cfgJson string) *SDK[T] { func NewSDK[T any](ctx context.Context, config *Config) *SDK[T] {
client := common.NewClient[T](ctx, cfgJson) client := NewClient[T](ctx, config)
return &SDK[T]{ return &SDK[T]{
Client: client, Client: client,
SplitLedger: NewSplitLedgerService(client), SplitLedger: NewSplitLedgerService(client),
@ -38,57 +26,11 @@ func NewSDK[T any](ctx context.Context, cfgJson string) *SDK[T] {
Account: NewAccountService(client), Account: NewAccountService(client),
UploadFile: NewUploadFileService(client), UploadFile: NewUploadFileService(client),
MergePre: NewMergePreService(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)),
} }
} }
// 以下为便捷方法直接通过SDK调用各服务的主要功能 // 以下为便捷方法直接通过SDK调用各服务的主要功能
// ReconsiderSubmit 商户进件复议提交
func (s *SDK[T]) ReconsiderSubmit(req *model.ReConfSubmitRequestData) (*T, error) {
return s.Merchant.ReconsiderSubmit(req)
}
// ReconsiderSubmitTest 商户进件复议提交
func (s *SDK[T]) ReconsiderSubmitTest(req *model.ReConfSubmitRequestData) (*T, error) {
return s.Merchant.ReconsiderSubmitTest(req)
}
// QueryMerchant 商户进件信息查询
func (s *SDK[T]) QueryMerchant(req *model.QueryMerRequestData) (*T, error) {
return s.Merchant.QueryMer(req)
}
// QueryMerchantTest 商户进件信息查询
func (s *SDK[T]) QueryMerchantTest(req *model.QueryMerRequestData) (*T, error) {
return s.Merchant.QueryMerTest(req)
}
// MerValidate 商户进件信息校验
func (s *SDK[T]) MerValidate(req *model.MerValidateRequestData) (*T, error) {
return s.Merchant.MerValidate(req)
}
// MerValidateTest 商户进件信息校验
func (s *SDK[T]) MerValidateTest(req *model.MerValidateRequestData) (*T, error) {
return s.Merchant.MerValidateTest(req)
}
// AddMer 商户进件
func (s *SDK[T]) AddMer(req *model.MerchantApplyReqData) (*T, error) {
return s.Merchant.AddMer(req)
}
// AddMerTest 商户进件
func (s *SDK[T]) AddMerTest(req *model.MerchantApplyReqData) (*T, error) {
return s.Merchant.AddMerTest(req)
}
// MergePreOrder 主扫合单交易 // MergePreOrder 主扫合单交易
func (s *SDK[T]) MergePreOrder(req *model.MergePreorderReqData) (*T, error) { func (s *SDK[T]) MergePreOrder(req *model.MergePreorderReqData) (*T, error) {
return s.MergePre.PreOrder(req) return s.MergePre.PreOrder(req)
@ -104,60 +46,31 @@ func (s *SDK[T]) ApplyLedgerMer(req *model.ApplyLedgerMerReqData) (*T, error) {
return s.SplitLedger.ApplyLedgerMer(req) return s.SplitLedger.ApplyLedgerMer(req)
} }
func (s *SDK[T]) ApplyLedgerMerTest(req *model.ApplyLedgerMerReqData) (*T, error) {
return s.SplitLedger.ApplyLedgerMerTest(req)
}
// QueryLedgerMer 商户分账信息查询 // QueryLedgerMer 商户分账信息查询
func (s *SDK[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData) (*T, error) { func (s *SDK[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData) (*T, error) {
return s.SplitLedger.QueryLedgerMer(req) return s.SplitLedger.QueryLedgerMer(req)
} }
func (s *SDK[T]) QueryLedgerMerTest(req *model.QueryLedgerMerReqData) (*T, error) {
return s.SplitLedger.QueryLedgerMerTest(req)
}
// ApplyLedgerReceiver 分账接收方创建申请 // ApplyLedgerReceiver 分账接收方创建申请
func (s *SDK[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiverReqData) (*T, error) { func (s *SDK[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiverReqData) (*T, error) {
return s.SplitLedger.ApplyLedgerReceiver(req) return s.SplitLedger.ApplyLedgerReceiver(req)
} }
func (s *SDK[T]) ApplyLedgerReceiverTest(req *model.ApplyLedgerReceiverReqData) (*T, error) {
return s.SplitLedger.ApplyLedgerReceiverTest(req)
}
// ApplyBind 分账关系绑定申请 // ApplyBind 分账关系绑定申请
func (s *SDK[T]) ApplyBind(req *model.ApplyBindReqData) (*T, error) { func (s *SDK[T]) ApplyBind(req *model.ApplyBindReqData) (*T, error) {
return s.SplitLedger.ApplyBind(req) return s.SplitLedger.ApplyBind(req)
} }
func (s *SDK[T]) ApplyBindTest(req *model.ApplyBindReqData) (*T, error) {
return s.SplitLedger.ApplyBindTest(req)
}
// QuerySplitBalance 可分账金额查询 // QuerySplitBalance 可分账金额查询
func (s *SDK[T]) QuerySplitBalance(req *model.SplitBalanceReqData) (*T, error) { func (s *SDK[T]) QuerySplitBalance(req *model.SplitBalanceReqData) (*T, error) {
return s.SplitLedger.QuerySplitBalance(req) return s.SplitLedger.QuerySplitBalance(req)
} }
func (s *SDK[T]) QuerySplitBalanceTest(req *model.SplitBalanceReqData) (*T, error) {
return s.SplitLedger.QuerySplitBalanceTest(req)
}
// OrderSplitLedger 订单分账 // OrderSplitLedger 订单分账
func (s *SDK[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqData) (*T, error) { func (s *SDK[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqData) (*T, error) {
return s.SplitLedger.OrderSplitLedger(req) return s.SplitLedger.OrderSplitLedger(req)
} }
func (s *SDK[T]) OrderSplitLedgerTest(req *model.OrderSplitLedgerReqData) (*T, error) {
return s.SplitLedger.OrderSplitLedgerTest(req)
}
// OrderSplitLedgerFallback 订单分账回退
func (s *SDK[T]) OrderSplitLedgerFallback(req *model.OrderSplitLedgerFallbackReqData) (*T, error) {
return s.SplitLedger.OrderSplitLedgerFallback(req)
}
// TradeQuery 交易查询 // TradeQuery 交易查询
func (s *SDK[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) { func (s *SDK[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
return s.Trade.TradeQuery(req) return s.Trade.TradeQuery(req)
@ -173,80 +86,11 @@ func (s *SDK[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, error) {
return s.Account.BalanceQuery(req) return s.Account.BalanceQuery(req)
} }
func (s *SDK[T]) BalanceQueryTest(req *model.BalanceQueryReqData) (*T, error) {
return s.Account.BalanceQueryTest(req)
}
func (s *SDK[T]) UploadFileQuery(req *model.UploadFileReqData) (*T, error) { func (s *SDK[T]) UploadFileQuery(req *model.UploadFileReqData) (*T, error) {
return s.UploadFile.UploadFileQuery(req) return s.UploadFile.UploadFileQuery(req)
} }
func (s *SDK[T]) UploadFileQueryTest(req *model.UploadFileReqData) (*T, error) {
return s.UploadFile.UploadFileQueryTest(req)
}
// Withdraw 账户提现 // Withdraw 账户提现
func (s *SDK[T]) Withdraw(req *model.WithdrawReqData) (*T, error) { func (s *SDK[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
return s.Account.Withdraw(req) return s.Account.Withdraw(req)
} }
func (s *SDK[T]) WithdrawTest(req *model.WithdrawReqData) (*T, error) {
return s.Account.WithdrawTest(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)
}
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)
}

View File

@ -5,7 +5,6 @@ import (
"time" "time"
"github.com/black1552/lkl_sdk/consts" "github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
"github.com/gogf/gf/v2/crypto/gmd5" "github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
@ -14,11 +13,11 @@ import (
// SplitLedgerService 分账服务 // SplitLedgerService 分账服务
type SplitLedgerService[T any] struct { type SplitLedgerService[T any] struct {
client *common.Client[T] client *Client[T]
} }
// NewSplitLedgerService 创建分账服务实例 // NewSplitLedgerService 创建分账服务实例
func NewSplitLedgerService[T any](client *common.Client[T]) *SplitLedgerService[T] { func NewSplitLedgerService[T any](client *Client[T]) *SplitLedgerService[T] {
return &SplitLedgerService[T]{ return &SplitLedgerService[T]{
client: client, client: client,
} }
@ -42,32 +41,7 @@ func (s *SplitLedgerService[T]) ApplyLedgerMer(req *model.ApplyLedgerMerReqData)
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) ApplyLedgerMerTest(req *model.ApplyLedgerMerReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_SPLIT_LEDGER_URL
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.ApplyLedgerMerRequest{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "2.0",
ReqData: req,
ReqId: md5,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -93,32 +67,7 @@ func (s *SplitLedgerService[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiv
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) ApplyLedgerReceiverTest(req *model.ApplyLedgerReceiverReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_SPLIT_LEDGER_RECEIVE_URL
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.ApplyLedgerReceiverRequest{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "2.0",
ReqId: md5,
ReqData: req,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -139,27 +88,7 @@ func (s *SplitLedgerService[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData)
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) QueryLedgerMerTest(req *model.QueryLedgerMerReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_SPLIT_LEDGER_QUERY_URL
// 构建BaseModel请求
baseReq := model.QueryLedgerMerRequest{
ReqTime: time.Now().Format("20060102150405"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -29,31 +29,7 @@ func (s *SplitLedgerService[T]) ApplyBind(req *model.ApplyBindReqData) (*T, erro
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) ApplyBindTest(req *model.ApplyBindReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_SPLIT_LEDGER_RECEIVE_BIND_URL
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.ApplyBindRequest{
ReqTime: time.Now().Format("20060102150405"),
Version: "2.0",
ReqData: req,
ReqId: md5,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -73,26 +49,7 @@ func (s *SplitLedgerService[T]) QuerySplitBalance(req *model.SplitBalanceReqData
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) QuerySplitBalanceTest(req *model.SplitBalanceReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_SPLIT_LEDGER_BALANCE_URL
// 构建BaseModel请求
baseReq := model.SplitBalanceRequest{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -112,45 +69,7 @@ func (s *SplitLedgerService[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqD
} }
// 发送请求 // 发送请求
respBody, err := s.client.DoRequest(url, baseReq) respBody, err := s.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (s *SplitLedgerService[T]) OrderSplitLedgerTest(req *model.OrderSplitLedgerReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_ORDER_SPLIT_LEDGER_URL
// 构建BaseModel请求
baseReq := model.OrderSplitLedgerRequest{
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
// 构建BaseModel请求
baseReq := model.OrderSplitLedgerFallbackRequest{
ReqTime: time.Now().Format("20060102150405"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := s.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -4,17 +4,16 @@ import (
"time" "time"
"github.com/black1552/lkl_sdk/consts" "github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
) )
// TradeService 交易服务 // TradeService 交易服务
type TradeService[T any] struct { type TradeService[T any] struct {
client *common.Client[T] client *Client[T]
} }
// NewTradeService 创建交易服务实例 // NewTradeService 创建交易服务实例
func NewTradeService[T any](client *common.Client[T]) *TradeService[T] { func NewTradeService[T any](client *Client[T]) *TradeService[T] {
return &TradeService[T]{ return &TradeService[T]{
client: client, client: client,
} }
@ -29,12 +28,12 @@ func (t *TradeService[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
baseReq := model.TradeQuery{ baseReq := model.TradeQuery{
ReqTime: time.Now().Format("20060102150405"), ReqTime: time.Now().Format("20060102150405"),
Version: "3.0", Version: "3.0",
OutOrgCode: t.client.Config.AppId, OutOrgCode: t.client.config.AppID,
ReqData: req, ReqData: req,
} }
// 发送请求 // 发送请求
respBody, err := t.client.DoRequest(url, baseReq) respBody, err := t.client.doRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -50,7 +49,7 @@ func (t *TradeService[T]) PreOrder(req *model.PreorderReqData) (*T, error) {
baseReq := model.NewPreorder(req) baseReq := model.NewPreorder(req)
// 发送请求 // 发送请求
respBody, err := t.client.DoRequest(url, baseReq) respBody, err := t.client.doRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -66,7 +65,7 @@ func (t *TradeService[T]) Refound(req *model.RefundReqData) (*T, error) {
// 构建BaseModel请求 // 构建BaseModel请求
baseReq := model.NewRefund(req) baseReq := model.NewRefund(req)
// 发送请求 // 发送请求
respBody, err := t.client.DoRequest(url, baseReq) respBody, err := t.client.doRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,34 +0,0 @@
package mergerefund
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
type MergeRefund[T any] struct {
client *common.Client[T]
}
func NewMergeRefund[T any](client *common.Client[T]) *MergeRefund[T] {
return &MergeRefund[T]{
client: client,
}
}
func (t *MergeRefund[T]) MergeRefund(req *RequestDataMergeRefund) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_UNIFIED_RETURN_MERGE_REFUND_URL
// 构建BaseModel请求
baseReq := RequestMergeRefund{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}

View File

@ -1,42 +0,0 @@
package mergerefund
// RequestMergeRefund 统一退货基础请求结构体
type RequestMergeRefund struct {
ReqTime string `json:"req_time" dc:"ReqTime 请求时间 必填格式yyyyMMddHHmmss"`
Version string `json:"version" dc:"Version 版本号 必填,固定为\"3\""`
ReqData *RequestDataMergeRefund `json:"req_data" dc:"ReqData 请求参数 必填,具体字段见对应的数据结构体"`
}
// RequestDataMergeRefund 合单退货请求参数结构体
type RequestDataMergeRefund struct {
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
TermNo string `json:"term_no" dc:"TermNo 终端号 必填,拉卡拉分配的终端号"`
OutTradeNo string `json:"out_trade_no" dc:"OutTradeNo 商户请求流水号 必填,商户系统唯一"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 退款金额 必填,单位分,整数数字型字符"`
RefundReason string `json:"refund_reason,omitempty" dc:"RefundReason 退货原因 可选"`
OriginLogNo string `json:"origin_log_no,omitempty" dc:"OriginLogNo 拉卡拉对账单流水号 可选,正交易返回的拉卡拉对账单流水号"`
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty" dc:"OriginOutTradeNo 原商户交易流水号 可选"`
OriginTradeNo string `json:"origin_trade_no,omitempty" dc:"OriginTradeNo 原交易拉卡拉交易订单号 可选"`
LocationInfo *LocationInfo `json:"location_info" dc:"LocationInfo 地址位置信息 必填"`
NotifyURL string `json:"notify_url,omitempty" dc:"NotifyURL 后台通知地址 可选,交易结果通知地址"`
RefundAccMode string `json:"refund_acc_mode,omitempty" dc:"RefundAccMode 退货账户模式 可选00退货账户余额 05商户余额 06终端余额"`
RefundSplitInfo []*RelateOutSplitInfo `json:"refund_split_info,omitempty" dc:"RefundSplitInfo 请参合单域 可选"`
}
// LocationInfo 地址位置信息结构体
type LocationInfo struct {
RequestIP string `json:"request_ip" dc:"RequestIP 请求方IP地址 必填格式如36.45.36.95"`
Location string `json:"location,omitempty" dc:"Location 维度,经度 可选,商户终端的地理位置,格式:纬度,经度,+表示北纬、东经,-表示南纬、西经精度最长支持小数点后9位"`
BaseStation string `json:"base_station,omitempty" dc:"BaseStation 基站信息 可选,客户端设备的基站信息"`
}
// RelateOutSplitInfo 请求合单域结构体
type RelateOutSplitInfo struct {
OutSubTradeNo string `json:"out_sub_trade_no" dc:"OutSubTradeNo 外部子退款交易流水号 必填,商户子交易退款流水号,商户号下唯一"`
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
TermNo string `json:"term_no" dc:"TermNo 终端号 必填,拉卡拉分配的业务终端号"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 申请退款金额 必填,单位分,整数型字符"`
OriginOutSubTradeNo string `json:"origin_out_sub_trade_no,omitempty" dc:"OriginOutSubTradeNo 原商户交易流水号 可选,下单时的商户子单请求流水号"`
OriginSubTradeNo string `json:"origin_sub_trade_no,omitempty" dc:"OriginSubTradeNo 原拉卡拉子交易流水号 可选,下单成功时,返回的拉卡拉交易子流水"`
OriginSubLogNo string `json:"origin_sub_log_no,omitempty" dc:"OriginSubLogNo 原对账单子流水号 可选原交易的tradeNo的后14位必须是66开头的"`
}

View File

@ -1,53 +0,0 @@
package mergerefund
// ResponseMergeRefund 统一退货响应结构体
type ResponseMergeRefund struct {
Code string `json:"code" dc:"Code 响应码"`
Msg string `json:"msg" dc:"Msg 响应描述"`
RespTime string `json:"resp_time" dc:"RespTime 响应时间"`
RespData *ResponseDataMergeRefund `json:"resp_data" dc:"RespData 响应数据"`
}
func (r *ResponseMergeRefund) SuccessOrFail() bool {
return r.Code == "000000"
}
// ResponseDataMergeRefund 合单退货响应数据结构体
type ResponseDataMergeRefund struct {
TradeState string `json:"trade_state" dc:"TradeState 交易状态 必填INIT-初始化SUCCESS-交易成功FAIL-交易失败DEAL-交易处理中/未知PROCESSING-交易已受理TIMEOUT-超时未知EXCEPTION-异常"`
RefundType string `json:"refund_type" dc:"RefundType 退货模式 必填"`
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
OutTradeNo string `json:"out_trade_no" dc:"OutTradeNo 商户请求流水号 必填,请求中的商户请求流水号"`
TradeNo string `json:"trade_no" dc:"TradeNo 拉卡拉交易流水号 必填"`
LogNo string `json:"log_no" dc:"LogNo 拉卡拉对账单流水号 必填tradeNo的后14位"`
AccTradeNo string `json:"acc_trade_no,omitempty" dc:"AccTradeNo 账户端交易订单号 可选"`
AccountType string `json:"account_type,omitempty" dc:"AccountType 钱包类型 可选微信WECHAT支付宝ALIPAY银联UQRCODEPAY翼支付:BESTPAY苏宁易付宝:SUNING"`
TotalAmount string `json:"total_amount" dc:"TotalAmount 交易金额 必填,单位分,整数数字型字符串"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 申请退款金额 必填,单位分,整数数字型字符串"`
PayerAmount string `json:"payer_amount" dc:"PayerAmount 实际退款金额 必填,单位分,整数数字型字符串"`
TradeTime string `json:"trade_time,omitempty" dc:"TradeTime 退款时间 可选实际退款时间。yyyyMMddHHmmss"`
OriginLogNo string `json:"origin_log_no,omitempty" dc:"OriginLogNo 原拉卡拉对账单流水号 可选,如果请求中携带,则返回"`
OriginTradeNo string `json:"origin_trade_no,omitempty" dc:"OriginTradeNo 原拉卡拉交易流水号 可选,如果请求中携带,则返回"`
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty" dc:"OriginOutTradeNo 原商户请求流水号 可选,如果请求中携带,则返回"`
UpIssAddnData string `json:"up_iss_addn_data,omitempty" dc:"UpIssAddnData 单品营销附加数据 可选,扫码交易,参与单品营销优惠时返回"`
UpCouponInfo string `json:"up_coupon_info,omitempty" dc:"UpCouponInfo 银联优惠信息 可选,扫码交易,参与单品营销优惠时返回"`
TradeInfo string `json:"trade_info,omitempty" dc:"TradeInfo 出资方信息 可选,扫码交易"`
ChannelRetDesc string `json:"channel_ret_desc" dc:"ChannelRetDesc 返回描述信息 必填"`
RefundSplitInfo []*RelateOutSplitRspInfo `json:"refund_split_info" dc:"RefundSplitInfo 响应合单域 必填"`
}
// RelateOutSplitRspInfo 响应合单域结构体
type RelateOutSplitRspInfo struct {
OutSubTradeNo string `json:"out_sub_trade_no" dc:"OutSubTradeNo 外部子退款交易流水号 必填,请求中的商户子流水号"`
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
TermNo string `json:"term_no" dc:"TermNo 终端号 必填,拉卡拉分配的业务终端号"`
TradeState string `json:"trade_state" dc:"TradeState 交易状态 必填INIT-初始化SUCCESS-交易成功FAIL-交易失败DEAL-交易处理中/未知PROCESSING-交易已受理TIMEOUT-超时未知EXCEPTION-异常"`
SubTradeNo string `json:"sub_trade_no" dc:"SubTradeNo 拉卡拉子交易流水号 必填"`
SubLogNo string `json:"sub_log_no" dc:"SubLogNo 拉卡拉子对账单流水号 必填"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 申请退款金额 必填,单位分,整数型字符"`
PayerAmount string `json:"payer_amount" dc:"PayerAmount 实际退款金额 必填,单位分,整数型字符"`
TotalAmount string `json:"total_amount" dc:"TotalAmount 交易金额 必填,单位分,整数型字符"`
OriginSubLogNo string `json:"origin_sub_log_no,omitempty" dc:"OriginSubLogNo 原拉卡拉子对账单流水号 可选,如果请求中携带,则返回"`
OriginSubTradeNo string `json:"origin_sub_trade_no,omitempty" dc:"OriginSubTradeNo 原拉卡拉子交易流水号 可选,如果请求中携带,则返回"`
OriginOutSubTradeNo string `json:"origin_out_sub_trade_no,omitempty" dc:"OriginOutSubTradeNo 原商户子交易流水号 可选,如果请求中携带,则返回"`
}

View File

@ -1,40 +0,0 @@
package refund
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
// Refund 统一退货API结构体
type Refund[T any] struct {
client *common.Client[T]
}
// NewRefund 创建统一退货API实例
func NewRefund[T any](client *common.Client[T]) *Refund[T] {
return &Refund[T]{
client: client,
}
}
// Refund 发起统一退货请求
// request: 统一退货请求参数
// 返回统一退货响应结果和错误信息
func (api *Refund[T]) Refund(req *RequestDataRefund) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_UNIFIED_RETURN_REFUND_URL
// 构建BaseModel请求
baseReq := RequestRefund{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := api.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}

View File

@ -1,37 +0,0 @@
package refund
// ResponseRefund 统一退货响应结构体
// 参考文档https://o.lakala.com/#/home/document/detail?id=892
type ResponseRefund struct {
Code string `json:"code" dc:"Code 返回业务代码 必填通讯成功返回码000000交易未知RFD11105/RFD11112其他返回码可视为失败"`
Msg string `json:"msg" dc:"Msg 返回业务代码描述 必填,如\"成功\""`
RespTime string `json:"resp_time" dc:"RespTime 响应时间 必填格式yyyyMMddHHmmss"`
RespData *ResponseDataRefund `json:"resp_data" dc:"RespData 响应数据 必填,具体字段根据接口返回"`
}
func (r *ResponseRefund) SuccessOrFail() bool {
return r.Code == "000000"
}
// ResponseDataRefund 统一退货响应数据结构体
type ResponseDataRefund struct {
TradeState string `json:"trade_state" dc:"TradeState 交易状态 必填INIT-初始化SUCCESS-交易成功FAIL-交易失败DEAL-交易处理中/未知PROCESSING-交易已受理TIMEOUT-超时未知EXCEPTION-异常"`
RefundType string `json:"refund_type" dc:"RefundType 退货模式 必填"`
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
OutTradeNo string `json:"out_trade_no" dc:"OutTradeNo 商户请求流水号 必填,请求中的商户请求流水号"`
TradeNo string `json:"trade_no" dc:"TradeNo 拉卡拉交易流水号 必填"`
LogNo string `json:"log_no" dc:"LogNo 拉卡拉对账单流水号 必填tradeNo的后14位"`
AccTradeNo string `json:"acc_trade_no,omitempty" dc:"AccTradeNo 账户端交易订单号 可选"`
AccountType string `json:"account_type,omitempty" dc:"AccountType 钱包类型 可选微信WECHAT支付宝ALIPAY银联UQRCODEPAY翼支付:BESTPAY苏宁易付宝:SUNING"`
TotalAmount string `json:"total_amount" dc:"TotalAmount 交易金额 必填,单位分,整数数字型字符串"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 申请退款金额 必填,单位分,整数数字型字符串"`
PayerAmount string `json:"payer_amount" dc:"PayerAmount 实际退款金额 必填,单位分,整数数字型字符串"`
TradeTime string `json:"trade_time,omitempty" dc:"TradeTime 退款时间 可选实际退款时间。yyyyMMddHHmmss"`
OriginLogNo string `json:"origin_log_no,omitempty" dc:"OriginLogNo 原拉卡拉对账单流水号 可选,如果请求中携带,则返回"`
OriginTradeNo string `json:"origin_trade_no,omitempty" dc:"OriginTradeNo 原拉卡拉交易流水号 可选,如果请求中携带,则返回"`
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty" dc:"OriginOutTradeNo 原商户请求流水号 可选,如果请求中携带,则返回"`
UpIssAddData string `json:"up_iss_add_data,omitempty" dc:"UpIssAddData 单品营销附加数据 可选,扫码交易,参与单品营销优惠时返回"`
UpCouponInfo string `json:"up_coupon_info,omitempty" dc:"UpCouponInfo 银联优惠信息 可选,扫码交易,参与单品营销优惠时返回"`
TradeInfo string `json:"trade_info,omitempty" dc:"TradeInfo 出资方信息 可选,扫码交易"`
ChannelRetDesc string `json:"channel_ret_desc" dc:"ChannelRetDesc 返回描述信息 必填"`
}

View File

@ -1,34 +0,0 @@
package refund
// RequestRefund 统一退货基础请求结构体
// 参考文档https://o.lakala.com/#/home/document/detail?id=894
type RequestRefund struct {
ReqTime string `json:"req_time"`
Version string `json:"version"`
ReqData *RequestDataRefund `json:"req_data"`
}
// RequestDataRefund 统一退货请求数据结构体
// 注意origin_out_trade_no、origin_log_no、origin_trade_no至少一个必填调用收银台下单接口拉起交易后发起退款时至少要传两个
// 优先级顺序origin_trade_no > origin_log_no > origin_out_trade_no
type RequestDataRefund struct {
MerchantNo string `json:"merchant_no"` // merchant_no: 商户号 (必填拉卡拉分配的商户号String(15))
TermNo string `json:"term_no"` // term_no: 终端号 (必填拉卡拉分配的终端号String(8))
OutTradeNo string `json:"out_trade_no"` // out_trade_no: 商户请求流水号 (必填商户系统唯一String(32))
RefundAmount string `json:"refund_amount"` // refund_amount: 退款金额 (必填单位分整数数字型字符String(12))
RefundReason string `json:"refund_reason,omitempty"` // refund_reason: 退货原因 (可选String(32))
OriginLogNo string `json:"origin_log_no,omitempty"` // origin_log_no: 拉卡拉对账单流水号 (可选正交易返回的拉卡拉对账单流水号String(14))
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty"` // origin_out_trade_no: 原商户交易流水号 (可选String(32))
OriginTradeNo string `json:"origin_trade_no,omitempty"` // origin_trade_no: 原交易拉卡拉交易订单号 (可选String(32))
LocationInfo *LocationInfo `json:"location_info"` // location_info: 地址位置信息 (必填)
RefundAccMode string `json:"refund_acc_mode,omitempty"` // refund_acc_mode: 退货账户模式 (可选00退货账户余额 05商户余额 06终端余额 30终点账户String(2))
NotifyURL string `json:"notify_url,omitempty"` // notify_url: 后台通知地址 (可选交易结果通知地址String(128))
RefundAmtSts string `json:"refund_amt_sts,omitempty"` // refund_amt_sts: 退货资金状态 (可选00 分账前01 分账后分账交易部分退货的情况需要前端上送交易的分账状态String(2))
}
// LocationInfo 地址位置信息结构体
type LocationInfo struct {
RequestIP string `json:"request_ip"` // request_ip: 请求IP (必填)
Location string `json:"location"` // location: 位置信息 (必填,如经纬度等)
BaseStation string `json:"base_station,omitempty"` // base_station: 基站信息 (可选)
}

View File

@ -1 +0,0 @@
package refundfee

View File

@ -1 +0,0 @@
package refundfee

View File

@ -1 +0,0 @@
package refundfee

View File

@ -1,37 +0,0 @@
package refundquery
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
type RefundQuery[T any] struct {
client *common.Client[T]
}
// NewRefundQuery 创建统一退货查询API实例
func NewRefundQuery[T any](client *common.Client[T]) *RefundQuery[T] {
return &RefundQuery[T]{
client: client,
}
}
// RefundQuery 发起统一退货查询请求
func (api *RefundQuery[T]) RefundQuery(req *RequestDataRefundQuery) (*T, error) {
// 构建请求参数
url := consts.BASE_URL + consts.LKL_UNIFIED_RETURN_REFUND_QUERY_URL
// 构建BaseModel请求
baseReq := RequestRefundQuery{
ReqTime: gtime.Now().Format("YmdHis"),
Version: "3.0",
ReqData: req,
}
// 发送请求
respBody, err := api.client.DoRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}

View File

@ -1,18 +0,0 @@
package refundquery
// RequestRefundQuery 统一退货查询请求结构体
// API文档: https://o.lakala.com/#/home/document/detail?id=893
type RequestRefundQuery struct {
ReqTime string `json:"req_time" dc:"ReqTime 请求时间 格式yyyyMMddHHmmss"`
Version string `json:"version" dc:"Version 版本号 固定值3.0"`
ReqData *RequestDataRefundQuery `json:"req_data" dc:"ReqData 请求数据"`
}
// RequestDataRefundQuery 统一退货查询请求数据结构体
// API文档: https://o.lakala.com/#/home/document/detail?id=893
type RequestDataRefundQuery struct {
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填拉卡拉分配的商户号String(15)"`
TermNo string `json:"term_no" dc:"TermNo 终端号 必填拉卡拉分配的业务终端号String(8)"`
OutTradeNo string `json:"out_trade_no,omitempty" dc:"OutTradeNo 商户交易流水号 选填下单时的商户请求流水号String(32) 与拉卡拉交易流水号二选一"`
TradeNo string `json:"trade_no,omitempty" dc:"TradeNo 拉卡拉交易流水号 选填拉卡拉交易流水号String(32) 与商户交易流水号二选一"`
}

View File

@ -1,56 +0,0 @@
package refundquery
// ResponseRefundQuery 统一退货查询响应结构体
// API文档: https://o.lakala.com/#/home/document/detail?id=893
type ResponseRefundQuery struct {
Code string `json:"code" dc:"Code 响应码 RFD00000#成功、RFD11112#网络请求超时"`
Msg string `json:"msg" dc:"Msg 响应描述"`
Data *ResponseDataRefundQuery `json:"data,omitempty" dc:"Data 响应数据"`
Sign string `json:"sign" dc:"Sign 签名"`
}
// ResponseDataRefundQuery 统一退货查询响应数据结构体
// API文档: https://o.lakala.com/#/home/document/detail?id=893
type ResponseDataRefundQuery struct {
OutTradeNo string `json:"out_trade_no" dc:"OutTradeNo 商户请求流水号 必填,原退款交易商户请求流水号(扫码交易返回)"`
TradeTime string `json:"trade_time" dc:"TradeTime 交易时间 必填交易时间yyyyMMddHHmmss"`
TradeState string `json:"trade_state" dc:"TradeState 交易状态 必填INIT-初始化SUCCESS-交易成功FAIL-交易失败DEAL-交易处理中/未知TIMEOUT-超时未知EXCEPTION-异常"`
TradeNo string `json:"trade_no" dc:"TradeNo 拉卡拉商户订单号 必填,拉卡拉生成的交易流水"`
LogNo string `json:"log_no" dc:"LogNo 拉卡拉对账单流水号 必填,拉卡拉生成的对账单流水号(新增)"`
AccTradeNo string `json:"acc_trade_no,omitempty" dc:"AccTradeNo 账户端交易订单号 选填账户端交易流水号String(32)"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 交易金额 必填"`
PayMode string `json:"pay_mode,omitempty" dc:"PayMode 支付方式 选填00 借记卡 01 贷记卡 02 准贷记卡 银行卡交易返回"`
CrdNo string `json:"crd_no,omitempty" dc:"CrdNo 卡号 选填,脱敏卡号,前六后四,中间用*替换"`
AccountType string `json:"account_type,omitempty" dc:"AccountType 钱包类型 选填微信WECHAT 支付宝ALIPAY 银联UNION 翼支付: BESTPAY 苏宁易付宝: SUNING 扫码交易返回"`
PayerAmount string `json:"payer_amount,omitempty" dc:"PayerAmount 付款人实付金额 选填,实际退款金额,单位分 扫码交易返回"`
AccSettleAmount string `json:"acc_settle_amount,omitempty" dc:"AccSettleAmount 账户端结算金额 选填,账户端应结订单金额,单位分 扫码交易返回"`
AccMdiscountAmount string `json:"acc_mdiscount_amount,omitempty" dc:"AccMdiscountAmount 商户侧优惠金额(账户端) 选填,商户优惠金额,单位分 扫码交易返回"`
AccDiscountAmount string `json:"acc_discount_amount,omitempty" dc:"AccDiscountAmount 账户端优惠金额 选填,拉卡拉优惠金额, 扫码交易返回"`
ChannelRetDesc string `json:"channel_ret_desc" dc:"ChannelRetDesc 返回描述信息 必填code#msgRFD00000#成功、RFD11112#网络请求超时"`
RefundSplitInfo []*RelateOutSplitRspInfo `json:"refund_split_info,omitempty" dc:"RefundSplitInfo 退款拆单信息 选填,合单交易退款查询时返回"`
OriginLogNo string `json:"origin_log_no" dc:"OriginLogNo 拉卡拉对账单流水号 必填,原交易拉卡拉对账单流水号"`
OriginOutTradeNo string `json:"origin_out_trade_no" dc:"OriginOutTradeNo 原商户交易流水号 必填"`
OriginTradeNo string `json:"origin_trade_no" dc:"OriginTradeNo 原交易拉卡拉交易订单号 必填"`
OriginTotalAmount string `json:"origin_total_amount" dc:"OriginTotalAmount 原交易金额 必填,原正交易订单金额"`
RefundType string `json:"refund_type,omitempty" dc:"RefundType 退货模式 选填"`
}
// RelateOutSplitRspInfo 退款拆单信息结构体
// API文档: https://o.lakala.com/#/home/document/detail?id=893
type RelateOutSplitRspInfo struct {
OutSubTradeNo string `json:"out_sub_trade_no" dc:"OutSubTradeNo 外部子退款交易流水号 必填,商户子交易流水号,商户号下唯一"`
MerchantNo string `json:"merchant_no" dc:"MerchantNo 商户号 必填,拉卡拉分配的商户号"`
TermNo string `json:"term_no" dc:"TermNo 终端号 必填,拉卡拉分配的业务终端号"`
RefundAmount string `json:"refund_amount" dc:"RefundAmount 申请退款金额 必填,单位分,整数型字符"`
SubTradeNo string `json:"sub_trade_no,omitempty" dc:"SubTradeNo 拉卡拉子交易流水号 选填"`
SubLogNo string `json:"sub_log_no,omitempty" dc:"SubLogNo 对账单子流水号 选填sub_trade_no后14位"`
TradeState string `json:"trade_state,omitempty" dc:"TradeState 子交易状态 选填SUCCESS-交易成功 FAIL-交易失败"`
ResultCode string `json:"result_code,omitempty" dc:"ResultCode 处理结果码 选填"`
ResultMsg string `json:"result_msg,omitempty" dc:"ResultMsg 处理描述 选填"`
}
// SuccessOrFail 判断交易是否成功
// 返回true表示交易成功false表示交易失败或处理中
func (r *ResponseRefundQuery) SuccessOrFail() bool {
return r.Code == "000000"
}

View File

@ -1,43 +0,0 @@
package unifiedreturn
import (
"context"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/lklsdk/unifiedreturn/mergerefund"
"github.com/black1552/lkl_sdk/lklsdk/unifiedreturn/refund"
"github.com/black1552/lkl_sdk/lklsdk/unifiedreturn/refundquery"
)
type Server[T any] struct {
Client *common.Client[T]
MergeRefound *mergerefund.MergeRefund[T]
Refound *refund.Refund[T]
RefoundQuery *refundquery.RefundQuery[T]
}
// NewServer 创建拉卡拉统一退货服务实例
func NewServer[T any](ctx context.Context, cfgJson string) *Server[T] {
client := common.NewClient[T](ctx, cfgJson)
return &Server[T]{
Client: client,
MergeRefound: mergerefund.NewMergeRefund[T](client),
Refound: refund.NewRefund[T](client),
RefoundQuery: refundquery.NewRefundQuery[T](client),
}
}
// MergeRefund 合单退货
func (u *Server[T]) MergeRefund(req *mergerefund.RequestDataMergeRefund) (*T, error) {
return u.MergeRefound.MergeRefund(req)
}
// Refund 退货
func (u *Server[T]) Refund(req *refund.RequestDataRefund) (*T, error) {
return u.Refound.Refund(req)
}
// RefundQuery 退货查询
func (u *Server[T]) RefundQuery(req *refundquery.RequestDataRefundQuery) (*T, error) {
return u.RefoundQuery.RefundQuery(req)
}

View File

@ -5,7 +5,6 @@ import (
"time" "time"
"github.com/black1552/lkl_sdk/consts" "github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/black1552/lkl_sdk/model" "github.com/black1552/lkl_sdk/model"
"github.com/gogf/gf/v2/crypto/gmd5" "github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gconv"
@ -13,11 +12,11 @@ import (
// UploadFileService 交易服务 // UploadFileService 交易服务
type UploadFileService[T any] struct { type UploadFileService[T any] struct {
client *common.Client[T] client *Client[T]
} }
// NewUploadFileService 创建交易服务实例 // NewUploadFileService 创建交易服务实例
func NewUploadFileService[T any](client *common.Client[T]) *UploadFileService[T] { func NewUploadFileService[T any](client *Client[T]) *UploadFileService[T] {
return &UploadFileService[T]{ return &UploadFileService[T]{
client: client, client: client,
} }
@ -40,30 +39,7 @@ func (t *UploadFileService[T]) UploadFileQuery(req *model.UploadFileReqData) (*T
} }
// 发送请求 // 发送请求
respBody, err := t.client.DoRequest(url, baseReq) respBody, err := t.client.doRequest(url, baseReq)
if err != nil {
return nil, err
}
return respBody, nil
}
func (t *UploadFileService[T]) UploadFileQueryTest(req *model.UploadFileReqData) (*T, error) {
// 构建请求参数
url := consts.BASE_TEST_URL + consts.LKL_UPLOAD_FILE_URL
md5, err := gmd5.Encrypt(gconv.String(time.Now().Unix()))
if err != nil {
return nil, fmt.Errorf("创建ReqId失败")
}
// 构建BaseModel请求
baseReq := model.UploadFileRequest{
Timestamp: gconv.String(time.Now().Unix()),
Ver: "1.0",
ReqId: md5,
ReqData: req,
}
// 发送请求
respBody, err := t.client.DoRequest(url, baseReq)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// ApplyBindRequest 分账关系绑定请求结构体 // ApplyBindRequest 分账关系绑定请求结构体
// 用于发起分账接收方与商户的关系绑定申请 // 用于发起分账接收方与商户的关系绑定申请
// 拉卡拉SDK接口文档分账关系绑定接口 // 拉卡拉SDK接口文档分账关系绑定接口
@ -26,13 +24,11 @@ type ApplyBindReqData struct {
EntrustFileName string `json:"entrustFileName"` // 合作协议附件名称必传长度32 EntrustFileName string `json:"entrustFileName"` // 合作协议附件名称必传长度32
EntrustFilePath string `json:"entrustFilePath"` // 合作协议附件路径必传长度32通过调用附件上传接口获取 EntrustFilePath string `json:"entrustFilePath"` // 合作协议附件路径必传长度32通过调用附件上传接口获取
RetUrl string `json:"retUrl"` // 回调通知地址必传长度128审核通过后通知地址 RetUrl string `json:"retUrl"` // 回调通知地址必传长度128审核通过后通知地址
Attachments []*ApplyBindAttachment `json:"attachments,omitempty"` // 附加资料,可选,集合类型,其他附加资料文件信息 Attachments []struct {
} AttachType string `json:"attachType"` // 附件类型编码必传长度32
type ApplyBindAttachment struct {
AttachType consts.AttType `json:"attachType"` // 附件类型编码必传长度32
AttachName string `json:"attachName"` // 附件名称必传长度32 AttachName string `json:"attachName"` // 附件名称必传长度32
AttachStorePath string `json:"attachStorePath"` // 附件路径必传长度128通过调用附件上传接口获取 AttachStorePath string `json:"attachStorePath"` // 附件路径必传长度128通过调用附件上传接口获取
} `json:"attachments,omitempty"` // 附加资料,可选,集合类型,其他附加资料文件信息
} }
// ApplyBindResponse 分账关系绑定响应结构体 // ApplyBindResponse 分账关系绑定响应结构体

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// ApplyLedgerMerRequest 商户分账业务开通申请请求结构体 // ApplyLedgerMerRequest 商户分账业务开通申请请求结构体
type ApplyLedgerMerRequest struct { type ApplyLedgerMerRequest struct {
ReqData *ApplyLedgerMerReqData `json:"reqData"` // 请求业务数据 ReqData *ApplyLedgerMerReqData `json:"reqData"` // 请求业务数据
@ -21,14 +19,18 @@ type ApplyLedgerMerReqData struct {
SplitLowestRatio float64 `json:"splitLowestRatio"` // 最低分账比例必传长度12百分比支持2位精度取值范围70-70.50 SplitLowestRatio float64 `json:"splitLowestRatio"` // 最低分账比例必传长度12百分比支持2位精度取值范围70-70.50
SplitEntrustFileName string `json:"splitEntrustFileName"` // 分账授权委托书文件名称必传长度64文件格式pdf SplitEntrustFileName string `json:"splitEntrustFileName"` // 分账授权委托书文件名称必传长度64文件格式pdf
SplitEntrustFilePath string `json:"splitEntrustFilePath"` // 分账授权委托书文件路径必传长度64调用附件上传接口获取 SplitEntrustFilePath string `json:"splitEntrustFilePath"` // 分账授权委托书文件路径必传长度64调用附件上传接口获取
SplitRange consts.SplitRange `json:"splitRange"` // 分账范围必传长度32取值说明ALL-全部交易分账(所有交易默认都分账)MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算) SplitRange string `json:"splitRange"` // 分账范围必传长度32取值说明ALL-全部交易分账(所有交易默认都分账)MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算)
SepFundSource consts.SepFundSource `json:"sepFundSource"` // 分账依据非必传长度32取值说明TRA-交易分账BAR-金额分账 SplitFundSource string `json:"splitFundSource"` // 分账依据非必传长度32取值说明TRA-交易分账BAR-金额分账
EleContractNo string `json:"eleContractNo"` // 电子合同编号非必传长度32收单已签约交易电子合同编号供审核人员复核使用 ElecContractId string `json:"elecContractId"` // 电子合同编号非必传长度32收单已签约交易电子合同编号供审核人员复核使用
SplitLaunchMode consts.SplitLaunchMode `json:"splitLaunchMode"` // 分账发起方式非必传长度32取值说明AUTO-自动触发分账POINTTRUE-指定规则分账MANUAL-手动分账 SplitLaunchMode string `json:"splitLaunchMode"` // 分账发起方式非必传长度32取值说明AUTO-自动触发分账POINTTRUE-指定规则分账MANUAL-手动分账
SettleType consts.SplitSettleType `json:"settleType"` // 结算类型非必传长度32取值说明01-主扫现结02-复扫现结03-交易自动结算 SettleType string `json:"settleType"` // 结算类型非必传长度32取值说明01-主扫现结02-复扫现结03-交易自动结算
SplitRuleSource consts.SplitRuleSource `json:"splitRuleSource"` // 分账规则来源条件必传长度32取值说明MER-商户自定规则PLATFORM-平台分润规则(分润规则必传) SplitRuleSource string `json:"splitRuleSource"` // 分账规则来源条件必传长度32取值说明MER-商户自定规则PLATFORM-平台分润规则(分润规则必传)
RetUrl string `json:"retUrl"` // 回调通知地址必传长度128分账申请结果以异步消息或同步返回的方式通知如需无线路由处理也可以通过第三方商户信息查询接口确定结算结果 RetUrl string `json:"retUrl"` // 回调通知地址必传长度128分账申请结果以异步消息或同步返回的方式通知如需无线路由处理也可以通过第三方商户信息查询接口确定结算结果
Attachments []*ApplyBindAttachment `json:"attachments,omitempty"` // 附加资料,可选,集合,其他需附加的文件信息 Attachments []struct {
AttachType string `json:"attachType"` // 附件类型编码必传长度32
AttachName string `json:"attachName"` // 附件名称必传长度32
AttachStorePath string `json:"attachStorePath"` // 附件路径必传长度128调用附件上传接口获取
} `json:"attachments,omitempty"` // 附加资料,可选,集合,其他需附加的文件信息
} }
// ApplyLedgerMerResponse 商户分账业务开通申请响应结构体 // ApplyLedgerMerResponse 商户分账业务开通申请响应结构体

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// ApplyLedgerReceiverRequest 分账接收方创建请求结构体 // ApplyLedgerReceiverRequest 分账接收方创建请求结构体
// 用于向拉卡拉接口发送分账接收方创建请求 // 用于向拉卡拉接口发送分账接收方创建请求
// 包含请求头信息和业务数据 // 包含请求头信息和业务数据
@ -37,7 +35,7 @@ type ApplyLedgerReceiverReqData struct {
// 法人姓名可选长度32取值说明收款账户类型为对公必须上送 // 法人姓名可选长度32取值说明收款账户类型为对公必须上送
LegalPersonName string `json:"legalPersonName"` LegalPersonName string `json:"legalPersonName"`
// 法人证件类型可选长度32取值说明17身份证18护照19港澳居民来往内地通行证20台湾居民来往内地通行证收款账户类型为对公必须上送身份证外类型先咨询后再使用 // 法人证件类型可选长度32取值说明17身份证18护照19港澳居民来往内地通行证20台湾居民来往内地通行证收款账户类型为对公必须上送身份证外类型先咨询后再使用
LegalPersonCertificateType consts.AcctCertificateType `json:"legalPersonCertificateType"` LegalPersonCertificateType string `json:"legalPersonCertificateType"`
// 法人证件号可选长度32取值说明收款账户类型为对公必须上送 // 法人证件号可选长度32取值说明收款账户类型为对公必须上送
LegalPersonCertificateNo string `json:"legalPersonCertificateNo"` LegalPersonCertificateNo string `json:"legalPersonCertificateNo"`
// 收款账户卡号必传长度32 // 收款账户卡号必传长度32
@ -45,9 +43,9 @@ type ApplyLedgerReceiverReqData struct {
// 收款账户名称必传长度32 // 收款账户名称必传长度32
AcctName string `json:"acctName"` AcctName string `json:"acctName"`
// 收款账户类型代码必传长度32取值说明57对公58对私 // 收款账户类型代码必传长度32取值说明57对公58对私
AcctTypeCode consts.AcctTypeCode `json:"acctTypeCode"` AcctTypeCode string `json:"acctTypeCode"`
// 收款账户证件类型必传长度32取值说明17身份证18护照19港澳居民来往内地通行证20台湾居民来往内地通行证身份证外类型先咨询后再使用 // 收款账户证件类型必传长度32取值说明17身份证18护照19港澳居民来往内地通行证20台湾居民来往内地通行证身份证外类型先咨询后再使用
AcctCertificateType consts.AcctCertificateType `json:"acctCertificateType"` AcctCertificateType string `json:"acctCertificateType"`
// 收款账户证件号必传长度32 // 收款账户证件号必传长度32
AcctCertificateNo string `json:"acctCertificateNo"` AcctCertificateNo string `json:"acctCertificateNo"`
// 收款账户开户行号必传长度32取值说明参照FBI.N信息查询仅支持对私结算账户 // 收款账户开户行号必传长度32取值说明参照FBI.N信息查询仅支持对私结算账户
@ -57,7 +55,14 @@ type ApplyLedgerReceiverReqData struct {
// 收款账户清算行行号必传长度32取值说明参照FBI.N信息查询仅支持对私结算账户 // 收款账户清算行行号必传长度32取值说明参照FBI.N信息查询仅支持对私结算账户
AcctClearBankCode string `json:"acctClearBankCode"` AcctClearBankCode string `json:"acctClearBankCode"`
// 接收方附件资料,可选,集合 // 接收方附件资料,可选,集合
AttachList []*ApplyBindAttachment `json:"attachList"` AttachList []struct {
// 附件名称可选长度32
AttachName string `json:"attachName"`
// 附件路径可选长度32取值说明调用进件附件上传接口获取到附件路径
AttachStorePath string `json:"attachStorePath"`
// 附件类型编码可选长度32
AttachType string `json:"attachType"`
} `json:"attachList"`
// 提款类型可选长度32取值说明01主动提款03交易自动结算不填默认01 // 提款类型可选长度32取值说明01主动提款03交易自动结算不填默认01
SettleType string `json:"settleType"` SettleType string `json:"settleType"`
} }

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// BalanceQueryRequest 余额查询请求结构体 // BalanceQueryRequest 余额查询请求结构体
// 用于向拉卡拉接口发送余额查询请求 // 用于向拉卡拉接口发送余额查询请求
// 包含请求头信息和业务数据 // 包含请求头信息和业务数据
@ -25,9 +23,9 @@ type BalanceQueryReqData struct {
// 账号若该参数上送则payType将无效非必传最大长度32 // 账号若该参数上送则payType将无效非必传最大长度32
PayNo string `json:"pay_no"` PayNo string `json:"pay_no"`
// 账号类型01收款账户02付款账户03分账商户账户04分账接收方账户05充值代付账户06结算代付账户-未上送则默认01非必传最大长度32 // 账号类型01收款账户02付款账户03分账商户账户04分账接收方账户05充值代付账户06结算代付账户-未上送则默认01非必传最大长度32
PayType consts.PayType `json:"pay_type"` PayType string `json:"pay_type"`
// 账户标志01:一般账户;03:虚户)-未上送则默认01非必传最大长度32 // 账户标志01:一般账户;03:虚户)-未上送则默认01非必传最大长度32
MgtFlag consts.MgtFlag `json:"mgt_flag"` MgtFlag string `json:"mgt_flag"`
} }
// BalanceQueryResponse 余额查询响应结构体 // BalanceQueryResponse 余额查询响应结构体
@ -35,30 +33,30 @@ type BalanceQueryReqData struct {
// 包含响应状态码、消息和业务数据 // 包含响应状态码、消息和业务数据
type BalanceQueryResponse struct { type BalanceQueryResponse struct {
// 响应状态码000000 // 响应状态码000000
Code string `json:"retCode"` Code string `json:"code"`
// 响应消息 // 响应消息
Msg string `json:"retMsg"` Msg string `json:"msg"`
// 响应业务数据当code为SACS0000时返回 // 响应业务数据当code为SACS0000时返回
RespData *BalanceQueryRespData `json:"respData"` RespData *BalanceQueryRespData `json:"resp_data"`
} }
// BalanceQueryRespData 余额查询响应业务数据结构体 // BalanceQueryRespData 余额查询响应业务数据结构体
// 包含余额查询返回的具体账户信息 // 包含余额查询返回的具体账户信息
type BalanceQueryRespData struct { type BalanceQueryRespData struct {
// 账号,必传 // 账号,必传
PayNo string `json:"payNo"` PayNo string `json:"pay_no"`
// 账户类型,必传 // 账户类型,必传
PayType string `json:"payType"` PayType string `json:"pay_type"`
// 账户状态必传取值说明CLOSE销户NORMAL正常FREEZE冻结STOPAY止付 // 账户状态必传取值说明CLOSE销户NORMAL正常FREEZE冻结STOPAY止付
AcctSt string `json:"acctSt"` AcctSt string `json:"acct_st"`
// 预付余额(单位元),必传 // 预付余额(单位元),必传
ForceBalance string `json:"forceBalance"` ForceBalance string `json:"force_balance"`
// 上日余额(单位元)-该字段已废弃使用,必传 // 上日余额(单位元)-该字段已废弃使用,必传
HisBalance string `json:"hisBalance"` HisBalance string `json:"his_balance"`
// 实时余额(单位元),必传 // 实时余额(单位元),必传
ReBalance string `json:"reBalance"` ReBalance string `json:"re_balance"`
// 当前可用余额(单位元),必传 // 当前可用余额(单位元),必传
CuBalance string `json:"cuBalance"` CuBalance string `json:"cu_balance"`
} }
// SuccessOrFail 判断余额查询请求是否成功 // SuccessOrFail 判断余额查询请求是否成功

View File

@ -1,75 +0,0 @@
// Package model 提供数据模型定义
package model
// MerValidateRequest 商户进件校验请求
// 接入方在入网前,对商户名称、法人信息、结算人信息做敏感词和黑名单、反洗钱的校验
// 参考文档: https://o.lakala.com/#/home/document/detail?id=93
type MerValidateRequest struct {
// ReqData 请求业务参数
ReqData *MerValidateRequestData `json:"reqData"`
// Ver 版本号
Ver string `json:"ver"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// ReqId 请求ID
ReqId string `json:"reqId"`
}
// MerValidateRequestData 商户进件校验请求业务参数
type MerValidateRequestData struct {
// Version 接口版本号
Version string `json:"version"`
// OrderNo 订单编号(便于后续跟踪排查问题及核对报文)
// 14位年月日时24小时制分秒+8位的随机数不重复2021020112000012345678
OrderNo string `json:"orderNo"`
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// MerRegName 商户注册名称(可传)
MerRegName string `json:"merRegName"`
// MerBizName 商户经营名称(可传)
MerBizName string `json:"merBizName"`
// MerBlis 营业执照(可传)
MerBlis string `json:"merBlis"`
// LarIdcard 法人身份证号(可传)
LarIdcard string `json:"larIdcard"`
// AcctNo 结算账号(可传)
AcctNo string `json:"acctNo"`
// AcctIdcard 结算人证件号(可传)
AcctIdcard string `json:"acctIdcard"`
}
// MerValidateResponse 商户进件校验响应
type MerValidateResponse struct {
// Appid 应用ID
Appid string `json:"appid"`
// CmdRetCode 全局返回码
CmdRetCode string `json:"cmdRetCode"`
// ReqId 请求ID
ReqId string `json:"reqId"`
// md 随机字符串
Md string `json:"md"`
// RespData 响应业务参数
RespData *MerValidateResponseData `json:"respData"`
// RetCode 返回码
RetCode string `json:"retCode"`
// RetMsg 返回消息
RetMsg string `json:"retMsg"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// Ver 版本号
Ver string `json:"ver"`
}
type MerValidateResponseData struct {
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// OrderNo 订单号
OrderNo string `json:"orderNo"`
}
func (t *MerValidateResponse) SuccessOrFail() bool {
return t.RetCode == "000000"
}

View File

@ -1,111 +0,0 @@
package model
import (
"github.com/black1552/lkl_sdk/consts"
)
// MerchantApplyRequest 商户进件请求结构体
type MerchantApplyRequest struct {
ReqId string `json:"reqId"` // 请求时间格式为yyyyMMddHHmmss必填
Timestamp int64 `json:"timestamp"` // 接口版本,固定值"1.0",必填
Ver string `json:"ver"` // 接口版本,固定值"1.0",必填
ReqData *MerchantApplyReqData `json:"reqData"` // 请求业务参数,必填
}
// MerchantApplyReqData 商户进件请求业务数据结构体
type MerchantApplyReqData struct {
Version string `json:"version"` // 接口版本号,固定值"1.0",必填
OrderNo string `json:"orderNo"` // 订单编号用于后续联调时查询及核对报文必填建议14位年月日时分秒+8位随机数
PosType consts.PosType `json:"posType"` // POS类型必填按接入系统做控制参见POS类型字典表
OrgCode string `json:"orgCode"` // 机构代码,合作方在拉卡拉的标识,请联系业务员,必填
MerRegName string `json:"merRegName"` // 商户注册名称必填长度不小于4个汉字8~40字符不可为纯数字
MerBizName string `json:"merBizName"` // 商户经营名称选填为空时同商户注册名称4~64字符不可为纯数字
MerRegDistCode consts.AddrCode `json:"merRegDistCode"` // 商户地区代码,必填,参见地区文档
MerRegAddr string `json:"merRegAddr"` // 商户详细地址必填去除省、市、区后的详细地址6-200字符
MccCode consts.Mcc `json:"mccCode"` // 商户MCC编号必填银联商户类别代码
MerBlisName string `json:"merBlisName"` // 营业执照名称,选填,小微商户可不传,其它必传
MerBlis string `json:"merBlis"` // 营业执照号,选填,小微商户可不传,对公进件必传,且不可与法人证件相同
MerBlisStDt string `json:"merBlisStDt"` // 营业执照开始日期选填格式yyyy-MM-dd有营业执照时必传
MerBlisExpDt string `json:"merBlisExpDt"` // 营业执照有效期选填格式yyyy-MM-dd有营业执照时必传
MerBusiContent consts.MerBusiContent `json:"merBusiContent"` // 商户经营内容,必填,参见经营内容字典表
LarName string `json:"larName"` // 商户法人姓名,必填
LarIdType consts.AccIdType `json:"larIdType"` // 法人证件类型,必填,支持其他证件类型,见证件类型字典表
LarIdcard string `json:"larIdcard"` // 法人身份证号码,必填
LarIdcardStDt string `json:"larIdcardStDt"` // 法人身份证开始日期必填格式yyyy-MM-dd
LarIdcardExpDt string `json:"larIdcardExpDt"` // 法人身份证有效期必填格式yyyy-MM-dd
MerContactMobile string `json:"merContactMobile"` // 商户联系人手机号码,必填
MerContactName string `json:"merContactName"` // 商户联系人姓名,必填
ShopName string `json:"shopName"` // 网点名称,选填,不填取商户注册名称
ShopDistCode string `json:"shopDistCode"` // 网点地址区划代码,选填,不填取商户地区代码
ShopAddr string `json:"shopAddr"` // 网点详细地址,选填,不填取商户详细地址
ShopContactName string `json:"shopContactName"` // 网点联系人名称,选填,不填取商户联系人姓名
ShopContactMobile string `json:"shopContactMobile"` // 网点联系人手机号,选填,不填取商户联系人手机号码
OpenningBankCode string `json:"openningBankCode"` // 结算账户开户行号,必填,可根据结算卡信息进行查询
OpenningBankName string `json:"openningBankName"` // 结算账户开户行名称,必填,可根据结算卡信息进行查询
ClearingBankCode string `json:"clearingBankCode"` // 结算账户清算行号,必填,可根据结算卡信息进行查询
AcctNo string `json:"acctNo"` // 结算账户账号,必填
AcctName string `json:"acctName"` // 结算账户名称,必填
AcctTypeCode consts.AcctTypeCode `json:"acctTypeCode"` // 结算账户性质必填57为对公58为对私
SettlePeriod consts.SettlePeriod `json:"settlePeriod"` // 结算周期,必填,参见结算周期表
ClearDt consts.ClearDt `json:"clearDt"` // 日切时间选填参见日切时间字典表默认TWENTY_THREE
AcctIdType consts.AccIdType `json:"acctIdType"` // 结算人证件类型,选填,为空时判断为同法人
AcctIdcard string `json:"acctIdcard"` // 结算人证件号码,选填,为空时判断为同法人
AcctIdDt string `json:"acctIdDt"` // 结算人证件有效期,选填,为空时判断为同法人
DevSerialNo string `json:"devSerialNo"` // 终端设备序列号,选填
DevTypeName string `json:"devTypeName"` // 设备型号,选填
TermVer string `json:"termVer"` // 终端版本号,选填
SalesStaff string `json:"salesStaff"` // 销售人员,选填
TermNum string `json:"termNum"` // 终端数量选填1-5最大5个终端
RetUrl string `json:"retUrl"` // 回调地址,必填
FeeData []*FeeData `json:"feeData"` // 费率信息集合,必填
FileData []*FileData `json:"fileData"` // 附件集合,选填
ContractNo string `json:"contractNo"` // 电子合同编号,选填,部分进件类型要求录入
FeeAssumeType string `json:"feeAssumeType"` // 大额理财-手续费承担方,选填,大额理财进件时必传
AmountOfMonth string `json:"amountOfMonth"` // 大额理财-最小月交易额,选填
ServiceFee string `json:"serviceFee"` // 大额理财-收取服务费,选填
}
// FeeData 费率信息集合结构体
type FeeData struct {
FeeRateTypeCode consts.FeeRateTypeCode `json:"feeRateTypeCode"` // 费率类型,必填,参见费率类型字典表
FeeRateTypeName string `json:"feeRateTypeName"` // 费率类型名称,必填,如银行卡借记卡
FeeRatePct string `json:"feeRatePct"` // 手续费费率(%)必填如0.6
FeeUpperAmtPcnt string `json:"feeUpperAmtPcnt"` // 单笔交易手续费封顶,选填,默认不封顶,单位(元)
FeeLowerAmtPcnt string `json:"feeLowerAmtPcnt"` // 单笔交易手续费保底,选填,默认无保底,单位(元)
FeeRateSdt string `json:"feeRateSdt"` // 手续费生效日期,选填,默认为进件日期
}
// FileData 附件集合结构体
type FileData struct {
AttFileId string `json:"attFileId"` // 文件编号/附件上传后返回的编号,必填
AttType consts.AcctTypeCode `json:"attType"` // 附件类型,必填
}
// MerchantApplyResponse 商户进件响应结构体
type MerchantApplyResponse struct {
RetCode string `json:"retCode"` // 响应码,成功为"0000",其他为错误码
RetMsg string `json:"retMsg"` // 响应描述
Timestamp int64 `json:"timestamp"` // 响应描述
Md string `json:"md"`
Ver string `json:"ver"` // 响应描述
ReqId string `json:"reqId"` // 响应描述
CmdRetCode string `json:"cmdRetCode"` // 响应描述
RespData *MerchantApplyRespData `json:"respData"` // 响应业务数据,成功时返回
}
// MerchantApplyRespData 商户进件响应业务数据结构体
type MerchantApplyRespData struct {
OrgCode string `json:"orgCode"` // 机构代码
OrderNo string `json:"orderNo"` // 订单号
ContractId string `json:"contractId"` // 进件ID用于后续查询进件结果
}
func (t *MerchantApplyResponse) SuccessOrFail() bool {
return t.RetCode == "000000"
}

View File

@ -1,9 +1,6 @@
package model package model
import ( import "github.com/gogf/gf/v2/os/gtime"
"github.com/black1552/lkl_sdk/consts"
"github.com/gogf/gf/v2/os/gtime"
)
// MergePreorder 主扫合单交易请求结构体 // MergePreorder 主扫合单交易请求结构体
type MergePreorder struct { type MergePreorder struct {
@ -18,8 +15,8 @@ type MergePreorderReqData struct {
TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32),必填 TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32),必填
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号商户系统唯一String(32),必填 OutTradeNo string `json:"out_trade_no"` // 商户交易流水号商户系统唯一String(32),必填
OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息List必填 OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息List必填
AccountType consts.AccountType `json:"account_type"` // 钱包类型微信WECHAT 支付宝ALIPAY 银联UQRCODEPAY 京东钱包JDString(32),必填 AccountType string `json:"account_type"` // 钱包类型微信WECHAT 支付宝ALIPAY 银联UQRCODEPAY 京东钱包JDString(32),必填
TransType consts.TransType `json:"trans_type"` // 接入方式41:NATIVE扫码支付(仅ALIPAY支持) 51:JSAPI微信公众号支付支付宝服务窗支付银联JS支付支付宝JS支付、拉卡拉钱包支付71:微信小程序支付 81:支付宝H5支付需特殊商户账户端支持String(2),必填 TransType string `json:"trans_type"` // 接入方式41:NATIVE扫码支付(仅ALIPAY支持) 51:JSAPI微信公众号支付支付宝服务窗支付银联JS支付支付宝JS支付、拉卡拉钱包支付71:微信小程序支付 81:支付宝H5支付需特殊商户账户端支持String(2),必填
TotalAmount string `json:"total_amount"` // 金额单位分整数型字符String(12),必填 TotalAmount string `json:"total_amount"` // 金额单位分整数型字符String(12),必填
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息Object风控要求必送必填 LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息Object风控要求必送必填
BusiMode string `json:"busi_mode"` // 业务模式ACQ-收单 PAY-付款不填,默认为"ACQ-收单"String(8),选填 BusiMode string `json:"busi_mode"` // 业务模式ACQ-收单 PAY-付款不填,默认为"ACQ-收单"String(8),选填

View File

@ -1,29 +0,0 @@
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"
}

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// OrderSplitLedgerRequest 订单分账请求结构体 // OrderSplitLedgerRequest 订单分账请求结构体
// 用于发起订单分账操作,支持向多个接收方进行分账 // 用于发起订单分账操作,支持向多个接收方进行分账
// 拉卡拉SDK接口文档订单分账接口 // 拉卡拉SDK接口文档订单分账接口
@ -22,7 +20,7 @@ type OrderSplitLedgerReqData struct {
OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号必传长度32每个商户号下唯一否则会校验失败 OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号必传长度32每个商户号下唯一否则会校验失败
TotalAmt string `json:"total_amt"` // 分账总金额必传长度15单位为分 TotalAmt string `json:"total_amt"` // 分账总金额必传长度15单位为分
LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号条件必传长度16 LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号条件必传长度16
CalType consts.CalType `json:"cal_type"` // 分账计算类型条件必传长度2取值说明0-按照指定金额1-按照指定比例默认0 CalType string `json:"cal_type"` // 分账计算类型条件必传长度2取值说明0-按照指定金额1-按照指定比例默认0
NotifyUrl string `json:"notify_url"` // 回调地址条件必传长度128分账、分账撤销或分账回退时通过该地址通知商户最终处理结果不传时不回调 NotifyUrl string `json:"notify_url"` // 回调地址条件必传长度128分账、分账撤销或分账回退时通过该地址通知商户最终处理结果不传时不回调
RecvDatas []*OrderSplitLedgerRecvDatas `json:"recv_datas,omitempty"` // 分账接收数据对象,条件必传,列表类型,分账接收方编号必须已创建 RecvDatas []*OrderSplitLedgerRecvDatas `json:"recv_datas,omitempty"` // 分账接收数据对象,条件必传,列表类型,分账接收方编号必须已创建
} }

View File

@ -1,40 +0,0 @@
package model
type OrderSplitLedgerFallbackRequest struct {
ReqData *OrderSplitLedgerFallbackReqData `json:"req_data"` // 请求业务数据
Version string `json:"version"` // 接口版本号
ReqTime string `json:"req_time"` // 请求时间格式为yyyyMMddHHmmss
}
type OrderSplitLedgerFallbackReqData struct {
MerchantNo string `json:"merchant_no"` // 商户号必传长度32
OriginSeparateNo string `json:"origin_separate_no"` // 原分账单号必传长度32
OutSeparateNo string `json:"out_separate_no"` // 外部分账单号必传长度32
OriginOutSeparateNo string `json:"origin_out_separate_no"` // 原外部分账单号必传长度32
FallbackReason string `json:"fallback_reason"` // 回退原因必传长度255
TotalAmt string `json:"total_amt"` // 总金额必传长度15
OriginRecvDatas []*OrderSplitLedgerOriginRecvDatas `json:"origin_recv_datas"` // 原分账接收数据必传数组长度1-100
}
type OrderSplitLedgerOriginRecvDatas struct {
RecvNo string `json:"recv_no"` // 原分账接收号必传长度32
Amt string `json:"amt"` // 原分账接收金额必传长度15
}
type OrderSplitLedgerFallbackResponse struct {
Msg string `json:"msg"` // 消息
RespTime string `json:"resp_time"` // 响应时间
Code string `json:"code"` // 响应码 SACS0000表示成功
RespData struct {
OutSeparateNo string `json:"out_separate_no"` // 外部分账单号必传长度32
TotalAmt string `json:"total_amt"` // 总金额必传长度15
OriginOutSeparateNo string `json:"origin_out_separate_no"` // 原外部分账单号必传长度32
OriginSeparateNo string `json:"origin_separate_no"` // 原分账单号必传长度32
Status string `json:"status"` // 状态必传长度1
SeparateNo string `json:"separate_no"` // 分账单号必传长度32
}
}
func (s *OrderSplitLedgerFallbackResponse) SuccessOrFail() bool {
return s.Code == "SACS0000"
}

View File

@ -1,9 +1,6 @@
package model package model
import ( import "github.com/gogf/gf/v2/os/gtime"
"github.com/black1552/lkl_sdk/consts"
"github.com/gogf/gf/v2/os/gtime"
)
// Preorder 预下单请求结构体 // Preorder 预下单请求结构体
type Preorder struct { type Preorder struct {
@ -17,17 +14,15 @@ type PreorderReqData struct {
MerchantNo string `json:"merchant_no"` // 商户号拉卡拉分配的商户号String(32) MerchantNo string `json:"merchant_no"` // 商户号拉卡拉分配的商户号String(32)
TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32) TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32)
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号商户系统唯一对应数据库表中外请求流水号String(32) OutTradeNo string `json:"out_trade_no"` // 商户交易流水号商户系统唯一对应数据库表中外请求流水号String(32)
AccountType consts.AccountType `json:"account_type"` // 钱包类型微信WECHAT 支付宝ALIPAY 银联UQRCODEPAY 翼支付BESTPAY 苏宁易付宝SUNING 拉卡拉支付账户LKLACC 网联小钱包NUCSPAY 京东钱包JDString(32) AccountType string `json:"account_type"` // 钱包类型微信WECHAT 支付宝ALIPAY 银联UQRCODEPAY 翼支付BESTPAY 苏宁易付宝SUNING 拉卡拉支付账户LKLACC 网联小钱包NUCSPAY 京东钱包JDString(32)
TransType consts.TransType `json:"trans_type"` // 接入方式41:NATIVEALIPAY, 云闪付支持, 京东白条分期51:JSAPI微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期71:微信小程序支付61:APP支付微信APP支付String(2) TransType string `json:"trans_type"` // 接入方式41:NATIVEALIPAY, 云闪付支持, 京东白条分期51:JSAPI微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期71:微信小程序支付61:APP支付微信APP支付String(2)
TotalAmount string `json:"total_amount"` // 金额单位分整数型字符String(12) TotalAmount string `json:"total_amount"` // 金额单位分整数型字符String(12)
NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下则按此地址通知商户String(128) NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下则按此地址通知商户String(128)
SettleType consts.SettleType `json:"settle_type"` // “0”或者空常规结算方式如需接拉卡拉分账通需传“1”商户未开通分账之前切记不用上送此参数。
LocationInfo struct { LocationInfo struct {
RequestIp string `json:"request_ip"` // 请求方IP地址存在必填格式如36.45.36.95String(64) RequestIp string `json:"request_ip"` // 请求方IP地址存在必填格式如36.45.36.95String(64)
Location string `json:"location"` // 纬度,经度,商户终端的地理位置,银联二维码交易必填,整体格式:纬度,经度,+表示北纬、东经,-表示南纬、西经。经度格式1位正负号+3位整数+1位小数点+5位小数纬度格式1位正负号+2位整数+1位小数点+6位小数举例+31.221345,+121.12345String(32) Location string `json:"location"` // 纬度,经度,商户终端的地理位置,银联二维码交易必填,整体格式:纬度,经度,+表示北纬、东经,-表示南纬、西经。经度格式1位正负号+3位整数+1位小数点+5位小数纬度格式1位正负号+2位整数+1位小数点+6位小数举例+31.221345,+121.12345String(32)
} `json:"location_info"` // 地址位置信息Object } `json:"location_info"` // 地址位置信息Object
Subject string `json:"subject"` // 订单标题用于简单描述订单或商品主题传输给账户端账户端控制实际最多42个字节微信支付必送String(42) Subject string `json:"subject"` // 订单标题用于简单描述订单或商品主题传输给账户端账户端控制实际最多42个字节微信支付必送String(42)
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户业务字段Object
} }
func NewPreorder(param *PreorderReqData) *Preorder { func NewPreorder(param *PreorderReqData) *Preorder {
@ -42,7 +37,7 @@ func NewPreorder(param *PreorderReqData) *Preorder {
type PreorderResponse struct { type PreorderResponse struct {
Code string `json:"code"` // 响应码BBS00000表示成功 Code string `json:"code"` // 响应码BBS00000表示成功
Msg string `json:"msg"` // 响应信息,对响应码的文字描述 Msg string `json:"msg"` // 响应信息,对响应码的文字描述
ReqData *ReqData `json:"resp_data"` // 响应业务数据 ReqData ReqData `json:"resp_data"` // 响应业务数据
RespTime string `json:"resp_time"` // 响应时间 RespTime string `json:"resp_time"` // 响应时间
} }
@ -54,7 +49,8 @@ type ReqData struct {
LogNo string `json:"log_no"` // 拉卡拉对账单流水号 LogNo string `json:"log_no"` // 拉卡拉对账单流水号
SettleMerchantNo string `json:"settle_merchant_no"` // 结算商户号 SettleMerchantNo string `json:"settle_merchant_no"` // 结算商户号
SettleTermNo string `json:"settle_term_no"` // 结算终端号 SettleTermNo string `json:"settle_term_no"` // 结算终端号
AccRespFields *WxPreorderResponse `json:"acc_resp_fields"` // 支付通道返回的具体信息 AccRespFields WxPreorderResponse `json:"acc_resp_fields"` // 支付通道返回的具体信息
} }
// WxPreorderResponse 支付通道返回的具体信息 // WxPreorderResponse 支付通道返回的具体信息

View File

@ -5,11 +5,11 @@ package model
// 包含请求头信息和业务数据 // 包含请求头信息和业务数据
type QueryLedgerMerRequest struct { type QueryLedgerMerRequest struct {
// 请求业务数据 // 请求业务数据
ReqData *QueryLedgerMerReqData `json:"reqData"` ReqData *QueryLedgerMerReqData `json:"req_data"`
// 接口版本号 // 接口版本号
Version string `json:"version"` Version string `json:"version"`
// 请求时间格式为yyyyMMddHHmmss // 请求时间格式为yyyyMMddHHmmss
ReqTime string `json:"reqTime"` ReqTime string `json:"req_time"`
} }
// QueryLedgerMerReqData 分账商户查询请求业务数据结构体 // QueryLedgerMerReqData 分账商户查询请求业务数据结构体
@ -19,13 +19,13 @@ type QueryLedgerMerReqData struct {
// 接口版本号必传长度8取值说明1.0 // 接口版本号必传长度8取值说明1.0
Version string `json:"version"` Version string `json:"version"`
// 订单编号便于后续跟踪排查问题及核对报文必传长度32取值说明14位年月日24小时制分秒+8位的随机数不重复 // 订单编号便于后续跟踪排查问题及核对报文必传长度32取值说明14位年月日24小时制分秒+8位的随机数不重复
OrderNo string `json:"orderNo"` OrderNo string `json:"order_no"`
// 机构代码必传长度32 // 机构代码必传长度32
OrgCode string `json:"orgCode"` OrgCode string `json:"org_code"`
// 拉卡拉内部商户号可选长度32取值说明拉卡拉内部商户号和银联商户号必须传一个都送以内部商户号为准 // 拉卡拉内部商户号可选长度32取值说明拉卡拉内部商户号和银联商户号必须传一个都送以内部商户号为准
MerInnerNo string `json:"merInnerNo"` MerInnerNo string `json:"mer_inner_no"`
// 银联商户号可选长度32取值说明拉卡拉内部商户号和银联商户号必须传一个都送以内部商户号为准 // 银联商户号可选长度32取值说明拉卡拉内部商户号和银联商户号必须传一个都送以内部商户号为准
MerCupNo string `json:"merCupNo"` MerCupNo string `json:"mer_cup_no"`
} }
// QueryLedgerMerResponse 分账商户查询响应结构体 // QueryLedgerMerResponse 分账商户查询响应结构体
@ -33,58 +33,58 @@ type QueryLedgerMerReqData struct {
// 包含响应状态码、消息和业务数据 // 包含响应状态码、消息和业务数据
type QueryLedgerMerResponse struct { type QueryLedgerMerResponse struct {
// 响应状态码000000表示成功 // 响应状态码000000表示成功
RetCode string `json:"retCode"` Code string `json:"code"`
// 响应消息 // 响应消息
RetMsg string `json:"retMsg"` Msg string `json:"msg"`
// 响应业务数据当code为000000时返回 // 响应业务数据当code为000000时返回
RespData *QueryLedgerMerRespData `json:"respData"` RespData *QueryLedgerMerRespData `json:"resp_data"`
} }
// QueryLedgerMerRespData 分账商户查询响应业务数据结构体 // QueryLedgerMerRespData 分账商户查询响应业务数据结构体
// 包含分账商户查询返回的具体业务信息 // 包含分账商户查询返回的具体业务信息
type QueryLedgerMerRespData struct { type QueryLedgerMerRespData struct {
// 分账商户机构号 // 分账商户机构号
OrgId string `json:"orgId"` OrgId string `json:"org_id"`
// 分账商户机构名称 // 分账商户机构名称
OrgName string `json:"orgName"` OrgName string `json:"org_name"`
// 拉卡拉内部商户号 // 拉卡拉内部商户号
MerInnerNo string `json:"merInnerNo"` MerInnerNo string `json:"mer_inner_no"`
// 银联商户号 // 银联商户号
MerCupNo string `json:"merCupNo"` MerCupNo string `json:"mer_cup_no"`
// 最低分账比例百分比支持2位精度取值说明70或70.50 // 最低分账比例百分比支持2位精度取值说明70或70.50
SplitLowestRatio float64 `json:"splitLowestRatio"` SplitLowestRatio string `json:"split_lowest_ratio"`
// 商户分账状态取值说明VALID启用INVALID禁用 // 商户分账状态取值说明VALID启用INVALID禁用
SplitStatus string `json:"splitStatus"` SplitStatus string `json:"split_status"`
// 分账范围取值说明ALL全部交易分账(商户所有交易默认待分账)MARK标记交易分账(只有带分账标识交易待分账,其余交易正常结算)默认MARK // 分账范围取值说明ALL全部交易分账(商户所有交易默认待分账)MARK标记交易分账(只有带分账标识交易待分账,其余交易正常结算)默认MARK
SplitRange string `json:"splitRange"` SplitRange string `json:"split_range"`
// 分账依据取值说明TR或空交易分账BA余额分账默认TR交易分账 // 分账依据取值说明TR或空交易分账BA余额分账默认TR交易分账
SepFundSource string `json:"sepFundSource"` SepFundSource string `json:"sep_fund_source"`
// 平台ID取值说明如果商户和绑定平台分账返回平台ID // 平台ID取值说明如果商户和绑定平台分账返回平台ID
PlatformId string `json:"platformId"` PlatformId string `json:"platform_id"`
// 分账发起方式取值说明AUTO自动规则分账POINTRULE指定规则分账MANUAL手动规则分账 // 分账发起方式取值说明AUTO自动规则分账POINTRULE指定规则分账MANUAL手动规则分账
SplitLaunchMode string `json:"splitLaunchMode"` SplitLaunchMode string `json:"split_launch_mode"`
// 分账规则来源取值说明MER商户分账规则PLATFORM平台分账规则 // 分账规则来源取值说明MER商户分账规则PLATFORM平台分账规则
SplitRuleSource string `json:"splitRuleSource"` SplitRuleSource string `json:"split_rule_source"`
// 已绑定接收方列表 // 已绑定接收方列表
BindRelations []*BindRelation `json:"bindRelations"` BindRelations []BindRelation `json:"bind_relations"`
} }
// BindRelation 已绑定接收方信息结构体 // BindRelation 已绑定接收方信息结构体
// 用于表示分账商户已绑定的接收方信息 // 用于表示分账商户已绑定的接收方信息
type BindRelation struct { type BindRelation struct {
// 拉卡拉内部商户号 // 拉卡拉内部商户号
MerInnerNo string `json:"merInnerNo"` MerInnerNo string `json:"mer_inner_no"`
// 银联商户号 // 银联商户号
MerCupNo string `json:"merCupNo"` MerCupNo string `json:"mer_cup_no"`
// 接收方编号 // 接收方编号
ReceiverNo string `json:"receiverNo"` ReceiverNo string `json:"receiver_no"`
// 接收方编号名称 // 接收方编号名称
ReceiverName string `json:"receiverName"` ReceiverName string `json:"receiver_name"`
} }
// SuccessOrFail 判断分账商户查询请求是否成功 // SuccessOrFail 判断分账商户查询请求是否成功
// 成功条件响应码为000000 // 成功条件响应码为000000
// 返回值true表示成功false表示失败 // 返回值true表示成功false表示失败
func (resp *QueryLedgerMerResponse) SuccessOrFail() bool { func (resp *QueryLedgerMerResponse) SuccessOrFail() bool {
return resp.RetCode == "000000" return resp.Code == "000000"
} }

View File

@ -1,107 +0,0 @@
// Package model 提供数据模型定义
package model
// QueryMerRequest 商户进件信息查询请求
// 接入方通过开放平台查询进件信息,返回报文同进件审核完成主动通知报文
// 参考文档: https://o.lakala.com/#/home/document/detail?id=102
type QueryMerRequest struct {
// ReqData 请求业务参数
ReqData *QueryMerRequestData `json:"reqData"`
// Ver 版本号
Ver string `json:"ver"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// ReqId 请求ID
ReqId string `json:"reqId"`
}
// QueryMerRequestData 商户进件信息查询请求业务参数
type QueryMerRequestData struct {
// Version 接口版本号
Version string `json:"version"`
// OrderNo 订单编号(便于后续跟踪排查问题及核对报文)
// 14位年月日时24小时制分秒+8位的随机数不重复2021020112000012345678
OrderNo string `json:"orderNo"`
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// ContractId 进件ID
ContractId string `json:"contractId"`
}
// QueryMerResponse 商户进件信息查询响应
type QueryMerResponse struct {
// CmdRetCode 全局返回码
CmdRetCode string `json:"cmdRetCode"`
// ReqId 请求ID
ReqId string `json:"reqId"`
// RespData 响应业务参数
RespData *QueryMerResponseData `json:"respData"`
// RetCode 返回码
RetCode string `json:"retCode"`
// md 随机字符串
Md string `json:"md"`
// RetMsg 返回消息
RetMsg string `json:"retMsg"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// Ver 版本号
Ver string `json:"ver"`
}
// QueryMerResponseData 商户进件信息查询响应业务参数
type QueryMerResponseData struct {
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// OrderNo 订单号
OrderNo string `json:"orderNo"`
// ContractId 进件ID
ContractId string `json:"contractId"`
// ContractStatus 进件状态
// 未提交NO_COMMIT
// 已提交COMMIT
// 提交失败COMMIT_FAIL
// 转人工审核MANUAL_AUDIT
// 审核中REVIEW_ING
// 审核通过WAIT_FOR_CONTACT
// 审核驳回INNER_CHECK_REJECTED
ContractStatus string `json:"contractStatus"`
// ContractMemo 进件描述
// 进件审核通过,返回"审核通过"
// 进件审核驳回,返回具体的驳回理由
ContractMemo string `json:"contractMemo"`
// MerInnerNo 拉卡拉内部商户号(该属性审核通过才有)
MerInnerNo string `json:"merInnerNo"`
// MerCupNo 银联商户号(该属性审核通过才有)
MerCupNo string `json:"merCupNo"`
// TermDatas 终端列表信息(该属性审核通过并且是增商、增终进件才有)
TermDatas []*TermData `json:"termDatas"`
}
// TermData 终端数据信息
type TermData struct {
// ShopId 网点编号
ShopId string `json:"shopId"`
// TermId 终端编号
TermId string `json:"termId"`
// TermNo 终端号
TermNo string `json:"termNo"`
// BusiTypeCode 业务代码(参考【业务类型字典表】文档)
BusiTypeCode string `json:"busiTypeCode"`
// BusiTypeName 业务名称
BusiTypeName string `json:"busiTypeName"`
// ProductName 产品名称
ProductName string `json:"productName"`
// ProductCode 产品代码
ProductCode string `json:"productCode"`
// DevSerialNo 终端设备序列号
DevSerialNo string `json:"devSerialNo"`
}
func (t *QueryMerResponse) SuccessOrFail() bool {
return t.RetCode == "000000"
}

View File

@ -1,50 +0,0 @@
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 *QuerySubMerInfoRespData `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"
}

View File

@ -1,61 +0,0 @@
package model
// ReConfSubmitRequest 进件复议提交请求
// 接入方在进件被驳回后(由于系统自动校验无法通过),调用此接口提交进件,转人工审核
// 参考文档: https://o.lakala.com/#/home/document/detail?id=94
type ReConfSubmitRequest struct {
// ReqData 请求业务参数
ReqData *ReConfSubmitRequestData `json:"reqData"`
// Ver 版本号
Ver string `json:"ver"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// ReqId 请求ID
ReqId string `json:"reqId"`
}
// ReConfSubmitRequestData 进件复议提交请求业务参数
type ReConfSubmitRequestData struct {
// Version 接口版本号
Version string `json:"version"`
// OrderNo 订单编号(便于后续跟踪排查问题及核对报文)
// 14位年月日时24小时制分秒+8位的随机数不重复2021020112000012345678
OrderNo string `json:"orderNo"`
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// ContractId 进件ID
ContractId string `json:"contractId"`
}
// ReConfSubmitResponse 进件复议提交响应
type ReConfSubmitResponse struct {
// CmdRetCode 全局返回码
CmdRetCode string `json:"cmdRetCode"`
// ReqId 请求ID
ReqId string `json:"reqId"`
// RetCode 返回码
RetCode string `json:"retCode"`
// md 随机字符串
Md string `json:"md"`
// RespData 响应业务参数
RespData *ReConfSubmitResponseData `json:"respData"`
// RetMsg 返回消息
RetMsg string `json:"retMsg"`
// Timestamp 时间戳
Timestamp int64 `json:"timestamp"`
// Ver 版本号
Ver string `json:"ver"`
}
type ReConfSubmitResponseData struct {
// OrgCode 机构代码
OrgCode string `json:"orgCode"`
// OrderNo 订单号
OrderNo string `json:"orderNo"`
}
func (t *ReConfSubmitResponse) SuccessOrFail() bool {
return t.RetCode == "000000"
}

View File

@ -1,9 +1,6 @@
package model package model
import ( import "github.com/gogf/gf/v2/os/gtime"
"github.com/black1552/lkl_sdk/consts"
"github.com/gogf/gf/v2/os/gtime"
)
// Refund 退款请求结构体 // Refund 退款请求结构体
type Refund struct { type Refund struct {
@ -18,12 +15,11 @@ type RefundReqData struct {
TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32),必填 TermNo string `json:"term_no"` // 终端号拉卡拉分配的业务终端号String(32),必填
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号商户系统唯一String(32),必填 OutTradeNo string `json:"out_trade_no"` // 商户请求流水号商户系统唯一String(32),必填
RefundAmount string `json:"refund_amount"` // 退款金额单位分整数型字符String(12),必填 RefundAmount string `json:"refund_amount"` // 退款金额单位分整数型字符String(12),必填
RefundAccMode consts.RefundAccMode `json:"refund_acc_mode"` // 退款账户模式String(2)必填00-调用户余额 65-调商户余额 66-调终端余额 30-调账户 RefundAccMode string `json:"refund_acc_mode"` // 退款账户模式String(2)必填00-调用户余额 65-调商户余额 66-调终端余额 30-调账户
LocationInfo struct { LocationInfo struct {
RequestIp string `json:"request_ip"` // 请求方IP地址请求方的IP地址存在必填格式如36.45.36.95String(64),必填 RequestIp string `json:"request_ip"` // 请求方IP地址请求方的IP地址存在必填格式如36.45.36.95String(64),必填
} `json:"location_info"` // 地址位置信息Object必填 } `json:"location_info"` // 地址位置信息Object必填
NotifyUrl string `json:"notify_url"` // 后台通知地址交易结果通知地址String(128),选填 NotifyUrl string `json:"notify_url"` // 后台通知地址交易结果通知地址String(128),选填
RefundAmtSts consts.RefundAmtSts `json:"refund_amt_sts"` // 退货资金状态 String(2) 00-为默认01-为分账;分账交易退款必须填写
OriginLogNo string `json:"origin_log_no"` // 拉卡拉对账单流水号正常退款的拉卡拉对账单流水号String(14),选填 OriginLogNo string `json:"origin_log_no"` // 拉卡拉对账单流水号正常退款的拉卡拉对账单流水号String(14),选填
OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号String(32),选填 OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号String(32),选填
OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号String(32),选填 OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号String(32),选填

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
type SeparateRequest struct { type SeparateRequest struct {
ReqData *SeparateReqData `json:"req_data"` // 请求数据 ReqData *SeparateReqData `json:"req_data"` // 请求数据
Version string `json:"version"` // 版本号 Version string `json:"version"` // 版本号
@ -15,7 +13,7 @@ type SeparateReqData struct {
OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号 OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号
TotalAmt string `json:"total_amt"` // 分账总金额 [单位:分] TotalAmt string `json:"total_amt"` // 分账总金额 [单位:分]
LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号 非必填 LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号 非必填
CalType consts.CalType `json:"cal_type"` // 分账计算类型 0- 按照指定金额1- 按照指定比例。默认 0 非必填 CalType string `json:"cal_type"` // 分账计算类型 0- 按照指定金额1- 按照指定比例。默认 0 非必填
SeparateType string `json:"separate_type"` SeparateType string `json:"separate_type"`
NotifyUrl string `json:"notify_url"` // 回调地址 分账,分账撤销或分账回退时,是异步接口。通过该地址通知商户最终处理结果。不传时,不回调 NotifyUrl string `json:"notify_url"` // 回调地址 分账,分账撤销或分账回退时,是异步接口。通过该地址通知商户最终处理结果。不传时,不回调
RecvDatas []*SeparateRecvDatas `json:"recv_datas"` // 分账接收数据对象 分账接收方编号必须已创建 RecvDatas []*SeparateRecvDatas `json:"recv_datas"` // 分账接收数据对象 分账接收方编号必须已创建

View File

@ -69,5 +69,5 @@ type TradeQueryResponse struct {
} }
func (t *TradeQueryResponse) SuccessOrFail() bool { func (t *TradeQueryResponse) SuccessOrFail() bool {
return t.Code == "BBS00000" return t.Code == "000000"
} }

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
type UploadFileRequest struct { type UploadFileRequest struct {
ReqData *UploadFileReqData `json:"reqData"` ReqData *UploadFileReqData `json:"reqData"`
Ver string `json:"ver"` Ver string `json:"ver"`
@ -12,7 +10,7 @@ type UploadFileRequest struct {
type UploadFileReqData struct { type UploadFileReqData struct {
Version string `json:"version"` Version string `json:"version"`
OrderNo string `json:"orderNo"` OrderNo string `json:"orderNo"`
AttType consts.AttType `json:"attType"` AttType string `json:"attType"`
AttExtName string `json:"attExtName"` AttExtName string `json:"attExtName"`
AttContext string `json:"attContext"` AttContext string `json:"attContext"`
OrgCode string `json:"orgCode"` OrgCode string `json:"orgCode"`

View File

@ -1,7 +1,5 @@
package model package model
import "github.com/black1552/lkl_sdk/consts"
// WithdrawRequest 提现请求结构体 // WithdrawRequest 提现请求结构体
// 用于向拉卡拉接口发送提现请求 // 用于向拉卡拉接口发送提现请求
// 包含请求头信息和业务数据 // 包含请求头信息和业务数据
@ -31,7 +29,7 @@ type WithdrawReqData struct {
// 账号若该参数上送则payType将无效非必传最大长度32 // 账号若该参数上送则payType将无效非必传最大长度32
PayNo string `json:"pay_no"` PayNo string `json:"pay_no"`
// 账号类型01收款账户04分账接收方账户未上送则默认01必传最大长度32分账接收方提现时需填04 // 账号类型01收款账户04分账接收方账户未上送则默认01必传最大长度32分账接收方提现时需填04
PayType consts.PayType `json:"pay_type"` PayType string `json:"pay_type"`
// 备注信息非必传最大长度64 // 备注信息非必传最大长度64
Remark string `json:"remark"` Remark string `json:"remark"`
// 摘要非必传最大长度64 // 摘要非必传最大长度64