Compare commits
41 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
1c6d1dff34 | |
|
|
d8d5d36844 | |
|
|
d86d7c7fb6 | |
|
|
deb2985747 | |
|
|
0b902def62 | |
|
|
c9fa888b05 | |
|
|
ace91cc127 | |
|
|
58068f06af | |
|
|
9af7e32aff | |
|
|
4a46686a68 | |
|
|
a7dca57d23 | |
|
|
5d502d371a | |
|
|
6edab2db55 | |
|
|
468950e555 | |
|
|
2f9a46a6d9 | |
|
|
14ef8bf585 | |
|
|
b10df1f064 | |
|
|
aab78082ce | |
|
|
59158d7309 | |
|
|
6f685ea087 | |
|
|
b038c64873 | |
|
|
03aec086bf | |
|
|
8eeee5cbe1 | |
|
|
aa5b400ee8 | |
|
|
c11e75f910 | |
|
|
8b7a82f6c8 | |
|
|
ee259e7c9a | |
|
|
e985b790d4 | |
|
|
7777630306 | |
|
|
de64d7b076 | |
|
|
02cab5fbde | |
|
|
adabb186f0 | |
|
|
90f319f763 | |
|
|
9813be8873 | |
|
|
de77aa78b1 | |
|
|
290d3e6ba7 | |
|
|
7974b4d570 | |
|
|
38b8d577cc | |
|
|
5824ed7eef | |
|
|
0aa9bc80ec | |
|
|
1e5214abfb |
341
README.md
341
README.md
|
|
@ -6,13 +6,46 @@
|
|||
|
||||
```
|
||||
lklsdk/
|
||||
├── client.go # 核心客户端
|
||||
├── account.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_more.go # 分账扩展功能
|
||||
├── trade.go # 交易相关功能
|
||||
├── account.go # 账户相关功能
|
||||
├── merge_pre.go # 主扫合单交易功能
|
||||
└── sdk.go # SDK主入口
|
||||
├── trade.go # 交易相关功能
|
||||
├── unifiedreturn/ # 统一退款功能
|
||||
│ ├── mergerefund/ # 合并退款
|
||||
│ ├── refund/ # 退款
|
||||
│ ├── refundfee/ # 退款手续费
|
||||
│ └── refundquery/ # 退款查询
|
||||
└── uploadFile.go # 文件上传相关功能
|
||||
```
|
||||
|
||||
## 安装
|
||||
|
|
@ -30,6 +63,7 @@ go get -u github.com/black1552/lkl_sdk
|
|||
import (
|
||||
"github.com/black1552/lkl_sdk/lklsdk"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
)
|
||||
|
||||
|
|
@ -122,7 +156,7 @@ applyLedgerReq := &model.ApplyLedgerMerReqData{
|
|||
SplitLowestRatio: 3.51, // 最低分账比例
|
||||
SplitEntrustFileName: "授权委托书.pdf", // 授权委托书文件名
|
||||
SplitEntrustFilePath: "path", // 授权委托书文件路径
|
||||
SplitRange: "ALL", // 分账范围(ALL全部交易分账,MARK标记交易分账)
|
||||
SplitRange: consts.SPLIT_RANGE_ALL, // 分账范围(ALL全部交易分账,MARK标记交易分账)
|
||||
RetUrl: "notifyUrl.com", // 回调URL
|
||||
}
|
||||
|
||||
|
|
@ -181,7 +215,7 @@ splitLedgerReq := &model.OrderSplitLedgerReqData{
|
|||
OutSeparateNo: "", // 商户分账指令流水号
|
||||
TotalAmt: "", // 分账总金额,单位为分
|
||||
LklOrgNo: "", // 拉卡拉机构编号
|
||||
CalType: "", // 分账计算类型(0-按金额,1-按比例)
|
||||
CalType: consts.CAL_TYPE_AMOUNT, // 分账计算类型(0-按金额,1-按比例)
|
||||
NotifyUrl: "", // 回调地址
|
||||
RecvDatas: recvDatas, // 分账接收方数据
|
||||
}
|
||||
|
|
@ -242,8 +276,8 @@ balanceQueryReq := &model.BalanceQueryReqData{
|
|||
MerchantNo: config.MerchantNo,
|
||||
OrgNo: "", // 机构号
|
||||
PayNo: "", // 支付单号
|
||||
PayType: "", // 支付类型
|
||||
MgtFlag: "", // 管理标志
|
||||
PayType: consts.PAY_TYPE_CARD, // 支付类型(CARD-卡支付,COUPON-优惠券支付,DISCOUNT-折扣支付,POINT-积分支付,MIX-混合支付)
|
||||
MgtFlag: consts.MGT_FLAG_NO, // 管理标志(NO-普通交易,YES-管理交易)
|
||||
}
|
||||
|
||||
// 调用接口
|
||||
|
|
@ -282,6 +316,295 @@ if !resp.SuccessOrFail() {
|
|||
// 使用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、商户号、密钥等敏感信息
|
||||
|
|
|
|||
|
|
@ -0,0 +1,141 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,745 @@
|
|||
// 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)
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
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" // NATIVE(ALIPAY, 云闪付支持, 京东白条分期)
|
||||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
// 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)
|
||||
}
|
||||
|
|
@ -0,0 +1,347 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
package consts
|
||||
|
||||
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 (
|
||||
|
|
@ -22,7 +23,11 @@ const (
|
|||
// LKL_ACCOUNT_BALANCE_QUERY_URL 拉卡拉账户余额查询
|
||||
LKL_ACCOUNT_BALANCE_QUERY_URL = "/v2/laep/industry/ewalletBalanceQuery"
|
||||
// LKL_ACCOUNT_WITHDRAW_URL 拉卡拉账户提现
|
||||
LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1"
|
||||
LKL_ACCOUNT_WITHDRAW_URL = "/v2/laep/industry/ewalletWithdrawD1"
|
||||
LKL_SPLIT_LEDGER_FALLBACK_URL = "/v3/sacs/fallback"
|
||||
)
|
||||
|
||||
const (
|
||||
// LKL_TRADE_QUERY_URL 拉卡拉交易查询
|
||||
LKL_TRADE_QUERY_URL = "/v3/labs/query/tradequery"
|
||||
// LKL_PRE_ORDER_URL 拉卡拉聚合预下单
|
||||
|
|
@ -32,3 +37,38 @@ const (
|
|||
// LKL_REFOUND_URL 拉卡拉退款
|
||||
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
1
go.mod
|
|
@ -20,6 +20,7 @@ require (
|
|||
github.com/go-logr/stdr v1.2.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/google/uuid v1.6.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.3 // indirect
|
||||
github.com/grokify/html-strip-tags-go v0.1.0 // indirect
|
||||
github.com/magiconair/properties v1.8.10 // indirect
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
package lklsdk
|
||||
|
||||
import (
|
||||
"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/os/gtime"
|
||||
)
|
||||
|
||||
// AccountService 账户服务
|
||||
type AccountService[T any] struct {
|
||||
client *Client[T]
|
||||
client *common.Client[T]
|
||||
}
|
||||
|
||||
// NewAccountService 创建账户服务实例
|
||||
func NewAccountService[T any](client *Client[T]) *AccountService[T] {
|
||||
func NewAccountService[T any](client *common.Client[T]) *AccountService[T] {
|
||||
return &AccountService[T]{
|
||||
client: client,
|
||||
}
|
||||
|
|
@ -26,12 +26,31 @@ func (a *AccountService[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, er
|
|||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.BalanceQueryRequest{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -46,13 +65,32 @@ func (a *AccountService[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
|
|||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.WithdrawRequest{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package lklsdk
|
||||
package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
|
@ -8,33 +8,21 @@ import (
|
|||
"crypto/sha256"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
ran "math/rand"
|
||||
"time"
|
||||
|
||||
"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/util/gconv"
|
||||
)
|
||||
|
||||
// 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:"回调地址"`
|
||||
}
|
||||
|
||||
// Client 拉卡拉SDK客户端
|
||||
type Client[T any] struct {
|
||||
config *Config
|
||||
Config *Config
|
||||
response T
|
||||
ctx context.Context
|
||||
}
|
||||
|
|
@ -47,7 +35,7 @@ func NewClient[T any](ctx context.Context, cfgJson string) *Client[T] {
|
|||
return nil
|
||||
}
|
||||
return &Client[T]{
|
||||
config: config,
|
||||
Config: config,
|
||||
ctx: ctx,
|
||||
}
|
||||
}
|
||||
|
|
@ -68,7 +56,7 @@ func (c *Client[T]) generateSign(request []byte) (string, error) {
|
|||
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))
|
||||
|
|
@ -85,12 +73,12 @@ func (c *Client[T]) generateSign(request []byte) (string, error) {
|
|||
|
||||
// 构建Authorization头
|
||||
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
|
||||
}
|
||||
|
||||
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 {
|
||||
return nil, fmt.Errorf("无法解码私钥PEM数据")
|
||||
}
|
||||
|
|
@ -102,15 +90,19 @@ func (c *Client[T]) loadPrivateKey() (*rsa.PrivateKey, error) {
|
|||
return privateKey.(*rsa.PrivateKey), nil
|
||||
}
|
||||
|
||||
// doRequest 发送HTTP请求
|
||||
func (c *Client[T]) doRequest(url string, reqData interface{}) (*T, error) {
|
||||
// 序列化为JSON
|
||||
jsonData, err := json.Marshal(reqData)
|
||||
// DoRequest 发送HTTP请求
|
||||
func (c *Client[T]) DoRequest(url string, reqData interface{}) (*T, error) {
|
||||
jsonStr, err := gjson.EncodeString(reqData)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("序列化请求数据失败: %v", err)
|
||||
return nil, fmt.Errorf("请求参数转JSON字符串失败: %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(jsonData)
|
||||
auth, err := c.generateSign(reqJson)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("生成签名失败: %v", err)
|
||||
}
|
||||
|
|
@ -121,5 +113,5 @@ func (c *Client[T]) doRequest(url string, reqData interface{}) (*T, error) {
|
|||
}
|
||||
// 设置其他必要的请求头
|
||||
|
||||
return utils.NewClient[T](jsonData, url, header).Post(c.ctx)
|
||||
return utils.NewClient[T](reqJson, url, header).Post(c.ctx)
|
||||
}
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
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:"回调地址"`
|
||||
}
|
||||
|
|
@ -0,0 +1,252 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
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"` // 接口版本号
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
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"` // 接口版本号
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
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"` // 接口版本号
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -2,16 +2,17 @@ package lklsdk
|
|||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/lklsdk/common"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type MergePreService[T any] struct {
|
||||
client *Client[T]
|
||||
client *common.Client[T]
|
||||
}
|
||||
|
||||
// NewMergePreService 创建拉卡拉主扫合单交易
|
||||
func NewMergePreService[T any](client *Client[T]) *MergePreService[T] {
|
||||
func NewMergePreService[T any](client *common.Client[T]) *MergePreService[T] {
|
||||
return &MergePreService[T]{
|
||||
client: client,
|
||||
}
|
||||
|
|
@ -29,7 +30,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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
182
lklsdk/sdk.go
182
lklsdk/sdk.go
|
|
@ -3,34 +3,92 @@ package lklsdk
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/black1552/lkl_sdk/lklsdk/common"
|
||||
ecApply "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/apply"
|
||||
ecApplyManual "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/applymanual"
|
||||
ecDownload "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/download"
|
||||
ecQmaStatus "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/qmastatus"
|
||||
ecQuery "github.com/black1552/lkl_sdk/lklsdk/merchant/in_net/ec/querystatus"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
)
|
||||
|
||||
// SDK 拉卡拉SDK主入口
|
||||
type SDK[T any] struct {
|
||||
Client *Client[T]
|
||||
SplitLedger *SplitLedgerService[T]
|
||||
Trade *TradeService[T]
|
||||
Account *AccountService[T]
|
||||
UploadFile *UploadFileService[T]
|
||||
MergePre *MergePreService[T]
|
||||
Client *common.Client[T]
|
||||
SplitLedger *SplitLedgerService[T]
|
||||
Trade *TradeService[T]
|
||||
Account *AccountService[T]
|
||||
UploadFile *UploadFileService[T]
|
||||
MergePre *MergePreService[T]
|
||||
Merchant *MerService[T]
|
||||
EC *ecApply.Apply
|
||||
ECQuery *ecQuery.QStatus
|
||||
ECFileDownload *ecDownload.Download
|
||||
ECPeApplyManual *ecApplyManual.ApplyManual
|
||||
ECPeQmaStatus *ecQmaStatus.QmaStatus
|
||||
}
|
||||
|
||||
// NewSDK 创建拉卡拉SDK实例
|
||||
func NewSDK[T any](ctx context.Context, cfgJson string) *SDK[T] {
|
||||
client := NewClient[T](ctx, cfgJson)
|
||||
client := common.NewClient[T](ctx, cfgJson)
|
||||
return &SDK[T]{
|
||||
Client: client,
|
||||
SplitLedger: NewSplitLedgerService(client),
|
||||
Trade: NewTradeService(client),
|
||||
Account: NewAccountService(client),
|
||||
UploadFile: NewUploadFileService(client),
|
||||
MergePre: NewMergePreService(client),
|
||||
Client: client,
|
||||
SplitLedger: NewSplitLedgerService(client),
|
||||
Trade: NewTradeService(client),
|
||||
Account: NewAccountService(client),
|
||||
UploadFile: NewUploadFileService(client),
|
||||
MergePre: NewMergePreService(client),
|
||||
Merchant: NewMerService(client),
|
||||
EC: ecApply.NewEcApply(common.NewClient[ecApply.ECApplyResponse](ctx, cfgJson)),
|
||||
ECQuery: ecQuery.NewQStatus(common.NewClient[ecQuery.ECQueryStatusResponse](ctx, cfgJson)),
|
||||
ECFileDownload: ecDownload.NewDownload(common.NewClient[ecDownload.ECDownloadResponse](ctx, cfgJson)),
|
||||
ECPeApplyManual: ecApplyManual.NewApplyManual(common.NewClient[ecApplyManual.ECApplyManualResponse](ctx, cfgJson)),
|
||||
ECPeQmaStatus: ecQmaStatus.NewQmaStatus(common.NewClient[ecQmaStatus.ECQmaStatusResponse](ctx, cfgJson)),
|
||||
}
|
||||
}
|
||||
|
||||
// 以下为便捷方法,直接通过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 主扫合单交易
|
||||
func (s *SDK[T]) MergePreOrder(req *model.MergePreorderReqData) (*T, error) {
|
||||
return s.MergePre.PreOrder(req)
|
||||
|
|
@ -46,31 +104,60 @@ func (s *SDK[T]) ApplyLedgerMer(req *model.ApplyLedgerMerReqData) (*T, error) {
|
|||
return s.SplitLedger.ApplyLedgerMer(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) ApplyLedgerMerTest(req *model.ApplyLedgerMerReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyLedgerMerTest(req)
|
||||
}
|
||||
|
||||
// QueryLedgerMer 商户分账信息查询
|
||||
func (s *SDK[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData) (*T, error) {
|
||||
return s.SplitLedger.QueryLedgerMer(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) QueryLedgerMerTest(req *model.QueryLedgerMerReqData) (*T, error) {
|
||||
return s.SplitLedger.QueryLedgerMerTest(req)
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiver 分账接收方创建申请
|
||||
func (s *SDK[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiverReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyLedgerReceiver(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) ApplyLedgerReceiverTest(req *model.ApplyLedgerReceiverReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyLedgerReceiverTest(req)
|
||||
}
|
||||
|
||||
// ApplyBind 分账关系绑定申请
|
||||
func (s *SDK[T]) ApplyBind(req *model.ApplyBindReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyBind(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) ApplyBindTest(req *model.ApplyBindReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyBindTest(req)
|
||||
}
|
||||
|
||||
// QuerySplitBalance 可分账金额查询
|
||||
func (s *SDK[T]) QuerySplitBalance(req *model.SplitBalanceReqData) (*T, error) {
|
||||
return s.SplitLedger.QuerySplitBalance(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) QuerySplitBalanceTest(req *model.SplitBalanceReqData) (*T, error) {
|
||||
return s.SplitLedger.QuerySplitBalanceTest(req)
|
||||
}
|
||||
|
||||
// OrderSplitLedger 订单分账
|
||||
func (s *SDK[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqData) (*T, error) {
|
||||
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 交易查询
|
||||
func (s *SDK[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
|
||||
return s.Trade.TradeQuery(req)
|
||||
|
|
@ -86,11 +173,80 @@ func (s *SDK[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, error) {
|
|||
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) {
|
||||
return s.UploadFile.UploadFileQuery(req)
|
||||
}
|
||||
func (s *SDK[T]) UploadFileQueryTest(req *model.UploadFileReqData) (*T, error) {
|
||||
return s.UploadFile.UploadFileQueryTest(req)
|
||||
}
|
||||
|
||||
// Withdraw 账户提现
|
||||
func (s *SDK[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"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/os/gtime"
|
||||
|
|
@ -13,11 +14,11 @@ import (
|
|||
|
||||
// SplitLedgerService 分账服务
|
||||
type SplitLedgerService[T any] struct {
|
||||
client *Client[T]
|
||||
client *common.Client[T]
|
||||
}
|
||||
|
||||
// NewSplitLedgerService 创建分账服务实例
|
||||
func NewSplitLedgerService[T any](client *Client[T]) *SplitLedgerService[T] {
|
||||
func NewSplitLedgerService[T any](client *common.Client[T]) *SplitLedgerService[T] {
|
||||
return &SplitLedgerService[T]{
|
||||
client: client,
|
||||
}
|
||||
|
|
@ -41,7 +42,32 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -67,7 +93,32 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -88,7 +139,27 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,31 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -49,7 +73,26 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -69,7 +112,45 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,16 +4,17 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/lklsdk/common"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
)
|
||||
|
||||
// TradeService 交易服务
|
||||
type TradeService[T any] struct {
|
||||
client *Client[T]
|
||||
client *common.Client[T]
|
||||
}
|
||||
|
||||
// NewTradeService 创建交易服务实例
|
||||
func NewTradeService[T any](client *Client[T]) *TradeService[T] {
|
||||
func NewTradeService[T any](client *common.Client[T]) *TradeService[T] {
|
||||
return &TradeService[T]{
|
||||
client: client,
|
||||
}
|
||||
|
|
@ -28,12 +29,12 @@ func (t *TradeService[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
|
|||
baseReq := model.TradeQuery{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
OutOrgCode: t.client.config.AppID,
|
||||
OutOrgCode: t.client.Config.AppId,
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
respBody, err := t.client.DoRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -49,7 +50,7 @@ func (t *TradeService[T]) PreOrder(req *model.PreorderReqData) (*T, error) {
|
|||
baseReq := model.NewPreorder(req)
|
||||
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
respBody, err := t.client.DoRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -65,7 +66,7 @@ func (t *TradeService[T]) Refound(req *model.RefundReqData) (*T, error) {
|
|||
// 构建BaseModel请求
|
||||
baseReq := model.NewRefund(req)
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
respBody, err := t.client.DoRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
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开头的"`
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
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 原商户子交易流水号 可选,如果请求中携带,则返回"`
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
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 返回描述信息 必填"`
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
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: 基站信息 (可选)
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
package refundfee
|
||||
|
|
@ -0,0 +1 @@
|
|||
package refundfee
|
||||
|
|
@ -0,0 +1 @@
|
|||
package refundfee
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
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) 与商户交易流水号二选一"`
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
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#msg:RFD00000#成功、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"
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
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)
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"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"
|
||||
|
|
@ -12,11 +13,11 @@ import (
|
|||
|
||||
// UploadFileService 交易服务
|
||||
type UploadFileService[T any] struct {
|
||||
client *Client[T]
|
||||
client *common.Client[T]
|
||||
}
|
||||
|
||||
// NewUploadFileService 创建交易服务实例
|
||||
func NewUploadFileService[T any](client *Client[T]) *UploadFileService[T] {
|
||||
func NewUploadFileService[T any](client *common.Client[T]) *UploadFileService[T] {
|
||||
return &UploadFileService[T]{
|
||||
client: client,
|
||||
}
|
||||
|
|
@ -39,7 +40,30 @@ 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 {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// ApplyBindRequest 分账关系绑定请求结构体
|
||||
// 用于发起分账接收方与商户的关系绑定申请
|
||||
// 拉卡拉SDK接口文档:分账关系绑定接口
|
||||
|
|
@ -15,20 +17,22 @@ type ApplyBindRequest struct {
|
|||
// 包含分账关系绑定所需的详细业务参数
|
||||
|
||||
type ApplyBindReqData struct {
|
||||
Version string `json:"version"` // 接口版本号,必传,长度8,取值说明:1.0
|
||||
OrderNo string `json:"orderNo"` // 订单编号,必传,长度32,用于后续跟踪排查问题及核对报文,格式为14位年月日(24小时制)分秒+8位随机数(不重复)
|
||||
OrgCode string `json:"orgCode"` // 分账接收方所属机构代码,必传,长度32
|
||||
MerInnerNo string `json:"merInnerNo"` // 分账商户内部商户号,必传,长度32,与MerCupNo选传其一,不能都为空
|
||||
MerCupNo string `json:"merCupNo"` // 分账商户银联商户号,必传,长度32,与MerInnerNo选传其一,不能都为空
|
||||
ReceiverNo string `json:"receiverNo"` // 分账接收方编号,必传,长度32
|
||||
EntrustFileName string `json:"entrustFileName"` // 合作协议附件名称,必传,长度32
|
||||
EntrustFilePath string `json:"entrustFilePath"` // 合作协议附件路径,必传,长度32,通过调用附件上传接口获取
|
||||
RetUrl string `json:"retUrl"` // 回调通知地址,必传,长度128,审核通过后通知地址
|
||||
Attachments []struct {
|
||||
AttachType string `json:"attachType"` // 附件类型编码,必传,长度32
|
||||
AttachName string `json:"attachName"` // 附件名称,必传,长度32
|
||||
AttachStorePath string `json:"attachStorePath"` // 附件路径,必传,长度128,通过调用附件上传接口获取
|
||||
} `json:"attachments,omitempty"` // 附加资料,可选,集合类型,其他附加资料文件信息
|
||||
Version string `json:"version"` // 接口版本号,必传,长度8,取值说明:1.0
|
||||
OrderNo string `json:"orderNo"` // 订单编号,必传,长度32,用于后续跟踪排查问题及核对报文,格式为14位年月日(24小时制)分秒+8位随机数(不重复)
|
||||
OrgCode string `json:"orgCode"` // 分账接收方所属机构代码,必传,长度32
|
||||
MerInnerNo string `json:"merInnerNo"` // 分账商户内部商户号,必传,长度32,与MerCupNo选传其一,不能都为空
|
||||
MerCupNo string `json:"merCupNo"` // 分账商户银联商户号,必传,长度32,与MerInnerNo选传其一,不能都为空
|
||||
ReceiverNo string `json:"receiverNo"` // 分账接收方编号,必传,长度32
|
||||
EntrustFileName string `json:"entrustFileName"` // 合作协议附件名称,必传,长度32
|
||||
EntrustFilePath string `json:"entrustFilePath"` // 合作协议附件路径,必传,长度32,通过调用附件上传接口获取
|
||||
RetUrl string `json:"retUrl"` // 回调通知地址,必传,长度128,审核通过后通知地址
|
||||
Attachments []*ApplyBindAttachment `json:"attachments,omitempty"` // 附加资料,可选,集合类型,其他附加资料文件信息
|
||||
}
|
||||
|
||||
type ApplyBindAttachment struct {
|
||||
AttachType consts.AttType `json:"attachType"` // 附件类型编码,必传,长度32
|
||||
AttachName string `json:"attachName"` // 附件名称,必传,长度32
|
||||
AttachStorePath string `json:"attachStorePath"` // 附件路径,必传,长度128,通过调用附件上传接口获取
|
||||
}
|
||||
|
||||
// ApplyBindResponse 分账关系绑定响应结构体
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// ApplyLedgerMerRequest 商户分账业务开通申请请求结构体
|
||||
type ApplyLedgerMerRequest struct {
|
||||
ReqData *ApplyLedgerMerReqData `json:"reqData"` // 请求业务数据
|
||||
|
|
@ -10,27 +12,23 @@ type ApplyLedgerMerRequest struct {
|
|||
|
||||
// ApplyLedgerMerReqData 商户分账业务开通申请请求业务数据结构体
|
||||
type ApplyLedgerMerReqData struct {
|
||||
Version string `json:"version"` // 版本号,必传,长度8,取值说明:1.0
|
||||
OrderNo string `json:"orderNo"` // 订单编号,必传,长度32,用于后续处理查询及回调通知消息标识,2014年月日时分秒毫秒组成
|
||||
OrgCode string `json:"orgCode"` // 机构代码,必传,长度12
|
||||
MerInnerNo string `json:"merInnerNo"` // 拉卡拉内部商户号,可选,长度32,拉卡拉内部商户号和银联商户号必须传一个,默认以内部商户号为准
|
||||
MerCupNo string `json:"merCupNo"` // 银联商户号,可选,长度32,拉卡拉内部商户号和银联商户号必须传一个,默认以内部商户号为准
|
||||
ContactMobile string `json:"contactMobile"` // 联系手机号,必传,长度32
|
||||
SplitLowestRatio float64 `json:"splitLowestRatio"` // 最低分账比例,必传,长度12,百分比,支持2位精度,取值范围:70-70.50
|
||||
SplitEntrustFileName string `json:"splitEntrustFileName"` // 分账授权委托书文件名称,必传,长度64,文件格式:pdf
|
||||
SplitEntrustFilePath string `json:"splitEntrustFilePath"` // 分账授权委托书文件路径,必传,长度64,调用附件上传接口获取
|
||||
SplitRange string `json:"splitRange"` // 分账范围,必传,长度32,取值说明:ALL-全部交易分账(所有交易默认都分账),MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算)
|
||||
SplitFundSource string `json:"splitFundSource"` // 分账依据,非必传,长度32,取值说明:TRA-交易分账,BAR-金额分账
|
||||
ElecContractId string `json:"elecContractId"` // 电子合同编号,非必传,长度32,收单已签约交易电子合同编号,供审核人员复核使用
|
||||
SplitLaunchMode string `json:"splitLaunchMode"` // 分账发起方式,非必传,长度32,取值说明:AUTO-自动触发分账,POINTTRUE-指定规则分账,MANUAL-手动分账
|
||||
SettleType string `json:"settleType"` // 结算类型,非必传,长度32,取值说明:01-主扫现结,02-复扫现结,03-交易自动结算
|
||||
SplitRuleSource string `json:"splitRuleSource"` // 分账规则来源,条件必传,长度32,取值说明:MER-商户自定规则,PLATFORM-平台分润规则(分润规则必传)
|
||||
RetUrl string `json:"retUrl"` // 回调通知地址,必传,长度128,分账申请结果以异步消息或同步返回的方式通知,如需无线路由处理,也可以通过第三方商户信息查询接口确定结算结果
|
||||
Attachments []struct {
|
||||
AttachType string `json:"attachType"` // 附件类型编码,必传,长度32
|
||||
AttachName string `json:"attachName"` // 附件名称,必传,长度32
|
||||
AttachStorePath string `json:"attachStorePath"` // 附件路径,必传,长度128,调用附件上传接口获取
|
||||
} `json:"attachments,omitempty"` // 附加资料,可选,集合,其他需附加的文件信息
|
||||
Version string `json:"version"` // 版本号,必传,长度8,取值说明:1.0
|
||||
OrderNo string `json:"orderNo"` // 订单编号,必传,长度32,用于后续处理查询及回调通知消息标识,2014年月日时分秒毫秒组成
|
||||
OrgCode string `json:"orgCode"` // 机构代码,必传,长度12
|
||||
MerInnerNo string `json:"merInnerNo"` // 拉卡拉内部商户号,可选,长度32,拉卡拉内部商户号和银联商户号必须传一个,默认以内部商户号为准
|
||||
MerCupNo string `json:"merCupNo"` // 银联商户号,可选,长度32,拉卡拉内部商户号和银联商户号必须传一个,默认以内部商户号为准
|
||||
ContactMobile string `json:"contactMobile"` // 联系手机号,必传,长度32
|
||||
SplitLowestRatio float64 `json:"splitLowestRatio"` // 最低分账比例,必传,长度12,百分比,支持2位精度,取值范围:70-70.50
|
||||
SplitEntrustFileName string `json:"splitEntrustFileName"` // 分账授权委托书文件名称,必传,长度64,文件格式:pdf
|
||||
SplitEntrustFilePath string `json:"splitEntrustFilePath"` // 分账授权委托书文件路径,必传,长度64,调用附件上传接口获取
|
||||
SplitRange consts.SplitRange `json:"splitRange"` // 分账范围,必传,长度32,取值说明:ALL-全部交易分账(所有交易默认都分账),MARK-标记交易分账(只有带标记交易才分账,其余交易正常结算)
|
||||
SepFundSource consts.SepFundSource `json:"sepFundSource"` // 分账依据,非必传,长度32,取值说明:TRA-交易分账,BAR-金额分账
|
||||
EleContractNo string `json:"eleContractNo"` // 电子合同编号,非必传,长度32,收单已签约交易电子合同编号,供审核人员复核使用
|
||||
SplitLaunchMode consts.SplitLaunchMode `json:"splitLaunchMode"` // 分账发起方式,非必传,长度32,取值说明:AUTO-自动触发分账,POINTTRUE-指定规则分账,MANUAL-手动分账
|
||||
SettleType consts.SplitSettleType `json:"settleType"` // 结算类型,非必传,长度32,取值说明:01-主扫现结,02-复扫现结,03-交易自动结算
|
||||
SplitRuleSource consts.SplitRuleSource `json:"splitRuleSource"` // 分账规则来源,条件必传,长度32,取值说明:MER-商户自定规则,PLATFORM-平台分润规则(分润规则必传)
|
||||
RetUrl string `json:"retUrl"` // 回调通知地址,必传,长度128,分账申请结果以异步消息或同步返回的方式通知,如需无线路由处理,也可以通过第三方商户信息查询接口确定结算结果
|
||||
Attachments []*ApplyBindAttachment `json:"attachments,omitempty"` // 附加资料,可选,集合,其他需附加的文件信息
|
||||
}
|
||||
|
||||
// ApplyLedgerMerResponse 商户分账业务开通申请响应结构体
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// ApplyLedgerReceiverRequest 分账接收方创建请求结构体
|
||||
// 用于向拉卡拉接口发送分账接收方创建请求
|
||||
// 包含请求头信息和业务数据
|
||||
|
|
@ -35,7 +37,7 @@ type ApplyLedgerReceiverReqData struct {
|
|||
// 法人姓名,可选,长度32,取值说明:收款账户类型为对公,必须上送
|
||||
LegalPersonName string `json:"legalPersonName"`
|
||||
// 法人证件类型,可选,长度32,取值说明:17身份证,18护照,19港澳居民来往内地通行证,20台湾居民来往内地通行证,收款账户类型为对公,必须上送,身份证外类型先咨询后再使用
|
||||
LegalPersonCertificateType string `json:"legalPersonCertificateType"`
|
||||
LegalPersonCertificateType consts.AcctCertificateType `json:"legalPersonCertificateType"`
|
||||
// 法人证件号,可选,长度32,取值说明:收款账户类型为对公,必须上送
|
||||
LegalPersonCertificateNo string `json:"legalPersonCertificateNo"`
|
||||
// 收款账户卡号,必传,长度32
|
||||
|
|
@ -43,9 +45,9 @@ type ApplyLedgerReceiverReqData struct {
|
|||
// 收款账户名称,必传,长度32
|
||||
AcctName string `json:"acctName"`
|
||||
// 收款账户类型代码,必传,长度32,取值说明:57:对公,58:对私
|
||||
AcctTypeCode string `json:"acctTypeCode"`
|
||||
AcctTypeCode consts.AcctTypeCode `json:"acctTypeCode"`
|
||||
// 收款账户证件类型,必传,长度32,取值说明:17身份证,18护照,19港澳居民来往内地通行证,20台湾居民来往内地通行证,身份证外类型先咨询后再使用
|
||||
AcctCertificateType string `json:"acctCertificateType"`
|
||||
AcctCertificateType consts.AcctCertificateType `json:"acctCertificateType"`
|
||||
// 收款账户证件号,必传,长度32
|
||||
AcctCertificateNo string `json:"acctCertificateNo"`
|
||||
// 收款账户开户行号,必传,长度32,取值说明:参照FBI.N信息查询,仅支持对私结算账户
|
||||
|
|
@ -55,14 +57,7 @@ type ApplyLedgerReceiverReqData struct {
|
|||
// 收款账户清算行行号,必传,长度32,取值说明:参照FBI.N信息查询,仅支持对私结算账户
|
||||
AcctClearBankCode string `json:"acctClearBankCode"`
|
||||
// 接收方附件资料,可选,集合
|
||||
AttachList []struct {
|
||||
// 附件名称,可选,长度32
|
||||
AttachName string `json:"attachName"`
|
||||
// 附件路径,可选,长度32,取值说明:(调用进件附件上传接口获取到附件路径)
|
||||
AttachStorePath string `json:"attachStorePath"`
|
||||
// 附件类型编码,可选,长度32
|
||||
AttachType string `json:"attachType"`
|
||||
} `json:"attachList"`
|
||||
AttachList []*ApplyBindAttachment `json:"attachList"`
|
||||
// 提款类型,可选,长度32,取值说明:01:主动提款,03:交易自动结算,不填默认01
|
||||
SettleType string `json:"settleType"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// BalanceQueryRequest 余额查询请求结构体
|
||||
// 用于向拉卡拉接口发送余额查询请求
|
||||
// 包含请求头信息和业务数据
|
||||
|
|
@ -23,9 +25,9 @@ type BalanceQueryReqData struct {
|
|||
// 账号,若该参数上送,则payType将无效,非必传,最大长度32
|
||||
PayNo string `json:"pay_no"`
|
||||
// 账号类型(01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)-未上送则默认01,非必传,最大长度32
|
||||
PayType string `json:"pay_type"`
|
||||
PayType consts.PayType `json:"pay_type"`
|
||||
// 账户标志(01:一般账户;03:虚户)-未上送则默认01,非必传,最大长度32
|
||||
MgtFlag string `json:"mgt_flag"`
|
||||
MgtFlag consts.MgtFlag `json:"mgt_flag"`
|
||||
}
|
||||
|
||||
// BalanceQueryResponse 余额查询响应结构体
|
||||
|
|
@ -33,30 +35,30 @@ type BalanceQueryReqData struct {
|
|||
// 包含响应状态码、消息和业务数据
|
||||
type BalanceQueryResponse struct {
|
||||
// 响应状态码,000000
|
||||
Code string `json:"code"`
|
||||
Code string `json:"retCode"`
|
||||
// 响应消息
|
||||
Msg string `json:"msg"`
|
||||
Msg string `json:"retMsg"`
|
||||
// 响应业务数据,当code为SACS0000时返回
|
||||
RespData *BalanceQueryRespData `json:"resp_data"`
|
||||
RespData *BalanceQueryRespData `json:"respData"`
|
||||
}
|
||||
|
||||
// BalanceQueryRespData 余额查询响应业务数据结构体
|
||||
// 包含余额查询返回的具体账户信息
|
||||
type BalanceQueryRespData struct {
|
||||
// 账号,必传
|
||||
PayNo string `json:"pay_no"`
|
||||
PayNo string `json:"payNo"`
|
||||
// 账户类型,必传
|
||||
PayType string `json:"pay_type"`
|
||||
PayType string `json:"payType"`
|
||||
// 账户状态,必传,取值说明:CLOSE销户,NORMAL正常,FREEZE冻结,STOPAY止付
|
||||
AcctSt string `json:"acct_st"`
|
||||
AcctSt string `json:"acctSt"`
|
||||
// 预付余额(单位元),必传
|
||||
ForceBalance string `json:"force_balance"`
|
||||
ForceBalance string `json:"forceBalance"`
|
||||
// 上日余额(单位元)-该字段已废弃使用,必传
|
||||
HisBalance string `json:"his_balance"`
|
||||
HisBalance string `json:"hisBalance"`
|
||||
// 实时余额(单位元),必传
|
||||
ReBalance string `json:"re_balance"`
|
||||
ReBalance string `json:"reBalance"`
|
||||
// 当前可用余额(单位元),必传
|
||||
CuBalance string `json:"cu_balance"`
|
||||
CuBalance string `json:"cuBalance"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断余额查询请求是否成功
|
||||
|
|
|
|||
|
|
@ -0,0 +1,75 @@
|
|||
// 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"
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -1,31 +1,34 @@
|
|||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// MergePreorder 主扫合单交易请求结构体
|
||||
type MergePreorder struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||||
ReqData *MergePreorderReqData `json:"req_data"` // 请求业务数据
|
||||
}
|
||||
|
||||
// MergePreorderReqData 主扫合单交易请求业务数据
|
||||
type MergePreorderReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,String(32),必填
|
||||
OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息,List,必填
|
||||
AccountType string `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 京东钱包:JD,String(32),必填
|
||||
TransType string `json:"trans_type"` // 接入方式,41:NATIVE(扫码支付)(仅ALIPAY支持) 51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,支付宝JS支付、拉卡拉钱包支付)71:微信小程序支付 81:支付宝H5支付(需特殊商户账户端支持),String(2),必填
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12),必填
|
||||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,Object,风控要求必送,必填
|
||||
BusiMode string `json:"busi_mode"` // 业务模式,ACQ-收单 PAY-付款不填,默认为"ACQ-收单",String(8),选填
|
||||
Subject string `json:"subject"` // 订单标题,用于简单描述订单或商品主题,传递给账户端(账户端控制,实际最多42个字节),String(42),选填
|
||||
NotifyUrl string `json:"notify_url"` // 商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128),选填
|
||||
Remark string `json:"remark"` // 备注,String(128),选填
|
||||
IdentityInfo string `json:"identity_info"` // 实名支付信息,json字符串,如{"identityNo": "3200000000000000XX", "name": "张三"},然后国密sm2加密,String(1024),选填
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,Object,选填
|
||||
CompleteNotifyUrl string `json:"complete_notify_url"` // 发货确认通知地址,发货类小程序确认收货后通知商户的地址,String(128),选填
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,String(32),必填
|
||||
OutSplitInfo []*OutSplitInfo `json:"out_split_info"` // 拆单信息,List,必填
|
||||
AccountType consts.AccountType `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 京东钱包:JD,String(32),必填
|
||||
TransType consts.TransType `json:"trans_type"` // 接入方式,41:NATIVE(扫码支付)(仅ALIPAY支持) 51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,支付宝JS支付、拉卡拉钱包支付)71:微信小程序支付 81:支付宝H5支付(需特殊商户账户端支持),String(2),必填
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12),必填
|
||||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,Object,风控要求必送,必填
|
||||
BusiMode string `json:"busi_mode"` // 业务模式,ACQ-收单 PAY-付款不填,默认为"ACQ-收单",String(8),选填
|
||||
Subject string `json:"subject"` // 订单标题,用于简单描述订单或商品主题,传递给账户端(账户端控制,实际最多42个字节),String(42),选填
|
||||
NotifyUrl string `json:"notify_url"` // 商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128),选填
|
||||
Remark string `json:"remark"` // 备注,String(128),选填
|
||||
IdentityInfo string `json:"identity_info"` // 实名支付信息,json字符串,如{"identityNo": "3200000000000000XX", "name": "张三"},然后国密sm2加密,String(1024),选填
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,Object,选填
|
||||
CompleteNotifyUrl string `json:"complete_notify_url"` // 发货确认通知地址,发货类小程序确认收货后通知商户的地址,String(128),选填
|
||||
}
|
||||
|
||||
// OutSplitInfo 拆单信息
|
||||
|
|
@ -40,29 +43,29 @@ type OutSplitInfo struct {
|
|||
|
||||
// LocationInfo 地址位置信息
|
||||
type LocationInfo struct {
|
||||
RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填
|
||||
RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填
|
||||
BaseStation string `json:"base_station"` // 基站信息,客户端设备的基站信息(主扫时基站信息使用该字段),String(128),选填
|
||||
Location string `json:"location"` // 维度,经度,商户终端的地理位置,存在必填格式:纬度,经度,+表示北纬、东经,-表示南纬、西经,精度最长支持小数点后9位。举例:+37.123456789,121.123456789,String(32),选填
|
||||
Location string `json:"location"` // 维度,经度,商户终端的地理位置,存在必填格式:纬度,经度,+表示北纬、东经,-表示南纬、西经,精度最长支持小数点后9位。举例:+37.123456789,121.123456789,String(32),选填
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域,微信主扫场景
|
||||
type AccBusiFields struct {
|
||||
TimeoutExpress string `json:"timeout_express"` // 预下单的订单的有效时间,以分钟为单位。如果在有效时间内没有完成付款,则在账户端该订单失效。如用户超时,则账户端完成失效处理,建议不超过15分钟。不传值则默认5分钟,String(2),选填
|
||||
SubAppId string `json:"sub_appid"` // 子商户公众账号ID,sub_appid(即微信小程序支付-71、公众号支付-51、微信支付-61),此参数必传,只对微信支付生效;拉卡拉钱包情况下,该字段上送LAKALA的openid,String(32),选填
|
||||
UserId string `json:"user_id"` // 用户标识,用户在子商户sub_appid下的唯一标识,sub_openid,(即微信小程序支付-71、公众号支付-51),此参数必传,只对微信支付有效,String(64),选填
|
||||
Detail string `json:"detail"` // 商品详情,单品优惠功能字段,详见下文说明,String(1024),选填
|
||||
GoodsTag string `json:"goods_tag"` // 订单优惠标记,微信平台配置的商品标记,用于优惠券或者满减使用,accountType为WECHAT时,可选填此字段,String(32),选填
|
||||
Attach string `json:"attach"` // 附加域,附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据。商户定制字段,直接送到账户端,String(128),选填
|
||||
TimeoutExpress string `json:"timeout_express"` // 预下单的订单的有效时间,以分钟为单位。如果在有效时间内没有完成付款,则在账户端该订单失效。如用户超时,则账户端完成失效处理,建议不超过15分钟。不传值则默认5分钟,String(2),选填
|
||||
SubAppId string `json:"sub_appid"` // 子商户公众账号ID,sub_appid(即微信小程序支付-71、公众号支付-51、微信支付-61),此参数必传,只对微信支付生效;拉卡拉钱包情况下,该字段上送LAKALA的openid,String(32),选填
|
||||
UserId string `json:"user_id"` // 用户标识,用户在子商户sub_appid下的唯一标识,sub_openid,(即微信小程序支付-71、公众号支付-51),此参数必传,只对微信支付有效,String(64),选填
|
||||
Detail string `json:"detail"` // 商品详情,单品优惠功能字段,详见下文说明,String(1024),选填
|
||||
GoodsTag string `json:"goods_tag"` // 订单优惠标记,微信平台配置的商品标记,用于优惠券或者满减使用,accountType为WECHAT时,可选填此字段,String(32),选填
|
||||
Attach string `json:"attach"` // 附加域,附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据。商户定制字段,直接送到账户端,String(128),选填
|
||||
GoodsDetail []*GoodsDetail `json:"goods_detail"` // 商品详情列表,微信商品详情字段说明
|
||||
}
|
||||
|
||||
// GoodsDetail 微信商品详情字段说明
|
||||
type GoodsDetail struct {
|
||||
GoodsId string `json:"goods_id"` // 商品ID,由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。如"商品编码",必填
|
||||
GoodsId string `json:"goods_id"` // 商品ID,由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。如"商品编码",必填
|
||||
WxpayGoodsId string `json:"wxpay_goods_id"` // 微信支付定义的统一商品编号,String(32),选填
|
||||
GoodsName string `json:"goods_name"` // 商品的实际名称,String(256),选填
|
||||
Quantity string `json:"quantity"` // 用户购买的数量,String(12),必填
|
||||
Price string `json:"price"` // 单价,单位为:分。如果商户有优惠,需传输商户优惠后的单价,String(12),必填
|
||||
GoodsName string `json:"goods_name"` // 商品的实际名称,String(256),选填
|
||||
Quantity string `json:"quantity"` // 用户购买的数量,String(12),必填
|
||||
Price string `json:"price"` // 单价,单位为:分。如果商户有优惠,需传输商户优惠后的单价,String(12),必填
|
||||
}
|
||||
|
||||
// NewMergePreorder 创建主扫合单交易请求
|
||||
|
|
@ -76,46 +79,46 @@ func NewMergePreorder(param *MergePreorderReqData) *MergePreorder {
|
|||
|
||||
// MergePreorderResponse 主扫合单交易响应结构体
|
||||
type MergePreorderResponse struct {
|
||||
Code string `json:"code"` // 响应码,BBS00000表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
Code string `json:"code"` // 响应码,BBS00000表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
ReqData MergePreorderRespData `json:"resp_data"` // 响应业务数据
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
}
|
||||
|
||||
// MergePreorderRespData 主扫合单交易响应业务数据
|
||||
type MergePreorderRespData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号(待上线),拉卡拉分配的商户号(请求接口中商户号)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
SplitInfo []*SplitInfo `json:"split_info"` // 拆单信息
|
||||
AccRespFields interface{} `json:"acc_resp_fields"` // 账户端返回信息域
|
||||
MerchantNo string `json:"merchant_no"` // 商户号(待上线),拉卡拉分配的商户号(请求接口中商户号)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
SplitInfo []*SplitInfo `json:"split_info"` // 拆单信息
|
||||
AccRespFields interface{} `json:"acc_resp_fields"` // 账户端返回信息域
|
||||
}
|
||||
|
||||
// SplitInfo 拆单信息
|
||||
type SplitInfo struct {
|
||||
SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号
|
||||
SubLogNo string `json:"sub_log_no"` // 子单对账单流水号
|
||||
SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号
|
||||
SubLogNo string `json:"sub_log_no"` // 子单对账单流水号
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子交易流水号,商户子交易流水号,商户号下唯一
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号
|
||||
MerchantName string `json:"merchant_name"` // 商户名称
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号
|
||||
Amount string `json:"amount"` // 金额,单位为:分。整数型字符
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号
|
||||
MerchantName string `json:"merchant_name"` // 商户名称
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号
|
||||
Amount string `json:"amount"` // 金额,单位为:分。整数型字符
|
||||
}
|
||||
|
||||
// WxAccRespFields 微信(71-小程序/微信(51-JSAPI)场景下账户端返回信息域
|
||||
type WxAccRespFields struct {
|
||||
PrepayId string `json:"prepay_id"` // 预下单ID,预支付交易会话ID
|
||||
PaySign string `json:"pay_sign"` // 支付签名信息
|
||||
AppId string `json:"app_id"` // 小程序ID,商户注册具有支付权限的小程序成功后即可获得小程序ID
|
||||
TimeStamp string `json:"time_stamp"` // 时间戳,当前的时间
|
||||
NonceStr string `json:"nonce_str"` // 随机字符串
|
||||
Package string `json:"package"` // 订单详情扩展字符串
|
||||
SignType string `json:"sign_type"` // 签名方式,签名类型,支持RSA
|
||||
SubMchId string `json:"sub_mch_id"` // 子商户号,账户端子商户号
|
||||
PrepayId string `json:"prepay_id"` // 预下单ID,预支付交易会话ID
|
||||
PaySign string `json:"pay_sign"` // 支付签名信息
|
||||
AppId string `json:"app_id"` // 小程序ID,商户注册具有支付权限的小程序成功后即可获得小程序ID
|
||||
TimeStamp string `json:"time_stamp"` // 时间戳,当前的时间
|
||||
NonceStr string `json:"nonce_str"` // 随机字符串
|
||||
Package string `json:"package"` // 订单详情扩展字符串
|
||||
SignType string `json:"sign_type"` // 签名方式,签名类型,支持RSA
|
||||
SubMchId string `json:"sub_mch_id"` // 子商户号,账户端子商户号
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断主扫合单交易是否成功
|
||||
func (m *MergePreorderResponse) SuccessOrFail() bool {
|
||||
return m.Code == "BBS00000"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
package model
|
||||
|
||||
type MrchAuthStateQueryRequest struct {
|
||||
ReqData *MrchAuthStateQueryReqData `json:"reqData"`
|
||||
Ver string `json:"ver"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
ReqId string `json:"reqId"`
|
||||
}
|
||||
|
||||
type MrchAuthStateQueryReqData struct {
|
||||
TradeMode string `json:"tradeMode" dc:"交易模式"`
|
||||
SubMerchantId string `json:"subMerchantId" dc:"子商户号"`
|
||||
MerchantNo string `json:"merchantNo" dc:"商户号"`
|
||||
}
|
||||
|
||||
type MrchAuthStateQueryResponse struct {
|
||||
RetCode string `json:"retCode"`
|
||||
RetMsg string `json:"retMsg"`
|
||||
RespData *MrchAuthStateQueryRespData `json:"respData"`
|
||||
}
|
||||
|
||||
type MrchAuthStateQueryRespData struct {
|
||||
SubMerchantId string `json:"subMerchantId"`
|
||||
CheckResult string `json:"checkResult"`
|
||||
}
|
||||
|
||||
func (t *MrchAuthStateQueryResponse) SuccessOrFail() bool {
|
||||
return t.RetCode == "000000"
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// OrderSplitLedgerRequest 订单分账请求结构体
|
||||
// 用于发起订单分账操作,支持向多个接收方进行分账
|
||||
// 拉卡拉SDK接口文档:订单分账接口
|
||||
|
|
@ -20,7 +22,7 @@ type OrderSplitLedgerReqData struct {
|
|||
OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号,必传,长度32,每个商户号下唯一,否则会校验失败
|
||||
TotalAmt string `json:"total_amt"` // 分账总金额,必传,长度15,单位为分
|
||||
LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号,条件必传,长度16
|
||||
CalType string `json:"cal_type"` // 分账计算类型,条件必传,长度2,取值说明:0-按照指定金额,1-按照指定比例,默认0
|
||||
CalType consts.CalType `json:"cal_type"` // 分账计算类型,条件必传,长度2,取值说明:0-按照指定金额,1-按照指定比例,默认0
|
||||
NotifyUrl string `json:"notify_url"` // 回调地址,条件必传,长度128,分账、分账撤销或分账回退时,通过该地址通知商户最终处理结果,不传时不回调
|
||||
RecvDatas []*OrderSplitLedgerRecvDatas `json:"recv_datas,omitempty"` // 分账接收数据对象,条件必传,列表类型,分账接收方编号必须已创建
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// Preorder 预下单请求结构体
|
||||
type Preorder struct {
|
||||
|
|
@ -11,18 +14,20 @@ type Preorder struct {
|
|||
|
||||
// PreorderReqData 预下单请求业务数据
|
||||
type PreorderReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32)
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,对应数据库表中外请求流水号,String(32)
|
||||
AccountType string `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付:BESTPAY 苏宁易付宝:SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD,String(32)
|
||||
TransType string `json:"trans_type"` // 接入方式,41:NATIVE(ALIPAY, 云闪付支持, 京东白条分期)51:JSAPI(微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期)71:微信小程序支付61:APP支付(微信APP支付),String(2)
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12)
|
||||
NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128)
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32)
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,商户系统唯一,对应数据库表中外请求流水号,String(32)
|
||||
AccountType consts.AccountType `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 翼支付:BESTPAY 苏宁易付宝:SUNING 拉卡拉支付账户:LKLACC 网联小钱包:NUCSPAY 京东钱包:JD,String(32)
|
||||
TransType consts.TransType `json:"trans_type"` // 接入方式,41:NATIVE(ALIPAY, 云闪付支持, 京东白条分期)51:JSAPI(微信公众号支付, 支付宝服务窗、JS支付, 翼支付JS支付, 拉卡拉钱包支付, 京东白条分期)71:微信小程序支付61:APP支付(微信APP支付),String(2)
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12)
|
||||
NotifyUrl string `json:"notify_url"` // 商户通知地址,商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128)
|
||||
SettleType consts.SettleType `json:"settle_type"` // “0”或者空,常规结算方式,如需接拉卡拉分账通需传“1”,商户未开通分账之前切记不用上送此参数。
|
||||
LocationInfo struct {
|
||||
RequestIp string `json:"request_ip"` // 请求方IP地址,存在必填,格式如36.45.36.95,String(64)
|
||||
Location string `json:"location"` // 纬度,经度,商户终端的地理位置,银联二维码交易必填,整体格式:纬度,经度,+表示北纬、东经,-表示南纬、西经。经度格式:1位正负号+3位整数+1位小数点+5位小数;纬度格式:1位正负号+2位整数+1位小数点+6位小数;举例:+31.221345,+121.12345,String(32)
|
||||
} `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 {
|
||||
|
|
@ -35,22 +40,21 @@ func NewPreorder(param *PreorderReqData) *Preorder {
|
|||
|
||||
// PreorderResponse 预下单响应结构体
|
||||
type PreorderResponse struct {
|
||||
Code string `json:"code"` // 响应码,BBS00000表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
ReqData ReqData `json:"resp_data"` // 响应业务数据
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
Code string `json:"code"` // 响应码,BBS00000表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
ReqData *ReqData `json:"resp_data"` // 响应业务数据
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
}
|
||||
|
||||
// ReqData 响应业务数据
|
||||
type ReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
OutTradeNo string `json:"out_trade_no"` // 外部订单号(商户订单号)
|
||||
TradeNo string `json:"trade_no"` // 交易号,拉卡拉生成的订单号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
SettleMerchantNo string `json:"settle_merchant_no"` // 结算商户号
|
||||
SettleTermNo string `json:"settle_term_no"` // 结算终端号
|
||||
AccRespFields WxPreorderResponse `json:"acc_resp_fields"` // 支付通道返回的具体信息
|
||||
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
OutTradeNo string `json:"out_trade_no"` // 外部订单号(商户订单号)
|
||||
TradeNo string `json:"trade_no"` // 交易号,拉卡拉生成的订单号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
SettleMerchantNo string `json:"settle_merchant_no"` // 结算商户号
|
||||
SettleTermNo string `json:"settle_term_no"` // 结算终端号
|
||||
AccRespFields *WxPreorderResponse `json:"acc_resp_fields"` // 支付通道返回的具体信息
|
||||
}
|
||||
|
||||
// WxPreorderResponse 支付通道返回的具体信息
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ package model
|
|||
// 包含请求头信息和业务数据
|
||||
type QueryLedgerMerRequest struct {
|
||||
// 请求业务数据
|
||||
ReqData *QueryLedgerMerReqData `json:"req_data"`
|
||||
ReqData *QueryLedgerMerReqData `json:"reqData"`
|
||||
// 接口版本号
|
||||
Version string `json:"version"`
|
||||
// 请求时间,格式为yyyyMMddHHmmss
|
||||
ReqTime string `json:"req_time"`
|
||||
ReqTime string `json:"reqTime"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerReqData 分账商户查询请求业务数据结构体
|
||||
|
|
@ -19,13 +19,13 @@ type QueryLedgerMerReqData struct {
|
|||
// 接口版本号,必传,长度8,取值说明:1.0
|
||||
Version string `json:"version"`
|
||||
// 订单编号(便于后续跟踪排查问题及核对报文),必传,长度32,取值说明:14位年月日(24小时制)分秒+8位的随机数(不重复)
|
||||
OrderNo string `json:"order_no"`
|
||||
OrderNo string `json:"orderNo"`
|
||||
// 机构代码,必传,长度32
|
||||
OrgCode string `json:"org_code"`
|
||||
OrgCode string `json:"orgCode"`
|
||||
// 拉卡拉内部商户号,可选,长度32,取值说明:拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
MerInnerNo string `json:"merInnerNo"`
|
||||
// 银联商户号,可选,长度32,取值说明:拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
MerCupNo string `json:"merCupNo"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerResponse 分账商户查询响应结构体
|
||||
|
|
@ -33,58 +33,58 @@ type QueryLedgerMerReqData struct {
|
|||
// 包含响应状态码、消息和业务数据
|
||||
type QueryLedgerMerResponse struct {
|
||||
// 响应状态码,000000表示成功
|
||||
Code string `json:"code"`
|
||||
RetCode string `json:"retCode"`
|
||||
// 响应消息
|
||||
Msg string `json:"msg"`
|
||||
RetMsg string `json:"retMsg"`
|
||||
// 响应业务数据,当code为000000时返回
|
||||
RespData *QueryLedgerMerRespData `json:"resp_data"`
|
||||
RespData *QueryLedgerMerRespData `json:"respData"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerRespData 分账商户查询响应业务数据结构体
|
||||
// 包含分账商户查询返回的具体业务信息
|
||||
type QueryLedgerMerRespData struct {
|
||||
// 分账商户机构号
|
||||
OrgId string `json:"org_id"`
|
||||
OrgId string `json:"orgId"`
|
||||
// 分账商户机构名称
|
||||
OrgName string `json:"org_name"`
|
||||
OrgName string `json:"orgName"`
|
||||
// 拉卡拉内部商户号
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
MerInnerNo string `json:"merInnerNo"`
|
||||
// 银联商户号
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
MerCupNo string `json:"merCupNo"`
|
||||
// 最低分账比例(百分比,支持2位精度),取值说明:70或70.50
|
||||
SplitLowestRatio string `json:"split_lowest_ratio"`
|
||||
SplitLowestRatio float64 `json:"splitLowestRatio"`
|
||||
// 商户分账状态,取值说明:VALID启用,INVALID禁用
|
||||
SplitStatus string `json:"split_status"`
|
||||
SplitStatus string `json:"splitStatus"`
|
||||
// 分账范围,取值说明:ALL:全部交易分账(商户所有交易默认待分账),MARK:标记交易分账(只有带分账标识交易待分账,其余交易正常结算),默认:MARK
|
||||
SplitRange string `json:"split_range"`
|
||||
SplitRange string `json:"splitRange"`
|
||||
// 分账依据,取值说明:TR或空:交易分账,BA:余额分账,默认:TR交易分账
|
||||
SepFundSource string `json:"sep_fund_source"`
|
||||
SepFundSource string `json:"sepFundSource"`
|
||||
// 平台ID,取值说明:如果商户和绑定平台分账,返回平台ID
|
||||
PlatformId string `json:"platform_id"`
|
||||
PlatformId string `json:"platformId"`
|
||||
// 分账发起方式,取值说明:AUTO:自动规则分账,POINTRULE:指定规则分账,MANUAL:手动规则分账
|
||||
SplitLaunchMode string `json:"split_launch_mode"`
|
||||
SplitLaunchMode string `json:"splitLaunchMode"`
|
||||
// 分账规则来源,取值说明:MER:商户分账规则,PLATFORM:平台分账规则
|
||||
SplitRuleSource string `json:"split_rule_source"`
|
||||
SplitRuleSource string `json:"splitRuleSource"`
|
||||
// 已绑定接收方列表
|
||||
BindRelations []BindRelation `json:"bind_relations"`
|
||||
BindRelations []*BindRelation `json:"bindRelations"`
|
||||
}
|
||||
|
||||
// BindRelation 已绑定接收方信息结构体
|
||||
// 用于表示分账商户已绑定的接收方信息
|
||||
type BindRelation struct {
|
||||
// 拉卡拉内部商户号
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
MerInnerNo string `json:"merInnerNo"`
|
||||
// 银联商户号
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
MerCupNo string `json:"merCupNo"`
|
||||
// 接收方编号
|
||||
ReceiverNo string `json:"receiver_no"`
|
||||
ReceiverNo string `json:"receiverNo"`
|
||||
// 接收方编号名称
|
||||
ReceiverName string `json:"receiver_name"`
|
||||
ReceiverName string `json:"receiverName"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断分账商户查询请求是否成功
|
||||
// 成功条件:响应码为000000
|
||||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *QueryLedgerMerResponse) SuccessOrFail() bool {
|
||||
return resp.Code == "000000"
|
||||
}
|
||||
return resp.RetCode == "000000"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
// 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"
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package model
|
||||
|
||||
type QuerySubMerInfoRequest struct {
|
||||
ReqData *QuerySubMerInfoReqData `json:"reqData"`
|
||||
Ver string `json:"ver"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
ReqId string `json:"reqId"`
|
||||
}
|
||||
|
||||
type QuerySubMerInfoReqData struct {
|
||||
Version string `json:"version" dc:"接口版本号"`
|
||||
OrderNo string `json:"orderNo" dc:"订单编号,保证唯一"`
|
||||
OrgCode string `json:"orgCode" dc:"机构代码"`
|
||||
MerInnerNo string `json:"merInnerNo" dc:"拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准。"`
|
||||
MerCupNo string `json:"merCupNo" dc:"拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准。"`
|
||||
RegisterChannel string `json:"registerChannel" dc:"报备渠道"`
|
||||
RegisterType string `json:"registerType" dc:"报备类型"`
|
||||
RegisterStatus string `json:"registerStatus" dc:"报备状态 SUCCESS:成功;FAIL:失败"`
|
||||
SubMchId string `json:"subMchId" dc:"子商户号"`
|
||||
}
|
||||
|
||||
type QuerySubMerInfoResponse struct {
|
||||
RetCode string `json:"retCode"`
|
||||
RetMsg string `json:"retMsg"`
|
||||
RespData *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"
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
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"
|
||||
}
|
||||
|
|
@ -1,29 +1,33 @@
|
|||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// Refund 退款请求结构体
|
||||
type Refund struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||||
ReqData *RefundReqData `json:"req_data"` // 请求业务数据
|
||||
}
|
||||
|
||||
// RefundReqData 退款请求业务数据
|
||||
type RefundReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,商户系统唯一,String(32),必填
|
||||
RefundAmount string `json:"refund_amount"` // 退款金额,单位分,整数型字符,String(12),必填
|
||||
RefundAccMode string `json:"refund_acc_mode"` // 退款账户模式,String(2),必填,00-调用户余额 65-调商户余额 66-调终端余额 30-调账户
|
||||
LocationInfo struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,商户系统唯一,String(32),必填
|
||||
RefundAmount string `json:"refund_amount"` // 退款金额,单位分,整数型字符,String(12),必填
|
||||
RefundAccMode consts.RefundAccMode `json:"refund_acc_mode"` // 退款账户模式,String(2),必填,00-调用户余额 65-调商户余额 66-调终端余额 30-调账户
|
||||
LocationInfo struct {
|
||||
RequestIp string `json:"request_ip"` // 请求方IP地址,请求方的IP地址,存在必填,格式如36.45.36.95,String(64),必填
|
||||
} `json:"location_info"` // 地址位置信息,Object,必填
|
||||
NotifyUrl string `json:"notify_url"` // 后台通知地址,交易结果通知地址,String(128),选填
|
||||
OriginLogNo string `json:"origin_log_no"` // 拉卡拉对账单流水号,正常退款的拉卡拉对账单流水号,String(14),选填
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号,String(32),选填
|
||||
OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填
|
||||
RefundSplitMsg string `json:"refund_split_msg"` // 退款分账状态,String(2),选填,00-为默认,01-为分账;分账交易退款必须填写。需要退款上送该笔的分账状态,为分账时,是退分账前处理,还是退分账后处理
|
||||
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),选填
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no"` // 原始交易商户流水号,String(32),选填
|
||||
OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填
|
||||
RefundSplitMsg string `json:"refund_split_msg"` // 退款分账状态,String(2),选填,00-为默认,01-为分账;分账交易退款必须填写。需要退款上送该笔的分账状态,为分账时,是退分账前处理,还是退分账后处理
|
||||
}
|
||||
|
||||
// NewRefund 创建退款请求
|
||||
|
|
@ -37,34 +41,34 @@ func NewRefund(param *RefundReqData) *Refund {
|
|||
|
||||
// RefundResponse 退款响应结构体
|
||||
type RefundResponse struct {
|
||||
Code string `json:"code"` // 响应码,"000000"表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
Code string `json:"code"` // 响应码,"000000"表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
RespData RefundRespData `json:"resp_data"` // 响应业务数据
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
}
|
||||
|
||||
// RefundRespData 退款响应业务数据
|
||||
type RefundRespData struct {
|
||||
TradeState string `json:"trade_state"` // 交易状态,String(15),必填,INIT-初始化(需商户确认结果);SUCCESS-交易成功;FAIL-交易失败;REFUND-交易退款中(需商户确认结果);PROCESSING-交易处理中(需商户确认结果);TIMEOUT-请求超时(需商户确认结果);EXCEPTION-异常(失败)
|
||||
RefundType string `json:"refund_type"` // 退款模式,String(20),必填
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号,String(32),必填
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号,String(32),必填
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,String(14),必填
|
||||
AccType string `json:"acc_type"` // 账户类型,String(32),必填
|
||||
TotalAmount string `json:"total_amount"` // 交易金额,单位分,整数型字符,String(12),必填
|
||||
RefundAmount string `json:"refund_amount"` // 申请退款金额,单位分,整数型字符,String(12),必填
|
||||
PayedAmount string `json:"payed_amount"` // 实际退款金额,单位分,整数型字符,String(12),必填
|
||||
TradeTime string `json:"trade_time"` // 退款时间,实际退款时间,格式:yyyyMMddHHmmss,String(14),选填
|
||||
OriginLogNo string `json:"origin_log_no"` // 原拉卡拉对账单流水号,原交易的拉卡拉对账单流水号,String(14),选填
|
||||
TradeState string `json:"trade_state"` // 交易状态,String(15),必填,INIT-初始化(需商户确认结果);SUCCESS-交易成功;FAIL-交易失败;REFUND-交易退款中(需商户确认结果);PROCESSING-交易处理中(需商户确认结果);TIMEOUT-请求超时(需商户确认结果);EXCEPTION-异常(失败)
|
||||
RefundType string `json:"refund_type"` // 退款模式,String(20),必填
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,请求报文中的商户请求流水号,String(32),必填
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号,String(32),必填
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,String(14),必填
|
||||
AccType string `json:"acc_type"` // 账户类型,String(32),必填
|
||||
TotalAmount string `json:"total_amount"` // 交易金额,单位分,整数型字符,String(12),必填
|
||||
RefundAmount string `json:"refund_amount"` // 申请退款金额,单位分,整数型字符,String(12),必填
|
||||
PayedAmount string `json:"payed_amount"` // 实际退款金额,单位分,整数型字符,String(12),必填
|
||||
TradeTime string `json:"trade_time"` // 退款时间,实际退款时间,格式:yyyyMMddHHmmss,String(14),选填
|
||||
OriginLogNo string `json:"origin_log_no"` // 原拉卡拉对账单流水号,原交易的拉卡拉对账单流水号,String(14),选填
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no"` // 原商户请求流水号,原交易中的商户请求流水号,String(32),选填
|
||||
OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填
|
||||
UpCouponInfo string `json:"up_coupon_info"` // 银联优惠券信息,目标字段,单位是银联侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(500),选填
|
||||
TanteInfo string `json:"tante_info"` // 淘方信息,目标字段,数据是淘方侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(32),选填
|
||||
ChannelRetDesc string `json:"channel_ret_desc"` // 渠道返回描述,String,必填,codeMsg: "R000000-成功", "R011122-渠道处理超时"
|
||||
OriginTradeNo string `json:"origin_trade_no"` // 原交易拉卡拉交易订单号,String(32),选填
|
||||
UpCouponInfo string `json:"up_coupon_info"` // 银联优惠券信息,目标字段,单位是银联侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(500),选填
|
||||
TanteInfo string `json:"tante_info"` // 淘方信息,目标字段,数据是淘方侧返回的四部分内容:{"fundChannel": "BOC", "amount": "10"},String(32),选填
|
||||
ChannelRetDesc string `json:"channel_ret_desc"` // 渠道返回描述,String,必填,codeMsg: "R000000-成功", "R011122-渠道处理超时"
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断退款交易是否成功
|
||||
func (r *RefundResponse) SuccessOrFail() bool {
|
||||
return r.Code == "000000"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
type SeparateRequest struct {
|
||||
ReqData *SeparateReqData `json:"req_data"` // 请求数据
|
||||
Version string `json:"version"` // 版本号
|
||||
|
|
@ -13,7 +15,7 @@ type SeparateReqData struct {
|
|||
OutSeparateNo string `json:"out_separate_no"` // 商户分账指令流水号
|
||||
TotalAmt string `json:"total_amt"` // 分账总金额 [单位:分]
|
||||
LklOrgNo string `json:"lkl_org_no"` // 拉卡拉机构编号 非必填
|
||||
CalType string `json:"cal_type"` // 分账计算类型 0- 按照指定金额,1- 按照指定比例。默认 0 非必填
|
||||
CalType consts.CalType `json:"cal_type"` // 分账计算类型 0- 按照指定金额,1- 按照指定比例。默认 0 非必填
|
||||
SeparateType string `json:"separate_type"`
|
||||
NotifyUrl string `json:"notify_url"` // 回调地址 分账,分账撤销或分账回退时,是异步接口。通过该地址通知商户最终处理结果。不传时,不回调
|
||||
RecvDatas []*SeparateRecvDatas `json:"recv_datas"` // 分账接收数据对象 分账接收方编号必须已创建
|
||||
|
|
|
|||
|
|
@ -2,41 +2,41 @@ package model
|
|||
|
||||
// TradeQuery 交易查询请求结构体
|
||||
type TradeQuery struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // API版本号
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // API版本号
|
||||
OutOrgCode string `json:"out_org_code"` // 外部机构码
|
||||
ReqData *TradeQueryReqData `json:"req_data"` // 请求数据
|
||||
ReqData *TradeQueryReqData `json:"req_data"` // 请求数据
|
||||
}
|
||||
|
||||
// TradeQueryReqData 交易查询请求数据结构体
|
||||
type TradeQueryReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
TermNo string `json:"term_no"` // 终端号,必传
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
TermNo string `json:"term_no"` // 终端号,必传
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,条件必传,与trade_no必传其一
|
||||
}
|
||||
|
||||
// TradeQueryResponse 交易查询响应结构体
|
||||
type TradeQueryResponse struct {
|
||||
Msg string `json:"msg"` // 响应消息
|
||||
Msg string `json:"msg"` // 响应消息
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
Code string `json:"code"` // 响应码,000000表示成功
|
||||
Code string `json:"code"` // 响应码,000000表示成功
|
||||
RespData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,必传
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉商户订单号,必传
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账流水号,必传
|
||||
TradeMainType string `json:"trade_main_type"` // 交易大类,条件必传(PREORDER-主扫,MICROPAY-被扫,REFUND-退款,CANCEL-撤销)
|
||||
SplitAttr string `json:"split_attr"` // 拆单属性,条件必传(M-主单,S-子单)
|
||||
SplitInfo []struct {
|
||||
SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号,必传
|
||||
SubLogNo string `json:"sub_log_no"` // 子单对账单单流水号,必传
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号,必传
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉商户订单号,必传
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账流水号,必传
|
||||
TradeMainType string `json:"trade_main_type"` // 交易大类,条件必传(PREORDER-主扫,MICROPAY-被扫,REFUND-退款,CANCEL-撤销)
|
||||
SplitAttr string `json:"split_attr"` // 拆单属性,条件必传(M-主单,S-子单)
|
||||
SplitInfo []struct {
|
||||
SubTradeNo string `json:"sub_trade_no"` // 子单交易流水号,必传
|
||||
SubLogNo string `json:"sub_log_no"` // 子单对账单单流水号,必传
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子交易流水号,必传
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
MerchantName string `json:"merchant_name"` // 商户名称,必传
|
||||
TermNo string `json:"term_no"` // 终端号,必传
|
||||
Amount string `json:"amount"` // 金额,必传(单位分)
|
||||
} `json:"split_info"` // 拆单信息,条件必传(如果查询订单是主单,则返回)
|
||||
RefundSplitInfo []struct {
|
||||
} `json:"split_info"` // 拆单信息,条件必传(如果查询订单是主单,则返回)
|
||||
RefundSplitInfo []struct {
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子退款交易流水号,必传
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
TermNo string `json:"term_no"` // 终端号,必传
|
||||
|
|
@ -46,28 +46,28 @@ type TradeQueryResponse struct {
|
|||
TradeState string `json:"trade_state"` // 子交易状态,条件必传(SUCCESS-交易成功 FAIL-交易失败)
|
||||
ResultCode string `json:"result_code"` // 处理结果码,条件必传
|
||||
ResultMsg string `json:"result_msg"` // 处理描述,条件必传
|
||||
} `json:"refund_split_info"` // 合单退款拆单信息,条件必传(如果查询订单是退款主单,则返回)
|
||||
AccTradeNo string `json:"acc_trade_no"` // 账户端交易订单号,必传
|
||||
AccountType string `json:"account_type"` // 钱包类型,必传(微信: WECHAT 支付宝: ALIPAY 银联: UQRCODEPAY 翼支付: BESTPAY 苏宁支付: SUNING)
|
||||
TradeState string `json:"trade_state"` // 交易状态,必传(INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中 UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款)
|
||||
TradeStateDesc string `json:"trade_state_desc"` // 交易状态描述,条件必传
|
||||
TotalAmount string `json:"total_amount"` // 订单金额,必传(单位分)
|
||||
PayerAmount string `json:"payer_amount"` // 付款人实付金额,条件必传(单位分)
|
||||
AccSettleAmount string `json:"acc_settle_amount"` // 账户端结算金额,条件必传(单位分)
|
||||
AccMdiscountAmount string `json:"acc_mdiscount_amount"` // 商户侧优惠金额,条件必传(单位分)
|
||||
AccDiscountAmount string `json:"acc_discount_amount"` // 账户端优惠金额,条件必传(单位分)
|
||||
AccOtherDiscountAmount string `json:"acc_other_discount_amount"` // 账户端其它优惠金额,条件必传(单位分)
|
||||
TradeTime string `json:"trade_time"` // 交易完成时间,条件必传(yyyyMMddHHmmss)
|
||||
UserId1 string `json:"user_id1"` // 用户标识1,条件必传(微信sub_open_id 支付宝buyer_login_id 买家支付账号)
|
||||
UserId2 string `json:"user_id2"` // 用户标识2,条件必传(微信open_id 支付宝buyer_user_id 银user_id)
|
||||
BankType string `json:"bank_type"` // 付款银行,条件必传
|
||||
CardType string `json:"card_type"` // 银行卡类型,条件必传(00: 借记卡 01: 贷记卡 02: 微信零钱 03: 支付宝花呗 04: 支付宝其他 05: 数字货币 06: 拉卡拉支付账户 99: 未知)
|
||||
AccActivityId string `json:"acc_activity_id"` // 活动ID,条件必传(在账户端商户后台配置的批次ID)
|
||||
TradeReqDate string `json:"trade_req_date"` // 交易请求日期,必传(yyyyMMdd)
|
||||
AccRespFields map[string]interface{} `json:"acc_resp_fields"` // 账户端返回信息域,条件必传
|
||||
} `json:"refund_split_info"` // 合单退款拆单信息,条件必传(如果查询订单是退款主单,则返回)
|
||||
AccTradeNo string `json:"acc_trade_no"` // 账户端交易订单号,必传
|
||||
AccountType string `json:"account_type"` // 钱包类型,必传(微信: WECHAT 支付宝: ALIPAY 银联: UQRCODEPAY 翼支付: BESTPAY 苏宁支付: SUNING)
|
||||
TradeState string `json:"trade_state"` // 交易状态,必传(INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中 UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款)
|
||||
TradeStateDesc string `json:"trade_state_desc"` // 交易状态描述,条件必传
|
||||
TotalAmount string `json:"total_amount"` // 订单金额,必传(单位分)
|
||||
PayerAmount string `json:"payer_amount"` // 付款人实付金额,条件必传(单位分)
|
||||
AccSettleAmount string `json:"acc_settle_amount"` // 账户端结算金额,条件必传(单位分)
|
||||
AccMdiscountAmount string `json:"acc_mdiscount_amount"` // 商户侧优惠金额,条件必传(单位分)
|
||||
AccDiscountAmount string `json:"acc_discount_amount"` // 账户端优惠金额,条件必传(单位分)
|
||||
AccOtherDiscountAmount string `json:"acc_other_discount_amount"` // 账户端其它优惠金额,条件必传(单位分)
|
||||
TradeTime string `json:"trade_time"` // 交易完成时间,条件必传(yyyyMMddHHmmss)
|
||||
UserId1 string `json:"user_id1"` // 用户标识1,条件必传(微信sub_open_id 支付宝buyer_login_id 买家支付账号)
|
||||
UserId2 string `json:"user_id2"` // 用户标识2,条件必传(微信open_id 支付宝buyer_user_id 银user_id)
|
||||
BankType string `json:"bank_type"` // 付款银行,条件必传
|
||||
CardType string `json:"card_type"` // 银行卡类型,条件必传(00: 借记卡 01: 贷记卡 02: 微信零钱 03: 支付宝花呗 04: 支付宝其他 05: 数字货币 06: 拉卡拉支付账户 99: 未知)
|
||||
AccActivityId string `json:"acc_activity_id"` // 活动ID,条件必传(在账户端商户后台配置的批次ID)
|
||||
TradeReqDate string `json:"trade_req_date"` // 交易请求日期,必传(yyyyMMdd)
|
||||
AccRespFields map[string]interface{} `json:"acc_resp_fields"` // 账户端返回信息域,条件必传
|
||||
} `json:"resp_data"` // 响应数据
|
||||
}
|
||||
|
||||
func (t *TradeQueryResponse) SuccessOrFail() bool {
|
||||
return t.Code == "000000"
|
||||
return t.Code == "BBS00000"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
type UploadFileRequest struct {
|
||||
ReqData *UploadFileReqData `json:"reqData"`
|
||||
Ver string `json:"ver"`
|
||||
|
|
@ -8,12 +10,12 @@ type UploadFileRequest struct {
|
|||
}
|
||||
|
||||
type UploadFileReqData struct {
|
||||
Version string `json:"version"`
|
||||
OrderNo string `json:"orderNo"`
|
||||
AttType string `json:"attType"`
|
||||
AttExtName string `json:"attExtName"`
|
||||
AttContext string `json:"attContext"`
|
||||
OrgCode string `json:"orgCode"`
|
||||
Version string `json:"version"`
|
||||
OrderNo string `json:"orderNo"`
|
||||
AttType consts.AttType `json:"attType"`
|
||||
AttExtName string `json:"attExtName"`
|
||||
AttContext string `json:"attContext"`
|
||||
OrgCode string `json:"orgCode"`
|
||||
}
|
||||
|
||||
type UploadFileResponse struct {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package model
|
||||
|
||||
import "github.com/black1552/lkl_sdk/consts"
|
||||
|
||||
// WithdrawRequest 提现请求结构体
|
||||
// 用于向拉卡拉接口发送提现请求
|
||||
// 包含请求头信息和业务数据
|
||||
|
|
@ -29,7 +31,7 @@ type WithdrawReqData struct {
|
|||
// 账号(若该参数上送,则payType将无效),非必传,最大长度32
|
||||
PayNo string `json:"pay_no"`
|
||||
// 账号类型(01:收款账户,04:分账接收方账户)未上送则默认01,必传,最大长度32,分账接收方提现时需填04
|
||||
PayType string `json:"pay_type"`
|
||||
PayType consts.PayType `json:"pay_type"`
|
||||
// 备注信息,非必传,最大长度64
|
||||
Remark string `json:"remark"`
|
||||
// 摘要,非必传,最大长度64
|
||||
|
|
@ -64,4 +66,4 @@ type WithdrawRespData struct {
|
|||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *WithdrawResponse) SuccessOrFail() bool {
|
||||
return resp.Code == "000000"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue