Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9126cbf2c4 | ||
|
|
786dbf7ce9 | ||
|
|
54917f8985 | ||
|
|
7b9657a9e8 | ||
|
|
7777630306 | ||
|
|
de64d7b076 | ||
|
|
02cab5fbde | ||
|
|
adabb186f0 | ||
|
|
90f319f763 | ||
|
|
9813be8873 | ||
|
|
de77aa78b1 | ||
|
|
290d3e6ba7 | ||
|
|
7974b4d570 | ||
|
|
38b8d577cc | ||
|
|
5824ed7eef | ||
|
|
0aa9bc80ec |
@@ -12,7 +12,9 @@ lklsdk/
|
||||
├── trade.go # 交易相关功能
|
||||
├── account.go # 账户相关功能
|
||||
├── merge_pre.go # 主扫合单交易功能
|
||||
└── sdk.go # SDK主入口
|
||||
├── sdk.go # SDK主入口
|
||||
├── merchant.go # 商户相关功能
|
||||
└── uploadFile.go # 文件上传相关功能
|
||||
```
|
||||
|
||||
## 安装
|
||||
@@ -30,6 +32,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 +125,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 +184,7 @@ splitLedgerReq := &model.OrderSplitLedgerReqData{
|
||||
OutSeparateNo: "", // 商户分账指令流水号
|
||||
TotalAmt: "", // 分账总金额,单位为分
|
||||
LklOrgNo: "", // 拉卡拉机构编号
|
||||
CalType: "", // 分账计算类型(0-按金额,1-按比例)
|
||||
CalType: consts.CAL_TYPE_AMOUNT, // 分账计算类型(0-按金额,1-按比例)
|
||||
NotifyUrl: "", // 回调地址
|
||||
RecvDatas: recvDatas, // 分账接收方数据
|
||||
}
|
||||
@@ -242,8 +245,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 +285,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,34 @@
|
||||
package transpreorder
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type TransPreorder struct {
|
||||
client *common.Client[TransPreorderResponse]
|
||||
}
|
||||
|
||||
func NewTransPreorderApi(client *common.Client[TransPreorderResponse]) *TransPreorder {
|
||||
return &TransPreorder{client: client}
|
||||
}
|
||||
|
||||
func (tp *TransPreorder) TransPreorder(reqData *TransPreorderRequestData) (*TransPreorderResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &TransPreorderRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
return tp.client.DoRequest(consts.BASE_URL+consts.LKL_DCP_TRANS_PREORDER_URL, request)
|
||||
}
|
||||
func (tp *TransPreorder) TransPreorderTest(reqData *TransPreorderRequestData) (*TransPreorderResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &TransPreorderRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
return tp.client.DoRequest(consts.BASE_TEST_URL+consts.LKL_DCP_TRANS_PREORDER_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package transpreorder
|
||||
|
||||
type TransPreorderRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *TransPreorderRequestData `json:"req_data"`
|
||||
}
|
||||
|
||||
type TransPreorderRequestData struct {
|
||||
OutTradeNo string `json:"out_trade_no"`
|
||||
TotalAmount string `json:"total_amount"`
|
||||
Subject string `json:"subject"`
|
||||
Body string `json:"body"`
|
||||
NotifyUrl string `json:"notify_url"`
|
||||
ExpireTime string `json:"expire_time"`
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package transpreorder
|
||||
|
||||
type TransPreorderResponse struct {
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package labs
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
relationclose "github.com/black1552/lkl_sdk/basePay/labs/relationClose"
|
||||
"github.com/black1552/lkl_sdk/basePay/labs/relationRefund"
|
||||
"github.com/black1552/lkl_sdk/basePay/labs/relationRevoked"
|
||||
transmicropay "github.com/black1552/lkl_sdk/basePay/labs/transMicropay"
|
||||
"github.com/black1552/lkl_sdk/basePay/labs/transMicropayEncry"
|
||||
"github.com/black1552/lkl_sdk/basePay/labs/transPreorder"
|
||||
"github.com/black1552/lkl_sdk/basePay/labs/transPreorederEncry"
|
||||
transquery "github.com/black1552/lkl_sdk/basePay/labs/transQuery"
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
)
|
||||
|
||||
type Labs struct {
|
||||
RelationClose *relationclose.RelationCloseServer
|
||||
RelationRefund *relationRefund.RelationRefundServer
|
||||
RelationRevoked *relationRevoked.RelationRevokedServer
|
||||
TransMicropay *transmicropay.TransMicropayServer
|
||||
TransMicropayEncry *transMicropayEncry.TransMicropayEncryServer
|
||||
TransPreorder *transPreorder.TransPreorderServer
|
||||
TransPreorderEncry *transPreorederEncry.TransPreorderEncryServer
|
||||
TransQuery *transquery.TransQueryServer
|
||||
}
|
||||
|
||||
func NewLabs(ctx context.Context, cfgJson string) *Labs {
|
||||
return &Labs{
|
||||
RelationClose: relationclose.NewRelationCloseServer(common.NewClient[relationclose.RelationCloseResponse](ctx, cfgJson)),
|
||||
RelationRefund: relationRefund.NewRelationRefundServer(common.NewClient[relationRefund.RelationRefundResponse](ctx, cfgJson)),
|
||||
RelationRevoked: relationRevoked.NewRelationRevokedServer(common.NewClient[relationRevoked.RelationRevokedResponse](ctx, cfgJson)),
|
||||
TransMicropay: transmicropay.NewTransMicropayServer(common.NewClient[transmicropay.TransMicropayResponse](ctx, cfgJson)),
|
||||
TransMicropayEncry: transMicropayEncry.NewTransMicropayEncryServer(common.NewClient[transMicropayEncry.TransMicropayEncryResponse](ctx, cfgJson)),
|
||||
TransPreorder: transPreorder.NewTransPreorderServer(common.NewClient[transPreorder.TransPreorderResponse](ctx, cfgJson)),
|
||||
TransPreorderEncry: transPreorederEncry.NewTransPreorderEncryServer(common.NewClient[transPreorederEncry.TransPreorederEncryResponse](ctx, cfgJson)),
|
||||
TransQuery: transquery.NewTransQueryServer(common.NewClient[transquery.TransQueryResponse](ctx, cfgJson)),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package relationclose
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// RelationCloseServer 聚合扫码关单API结构体
|
||||
type RelationCloseServer struct {
|
||||
Client *common.Client[RelationCloseResponse]
|
||||
}
|
||||
|
||||
// NewAPI 创建聚合扫码关单API实例
|
||||
func NewRelationCloseServer(client *common.Client[RelationCloseResponse]) *RelationCloseServer {
|
||||
return &RelationCloseServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// RelationClose 执行聚合扫码关单请求
|
||||
// - merchantNo: 商户号
|
||||
// - termNo: 终端号
|
||||
// - 原交易标识:originOutTradeNo、originTradeNo、(originOutOrderSource+originOutOrderNo) 三者必选其一
|
||||
// - locationInfo: 地址位置信息(风控要求必送)
|
||||
func (a *RelationCloseServer) RelationClose(reqData *RelationCloseRequestData) (*RelationCloseResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &RelationCloseRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
// 发送请求 - 使用consts中定义的聚合扫码关单URL
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_RELATION_CLOSE_URL, request)
|
||||
}
|
||||
|
||||
// RelationCloseTest 执行聚合扫码关单测试请求
|
||||
// - merchantNo: 商户号
|
||||
// - termNo: 终端号
|
||||
// - 原交易标识:originOutTradeNo、originTradeNo、(originOutOrderSource+originOutOrderNo) 三者必选其一
|
||||
// - locationInfo: 地址位置信息(风控要求必送)
|
||||
func (a *RelationCloseServer) RelationCloseTest(reqData *RelationCloseRequestData) (*RelationCloseResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &RelationCloseRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
// 发送请求 - 使用consts中定义的聚合扫码关单URL
|
||||
return a.Client.DoRequest(consts.BASE_TEST_URL+consts.LKL_BASE_URL_RELATION_CLOSE_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package relationclose
|
||||
|
||||
// LocationInfo 地址位置信息结构体
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址 (必填)
|
||||
BaseStation string `json:"base_station,omitempty"` // 基站信息 (可选)
|
||||
Location string `json:"location,omitempty"` // 纬度,经度 (可选)
|
||||
}
|
||||
|
||||
// RelationCloseRequestData 聚合扫码关单请求数据结构体
|
||||
type RelationCloseRequestData struct {
|
||||
MerchantNo string `json:"merchant_no" dc:"商户号 (必填)"` // 商户号 (必填)
|
||||
TermNo string `json:"term_no" dc:"终端号 (必填)"` // 终端号 (必填)
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty" dc:"原商户交易流水号 (可选)"` // 原商户交易流水号 (可选)
|
||||
OriginTradeNo string `json:"origin_trade_no,omitempty" dc:"原交易拉卡拉交易流水号 (可选)"` // 原交易拉卡拉交易流水号 (可选)
|
||||
OriginOutOrderSource string `json:"origin_out_order_source,omitempty" dc:"原订单外部订单来源 (可选)"` // 原订单外部订单来源 (可选)
|
||||
OriginOutOrderNo string `json:"origin_out_order_no,omitempty" dc:"原订单外部商户订单号 (可选)"` // 原订单外部商户订单号 (可选)
|
||||
LocationInfo *LocationInfo `json:"location_info" dc:"地址位置信息 (必填)"` // 地址位置信息 (必填)
|
||||
}
|
||||
|
||||
// RelationCloseRequest 聚合扫码关单请求结构体
|
||||
type RelationCloseRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *RelationCloseRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package relationclose
|
||||
|
||||
// RelationCloseResponseData 聚合扫码关单响应数据结构体
|
||||
type RelationCloseResponseData struct {
|
||||
OriginTradeNo string `json:"origin_trade_no"` // 原拉卡拉订单号
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no"` // 原商户请求流水号
|
||||
OriginOutOrderSource string `json:"origin_out_order_source,omitempty"` // 原订单外部订单来源
|
||||
OriginOutOrderNo string `json:"origin_out_order_no,omitempty"` // 原订单外部商户订单号
|
||||
TradeTime string `json:"trade_time"` // 交易时间
|
||||
}
|
||||
|
||||
// RelationCloseResponse 聚合扫码关单响应结构体
|
||||
type RelationCloseResponse struct {
|
||||
RespTime string `json:"resp_time"`
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
RespData *RelationCloseResponseData `json:"resp_data,omitempty"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *RelationCloseResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package relationRefund
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// RelationRefundServer 聚合扫码退款API结构体
|
||||
type RelationRefundServer struct {
|
||||
Client *common.Client[RelationRefundResponse]
|
||||
}
|
||||
|
||||
// NewRelationRefundServer 创建聚合扫码退款API实例
|
||||
func NewRelationRefundServer(client *common.Client[RelationRefundResponse]) *RelationRefundServer {
|
||||
return &RelationRefundServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// RelationRefund 聚合扫码退款方法
|
||||
// - reqData: 退款请求数据
|
||||
func (a *RelationRefundServer) RelationRefund(reqData *RelationRefundRequestData) (*RelationRefundResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &RelationRefundRequest{
|
||||
ReqTime: gtime.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 调用Client发送请求
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_RELATION_REFUND_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package relationRefund
|
||||
|
||||
// LocationInfo 地址位置信息结构体
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址,必填
|
||||
BaseStation string `json:"base_station,omitempty"` // 基站信息,可选
|
||||
Location string `json:"location,omitempty"` // 维度,经度,可选
|
||||
}
|
||||
|
||||
// RelationRefundRequestData 聚合扫码退款请求数据结构体
|
||||
type RelationRefundRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必填
|
||||
TermNo string `json:"term_no"` // 终端号,必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,必填
|
||||
RefundAmount string `json:"refund_amount"` // 退款金额,必填
|
||||
RefundReason string `json:"refund_reason"` // 退款原因,必填
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty"` // 原商户交易流水号,可选(退款时origin_out_trade_no,origin_trade_no,origin_log_no必送其一)
|
||||
OriginTradeNo string `json:"origin_trade_no,omitempty"` // 原拉卡拉交易流水号,可选
|
||||
OriginLogNo string `json:"origin_log_no,omitempty"` // 原对账单流水号,可选
|
||||
TradeReqDate string `json:"trade_req_date,omitempty"` // 交易请求日期,可选(送原商户交易流水号退款时必填)
|
||||
LocationInfo LocationInfo `json:"location_info"` // 地址位置信息,必填
|
||||
}
|
||||
|
||||
// RelationRefundRequest 聚合扫码退款请求结构体
|
||||
type RelationRefundRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *RelationRefundRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package relationRefund
|
||||
|
||||
// RelationRefundResponseData 聚合扫码退款响应数据结构体
|
||||
type RelationRefundResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉退款单号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
AccTradeNo string `json:"acc_trade_no,omitempty"` // 账户端交易订单号
|
||||
AccountType string `json:"account_type,omitempty"` // 钱包类型
|
||||
TotalAmount string `json:"total_amount"` // 交易金额
|
||||
RefundAmount string `json:"refund_amount"` // 申请退款金额
|
||||
PayerAmount string `json:"payer_amount"` // 实际退款金额
|
||||
TradeTime string `json:"trade_time,omitempty"` // 退款时间
|
||||
OriginTradeNo string `json:"origin_trade_no,omitempty"` // 原拉卡拉订单号
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty"` // 原商户请求流水号
|
||||
UpIssAddnData string `json:"up_iss_addn_data,omitempty"` // 单品营销附加数据
|
||||
UpCouponInfo string `json:"up_coupon_info,omitempty"` // 银联优惠信息、出资方信息
|
||||
TradeInfo string `json:"trade_info,omitempty"` // 出资方信息
|
||||
FundBillList string `json:"fund_bill_list,omitempty"` // 交易支付使用的资金渠道
|
||||
}
|
||||
|
||||
// RelationRefundResponse 聚合扫码退款响应结构体
|
||||
type RelationRefundResponse struct {
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
RespTime string `json:"resp_time"`
|
||||
RespData *RelationRefundResponseData `json:"resp_data,omitempty"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *RelationRefundResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package relationRevoked
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// RelationRevokedServer 聚合扫码撤销API结构体
|
||||
type RelationRevokedServer struct {
|
||||
Client *common.Client[RelationRevokedResponse]
|
||||
}
|
||||
|
||||
// NewRelationRevokedServer 创建聚合扫码撤销API实例
|
||||
func NewRelationRevokedServer(client *common.Client[RelationRevokedResponse]) *RelationRevokedServer {
|
||||
return &RelationRevokedServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// RelationRevoked 聚合扫码撤销方法
|
||||
// - reqData: 撤销请求数据
|
||||
func (a *RelationRevokedServer) RelationRevoked(reqData *RelationRevokedRequestData) (*RelationRevokedResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &RelationRevokedRequest{
|
||||
ReqTime: gtime.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 调用Client发送请求
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_RELATION_REVOKED_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package relationRevoked
|
||||
|
||||
// LocationInfo 地址位置信息结构体
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址,必填
|
||||
BaseStation string `json:"base_station,omitempty"` // 基站信息,可选
|
||||
Location string `json:"location,omitempty"` // 维度,经度,可选
|
||||
}
|
||||
|
||||
// RelationRevokedRequestData 聚合扫码撤销请求数据结构体
|
||||
type RelationRevokedRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必填
|
||||
TermNo string `json:"term_no"` // 终端号,必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,必填
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty"` // 原商户交易流水号,可选(撤销时origin_out_trade_no,origin_trade_no必送其一)
|
||||
OriginTradeNo string `json:"origin_trade_no,omitempty"` // 原拉卡拉交易流水号,可选(撤销时origin_out_trade_no,origin_trade_no必送其一)
|
||||
LocationInfo LocationInfo `json:"location_info"` // 地址位置信息,必填
|
||||
}
|
||||
|
||||
// RelationRevokedRequest 聚合扫码关单请求结构体
|
||||
type RelationRevokedRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *RelationRevokedRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package relationRevoked
|
||||
|
||||
// RelationRevokedResponseData 聚合扫码撤销响应数据结构体
|
||||
type RelationRevokedResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号
|
||||
TradeNo string `json:"trade_no,omitempty"` // 拉卡拉商户订单号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
AccTradeNo string `json:"acc_trade_no,omitempty"` // 账户端交易订单号
|
||||
AccountType string `json:"account_type"` // 钱包类型
|
||||
TotalAmount string `json:"total_amount"` // 交易金额
|
||||
TradeTime string `json:"trade_time"` // 交易完成时间
|
||||
OriginOutTradeNo string `json:"origin_out_trade_no,omitempty"` // 原商户请求流水号
|
||||
OriginTradeNo string `json:"origin_trade_no,omitempty"` // 原拉卡拉交易流水号
|
||||
}
|
||||
|
||||
// RelationRevokedResponse 聚合扫码撤销响应结构体
|
||||
type RelationRevokedResponse struct {
|
||||
Code string `json:"code"` // 响应码
|
||||
Msg string `json:"msg"` // 响应信息
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
RespData RelationRevokedResponseData `json:"resp_data,omitempty"` // 响应数据
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *RelationRevokedResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package transmicropay
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// API 聚合被扫API结构体
|
||||
type TransMicropayServer struct {
|
||||
Client *common.Client[TransMicropayResponse]
|
||||
}
|
||||
|
||||
// NewAPI 创建聚合被扫API实例
|
||||
func NewTransMicropayServer(client *common.Client[TransMicropayResponse]) *TransMicropayServer {
|
||||
return &TransMicropayServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransMicropay 执行聚合被扫请求
|
||||
// - merchantNo: 商户号
|
||||
// - termNo: 终端号
|
||||
// - outTradeNo: 商户交易流水号
|
||||
// - authCode: 支付授权码
|
||||
// - totalAmount: 金额
|
||||
// - locationInfo: 地址位置信息
|
||||
// - 其他可选参数通过TransMicropayRequestData的其他字段设置
|
||||
func (a *TransMicropayServer) TransMicropay(reqData *TransMicropayRequestData) (*TransMicropayResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &TransMicropayRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 发送请求 - 使用consts中定义的聚合被扫URL
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_MICROPAY_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package transmicropay
|
||||
|
||||
// LocationInfo 地址位置信息结构体
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址 (必填)
|
||||
BaseStation string `json:"base_station,omitempty"` // 基站信息 (可选)
|
||||
Location string `json:"location,omitempty"` // 纬度,经度 (银联二维码交易必填)
|
||||
}
|
||||
|
||||
// GoodsInfo 商品信息结构体
|
||||
type GoodsInfo struct {
|
||||
GoodsId string `json:"goods_id,omitempty"` // 商品ID (可选)
|
||||
GoodsName string `json:"goods_name,omitempty"` // 商品名称 (可选)
|
||||
Price string `json:"price,omitempty"` // 商品单价 (可选)
|
||||
Quantity string `json:"quantity,omitempty"` // 商品数量 (可选)
|
||||
CategoryId string `json:"category_id,omitempty"` // 商品类目ID (可选)
|
||||
Body string `json:"body,omitempty"` // 商品描述 (可选)
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域结构体
|
||||
type AccBusiFields struct {
|
||||
ExtendParams string `json:"extend_params,omitempty"` // 业务扩展参数 (可选)
|
||||
GoodsDetail string `json:"goods_detail,omitempty"` // 商品详情 (可选)
|
||||
StoreId string `json:"store_id,omitempty"` // 商户门店编号 (可选)
|
||||
AlipayStoreId string `json:"alipay_store_id,omitempty"` // 支付宝店铺编号 (不再使用)
|
||||
TimeoutExpress string `json:"timeout_express,omitempty"` // 交易有效时间 (可选)
|
||||
DisablePayChannels string `json:"disable_pay_channels,omitempty"` // 支付宝禁用支付渠道 (可选)
|
||||
BusinessParams string `json:"business_params,omitempty"` // 商户传入业务信息 (可选)
|
||||
MinAge string `json:"min_age,omitempty"` // 允许的最小买家年龄 (可选)
|
||||
PromoParams string `json:"promo_params,omitempty"` // 优惠明细 (可选)
|
||||
}
|
||||
|
||||
// TransMicropayRequestData 聚合被扫请求数据结构体
|
||||
type TransMicropayRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号 (必填)
|
||||
TermNo string `json:"term_no"` // 终端号 (必填)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号 (必填)
|
||||
AuthCode string `json:"auth_code"` // 支付授权码 (必填)
|
||||
TotalAmount string `json:"total_amount"` // 金额 (必填)
|
||||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息 (必填)
|
||||
BusiMode string `json:"busi_mode,omitempty"` // 业务模式 (可选)
|
||||
Subject string `json:"subject,omitempty"` // 订单标题 (可选,微信支付必送)
|
||||
PayOrderNo string `json:"pay_order_no,omitempty"` // 支付业务订单号 (可选)
|
||||
NotifyURL string `json:"notify_url,omitempty"` // 商户通知地址 (可选)
|
||||
SettleType string `json:"settle_type,omitempty"` // 结算类型 (可选)
|
||||
Remark string `json:"remark,omitempty"` // 备注 (可选)
|
||||
ScanType string `json:"scan_type,omitempty"` // 扫码类型 (可选)
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields,omitempty"` // 账户端业务信息域 (可选)
|
||||
}
|
||||
|
||||
// TransMicropayRequest 聚合被扫请求结构体
|
||||
type TransMicropayRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *TransMicropayRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package transmicropay
|
||||
|
||||
// TransMicropayResponseData 聚合被扫响应数据结构体
|
||||
type TransMicropayResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
TermNo string `json:"term_no"` // 终端号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
TotalAmount string `json:"total_amount"` // 交易总金额
|
||||
TradeTime string `json:"trade_time"` // 交易时间
|
||||
PayStatus string `json:"pay_status"` // 支付状态
|
||||
OrderDesc string `json:"order_desc,omitempty"` // 订单描述
|
||||
PayAmount string `json:"pay_amount,omitempty"` // 实际支付金额
|
||||
PayChannel string `json:"pay_channel,omitempty"` // 支付渠道
|
||||
ChannelTradeNo string `json:"channel_trade_no,omitempty"` // 渠道交易号
|
||||
AuthCode string `json:"auth_code,omitempty"` // 支付授权码
|
||||
}
|
||||
|
||||
// TransMicropayResponse 聚合被扫响应结构体
|
||||
type TransMicropayResponse struct {
|
||||
RespTime string `json:"resp_time"`
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
RespData *TransMicropayResponseData `json:"resp_data,omitempty"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *TransMicropayResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package transMicropayEncry
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// TransMicropayEncryServer 聚合扫码被扫接口(全报文加密)服务结构体
|
||||
type TransMicropayEncryServer struct {
|
||||
Client *common.Client[TransMicropayEncryResponse]
|
||||
}
|
||||
|
||||
// NewTransMicropayEncryServer 创建聚合扫码被扫接口(全报文加密)服务实例
|
||||
func NewTransMicropayEncryServer(client *common.Client[TransMicropayEncryResponse]) *TransMicropayEncryServer {
|
||||
return &TransMicropayEncryServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransMicropayEncry 聚合扫码被扫接口(全报文加密)接口
|
||||
func (a *TransMicropayEncryServer) TransMicropayEncry(reqData *TransMicropayEncryRequestData) (*TransMicropayEncryResponse, error) {
|
||||
// 构建请求体
|
||||
request := &TransMicropayEncryRequest{
|
||||
ReqTime: gtime.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 调用Client发送请求
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_MICROPAY_ENCRY_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package transMicropayEncry
|
||||
|
||||
// LocationInfo 地址位置信息,风控要求必送
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址,必填
|
||||
BaseStation string `json:"base_station"` // 客户端设备的基站信息
|
||||
Location string `json:"location"` // 商户终端的地理位置,整体格式:纬度,经度
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域
|
||||
type AccBusiFields struct {
|
||||
ExtendParams map[string]interface{} `json:"extend_params"` // 支付宝业务扩展参数,主要用于花呗分期
|
||||
BusinessParams string `json:"business_params"` // 商户传入业务信息
|
||||
GoodsDetail string `json:"goods_detail"` // 订单包含的商品列表信息,Json数组
|
||||
StoreID string `json:"store_id"` // 商户门店编号
|
||||
TimeoutExpress string `json:"timeout_express"` // 交易有效时间,以分钟为单位
|
||||
DisablePayChannels string `json:"disable_pay_channels"` // 支付宝禁用支付渠道
|
||||
MinAge string `json:"min_age"` // 允许的最小买家年龄
|
||||
PriorityPayAssets map[string]interface{} `json:"priority_pay_assets"` // 优先使用资产
|
||||
}
|
||||
|
||||
// TransMicropayEncryRequestData 聚合扫码被扫接口(全报文加密)请求数据
|
||||
type TransMicropayEncryRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必填
|
||||
TermNo string `json:"term_no"` // 终端号,必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,必填
|
||||
AuthCode string `json:"auth_code"` // 支付授权码,必填
|
||||
TotalAmount string `json:"total_amount"` // 金额,必填,单位分,整数型字符
|
||||
LocationInfo LocationInfo `json:"location_info"` // 地址位置信息,必填
|
||||
BusiMode string `json:"busi_mode"` // 业务模式,可选:ACQ-收单,不填默认为"ACQ-收单"
|
||||
Subject string `json:"subject"` // 订单标题,可选,微信支付必送
|
||||
PayOrderNo string `json:"pay_order_no"` // 拉卡拉支付业务订单号,可选
|
||||
NotifyURL string `json:"notify_url"` // 商户通知地址,可选
|
||||
SettleType string `json:"settle_type"` // 结算类型,可选:"0"或者空,常规结算方式
|
||||
Remark string `json:"remark"` // 备注,可选
|
||||
ScanType string `json:"scan_type"` // 扫码类型,可选:0或不填:扫码支付,1:支付宝刷脸支付,2: 微信刷脸支付
|
||||
IdentityInfo string `json:"identity_info"` // 实名支付信息,可选,json字符串
|
||||
AccBusiFields AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,可选
|
||||
}
|
||||
|
||||
// TransMicropayEncryRequest 聚合扫码被扫接口(全报文加密)请求结构
|
||||
type TransMicropayEncryRequest struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // 版本号
|
||||
ReqData *TransMicropayEncryRequestData `json:"req_data"` // 请求数据
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package transMicropayEncry
|
||||
|
||||
// TransMicropayEncryResponseData 聚合扫码被扫接口(全报文加密)响应数据
|
||||
type TransMicropayEncryResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
TermNo string `json:"term_no"` // 终端号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分
|
||||
PayOrderNo string `json:"pay_order_no"` // 拉卡拉订单系统订单号
|
||||
TradeType string `json:"trade_type"` // 交易类型
|
||||
Status string `json:"status"` // 交易状态
|
||||
PayTime string `json:"pay_time"` // 支付完成时间
|
||||
}
|
||||
|
||||
// TransMicropayEncryResponse 聚合扫码被扫接口(全报文加密)响应结构
|
||||
type TransMicropayEncryResponse struct {
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
Version string `json:"version"` // 版本号
|
||||
Code string `json:"code"` // 响应码
|
||||
Msg string `json:"msg"` // 响应信息
|
||||
RespData *TransMicropayEncryResponseData `json:"resp_data"` // 响应数据
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *TransMicropayEncryResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package transPreorder
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// TransPreorderServer 聚合主扫API结构体
|
||||
type TransPreorderServer struct {
|
||||
client *common.Client[TransPreorderResponse]
|
||||
}
|
||||
|
||||
// NewTransPreorderServer 创建聚合主扫API实例
|
||||
func NewTransPreorderServer(client *common.Client[TransPreorderResponse]) *TransPreorderServer {
|
||||
return &TransPreorderServer{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransPreorder 执行聚合主扫交易
|
||||
func (a *TransPreorderServer) TransPreorder(req *TransPreorderRequestData) (*TransPreorderResponse, error) {
|
||||
// 构建BaseModel请求
|
||||
baseReq := TransPreorderRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
return a.client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_PREORDER_URL, baseReq)
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package transPreorder
|
||||
|
||||
// LocationInfo 地址位置信息结构体
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址 (必填)
|
||||
BaseStation string `json:"base_station,omitempty"` // 基站信息 (可选)
|
||||
Location string `json:"location,omitempty"` // 纬度,经度 (可选,银联二维码交易必填)
|
||||
}
|
||||
|
||||
// GoodsInfo 商品信息结构体
|
||||
type GoodsInfo struct {
|
||||
GoodsId string `json:"goods_id,omitempty"` // 商品ID (可选)
|
||||
GoodsName string `json:"goods_name,omitempty"` // 商品名称 (可选)
|
||||
Price string `json:"price,omitempty"` // 商品单价 (可选)
|
||||
Quantity string `json:"quantity,omitempty"` // 商品数量 (可选)
|
||||
CategoryId string `json:"category_id,omitempty"` // 商品类目ID (可选)
|
||||
Body string `json:"body,omitempty"` // 商品描述 (可选)
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域结构体
|
||||
type AccBusiFields struct {
|
||||
UserId string `json:"user_id,omitempty"` // 买家在支付宝的用户id (支付宝JSAPI支付必填)
|
||||
TimeoutExpress string `json:"timeout_express,omitempty"` // 预下单有效时间 (可选)
|
||||
ExtendParams string `json:"extend_params,omitempty"` // 业务扩展参数 (可选)
|
||||
GoodsDetail string `json:"goods_detail,omitempty"` // 商品详情 (可选)
|
||||
StoreId string `json:"store_id,omitempty"` // 商户门店编号 (可选)
|
||||
BusinessParams string `json:"business_params,omitempty"` // 商户传入业务信息 (可选)
|
||||
MinAge string `json:"min_age,omitempty"` // 允许的最小买家年龄 (可选)
|
||||
PromoParams string `json:"promo_params,omitempty"` // 优惠明细 (可选)
|
||||
EnablePayChannels string `json:"enable_pay_channels,omitempty"` // 支付通道 (可选)
|
||||
}
|
||||
|
||||
// TransPreorderRequestData 预订单请求数据结构体
|
||||
type TransPreorderRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号 (必填)
|
||||
TermNo string `json:"term_no"` // 终端号 (必填)
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号 (必填)
|
||||
AccountType string `json:"account_type"` // 钱包类型 (必填)
|
||||
TransType string `json:"trans_type"` // 接入方式 (必填)
|
||||
TotalAmount string `json:"total_amount"` // 金额 (必填)
|
||||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息 (必填)
|
||||
BusiMode string `json:"busi_mode,omitempty"` // 业务模式 (可选)
|
||||
Subject string `json:"subject,omitempty"` // 订单标题 (可选,微信支付必送)
|
||||
PayOrderNo string `json:"pay_order_no,omitempty"` // 支付业务订单号 (可选)
|
||||
NotifyURL string `json:"notify_url,omitempty"` // 商户通知地址 (可选)
|
||||
SettleType string `json:"settle_type,omitempty"` // 结算类型 (可选)
|
||||
Remark string `json:"remark,omitempty"` // 备注 (可选)
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields,omitempty"` // 账户端业务信息域 (可选)
|
||||
CompleteNotifyURL string `json:"complete_notify_url,omitempty"` // 发货确认通知地址 (可选)
|
||||
GoodsTag string `json:"goods_tag,omitempty"` // 商品标签 (可选)
|
||||
GoodsInfo []*GoodsInfo `json:"goods_info,omitempty"` // 商品信息 (可选)
|
||||
}
|
||||
|
||||
// TransPreorderRequest 预订单请求结构体
|
||||
type TransPreorderRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *TransPreorderRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package transPreorder
|
||||
|
||||
// ResponseData 聚合主扫响应数据结构体
|
||||
type ResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
TermNo string `json:"term_no"` // 终端号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
TotalAmount string `json:"total_amount"` // 交易总金额
|
||||
TradeTime string `json:"trade_time"` // 交易时间
|
||||
PayStatus string `json:"pay_status"` // 支付状态
|
||||
OrderDesc string `json:"order_desc,omitempty"` // 订单描述
|
||||
PayAmount string `json:"pay_amount,omitempty"` // 实际支付金额
|
||||
PayChannel string `json:"pay_channel,omitempty"` // 支付渠道
|
||||
ChannelTradeNo string `json:"channel_trade_no,omitempty"` // 渠道交易号
|
||||
QrCode string `json:"qr_code,omitempty"` // 支付二维码内容 (NATIVE支付时返回)
|
||||
CodeURL string `json:"code_url,omitempty"` // 二维码链接 (NATIVE支付时返回)
|
||||
PayParams string `json:"pay_params,omitempty"` // 支付参数 (JSAPI/APP支付时返回)
|
||||
AppId string `json:"app_id,omitempty"` // 应用ID
|
||||
MchId string `json:"mch_id,omitempty"` // 商户号
|
||||
PrepayId string `json:"prepay_id,omitempty"` // 预支付交易会话ID
|
||||
}
|
||||
|
||||
// TransPreorderResponse 预订单响应结构体
|
||||
type TransPreorderResponse struct {
|
||||
RespTime string `json:"resp_time"`
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
RespData *ResponseData `json:"resp_data,omitempty"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *TransPreorderResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package transPreorederEncry
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// TransPreorderEncryServer 聚合扫码主扫交易(全报文加密)服务结构体
|
||||
type TransPreorderEncryServer struct {
|
||||
Client *common.Client[TransPreorederEncryResponse]
|
||||
}
|
||||
|
||||
// NewTransPreorderEncryServer 创建聚合扫码主扫交易(全报文加密)服务实例
|
||||
func NewTransPreorderEncryServer(client *common.Client[TransPreorederEncryResponse]) *TransPreorderEncryServer {
|
||||
return &TransPreorderEncryServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransPreorderEncry 聚合扫码主扫交易(全报文加密)接口
|
||||
func (a *TransPreorderEncryServer) TransPreorderEncry(reqData *TransPreorederEncryRequestData) (*TransPreorederEncryResponse, error) {
|
||||
// 构建请求体
|
||||
request := &TransPreorederEncryRequest{
|
||||
ReqTime: gtime.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 调用Client发送请求
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_PREORDER_ENCRY_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package transPreorederEncry
|
||||
|
||||
// LocationInfo 地址位置信息,风控要求必送
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址,必填
|
||||
BaseStation string `json:"base_station"` // 客户端设备的基站信息(主扫时基站信息使用该字段)
|
||||
Location string `json:"location"` // 商户终端的地理位置,整体格式:纬度,经度
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域
|
||||
type AccBusiFields struct {
|
||||
UserID string `json:"user_id"` // 买家在支付宝的用户id
|
||||
TimeoutExpress string `json:"timeout_express"` // 预下单有效时间,以分钟为单位
|
||||
ExtendParams map[string]interface{} `json:"extend_params"` // 支付宝业务扩展参数
|
||||
GoodsDetail string `json:"goods_detail"` // 订单包含的商品列表信息,Json数组
|
||||
StoreID string `json:"store_id"` // 商户门店编号
|
||||
DisablePayChannels string `json:"disable_pay_channels"` // 支付宝禁用支付渠道
|
||||
BusinessParams string `json:"business_params"` // 商户传入业务信息
|
||||
MinAge string `json:"min_age"` // 允许的最小买家年龄
|
||||
}
|
||||
|
||||
// RequestData 聚合扫码主扫交易(全报文加密)请求数据
|
||||
type TransPreorederEncryRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必填
|
||||
TermNo string `json:"term_no"` // 终端号,必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,必填
|
||||
AccountType string `json:"account_type"` // 钱包类型,必填:WECHAT、ALIPAY、UQRCODEPAY等
|
||||
TransType string `json:"trans_type"` // 接入方式,必填:41:NATIVE、51:JSAPI、71:微信小程序支付、61:APP支付
|
||||
TotalAmount string `json:"total_amount"` // 金额,必填,单位分,整数型字符
|
||||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,必填
|
||||
BusiMode string `json:"busi_mode"` // 业务模式,可选:ACQ-收单,不填默认为"ACQ-收单"
|
||||
Subject string `json:"subject"` // 订单标题,可选,微信支付必送
|
||||
PayOrderNo string `json:"pay_order_no"` // 支付业务订单号,可选
|
||||
NotifyURL string `json:"notify_url"` // 商户通知地址,可选
|
||||
SettleType string `json:"settle_type"` // 结算类型,可选:"0"或者空为常规结算,"1"为拉卡拉分账
|
||||
Remark string `json:"remark"` // 备注,可选
|
||||
IdentityInfo string `json:"identity_info"` // 实名支付信息,可选,json字符串
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,可选
|
||||
}
|
||||
|
||||
// Request 聚合扫码主扫交易(全报文加密)请求结构
|
||||
type TransPreorederEncryRequest struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // 版本号
|
||||
ReqData *TransPreorederEncryRequestData `json:"req_data"` // 请求数据
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package transPreorederEncry
|
||||
|
||||
// TransPreorederEncryResponseData 聚合扫码主扫交易(全报文加密)响应数据
|
||||
type TransPreorederEncryResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
TermNo string `json:"term_no"` // 终端号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号
|
||||
TotalAmount string `json:"total_amount"` // 金额,单位分
|
||||
PayOrderNo string `json:"pay_order_no"` // 拉卡拉订单系统订单号
|
||||
CodeUrl string `json:"code_url"` // 二维码内容,用于生成支付二维码
|
||||
TradeType string `json:"trade_type"` // 交易类型
|
||||
}
|
||||
|
||||
// TransPreorederEncryResponse 聚合扫码主扫交易(全报文加密)响应结构
|
||||
type TransPreorederEncryResponse struct {
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
Version string `json:"version"` // 版本号
|
||||
Code string `json:"code"` // 响应码
|
||||
Msg string `json:"msg"` // 响应信息
|
||||
RespData TransPreorederEncryResponseData `json:"resp_data"` // 响应数据
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *TransPreorederEncryResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package transquery
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// API 聚合扫码交易查询API结构体
|
||||
type TransQueryServer struct {
|
||||
Client *common.Client[TransQueryResponse]
|
||||
}
|
||||
|
||||
// NewAPI 创建聚合扫码交易查询API实例
|
||||
func NewTransQueryServer(client *common.Client[TransQueryResponse]) *TransQueryServer {
|
||||
return &TransQueryServer{
|
||||
Client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransQuery 执行聚合扫码交易查询请求
|
||||
// - merchantNo: 商户号
|
||||
// - termNo: 终端号
|
||||
// - outTradeNo: 商户交易流水号(可选,与tradeNo二选一)
|
||||
// - tradeNo: 拉卡拉交易流水号(可选,与outTradeNo二选一)
|
||||
func (a *TransQueryServer) TransQuery(reqData *TransQueryRequestData) (*TransQueryResponse, error) {
|
||||
// 构建请求结构体
|
||||
request := &TransQueryRequest{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
|
||||
// 发送请求 - 使用consts中定义的聚合扫码交易查询URL
|
||||
return a.Client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_QUERY_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package transquery
|
||||
|
||||
// TransQueryRequestData 聚合扫码交易查询请求数据结构体
|
||||
type TransQueryRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号 (必填)
|
||||
TermNo string `json:"term_no"` // 终端号 (必填)
|
||||
OutTradeNo string `json:"out_trade_no,omitempty"` // 商户交易流水号 (可选,与trade_no二选一)
|
||||
TradeNo string `json:"trade_no,omitempty"` // 拉卡拉交易流水号 (可选,与out_trade_no二选一)
|
||||
}
|
||||
|
||||
// TransQueryRequest 聚合扫码交易查询请求结构体
|
||||
type TransQueryRequest struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData *TransQueryRequestData `json:"req_data"`
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package transquery
|
||||
|
||||
// SplitInfo 拆单信息结构体
|
||||
type 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"` // 金额
|
||||
}
|
||||
|
||||
// RefundSplitInfo 合单退款拆单信息结构体
|
||||
type RefundSplitInfo struct {
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子退款交易流水号
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
TermNo string `json:"term_no"` // 终端号
|
||||
RefundAmount string `json:"refund_amount"` // 申请退款金额
|
||||
SubTradeNo string `json:"sub_trade_no,omitempty"` // 拉卡拉子交易流水号
|
||||
SubLogNo string `json:"sub_log_no,omitempty"` // 对账单子流水号
|
||||
TradeState string `json:"trade_state,omitempty"` // 子交易状态
|
||||
ResultCode string `json:"result_code,omitempty"` // 处理结果码
|
||||
ResultMsg string `json:"result_msg,omitempty"` // 处理描述
|
||||
}
|
||||
|
||||
// AccRespFields 账户端返回信息域结构体
|
||||
type AccRespFields struct {
|
||||
UserId string `json:"user_id,omitempty"` // 买家在支付宝的用户id
|
||||
StoreId string `json:"store_id,omitempty"` // 商户门店编号
|
||||
AlipayStoreId string `json:"alipay_store_id,omitempty"` // 支付宝店铺编号(不再使用)
|
||||
FundBillList string `json:"fund_bill_list,omitempty"` // 交易支付使用的资金渠道
|
||||
VoucherDetailList string `json:"voucher_detail_list,omitempty"` // 所有优惠券信息
|
||||
HbFqPayInfo string `json:"hb_fq_pay_info,omitempty"` // 花呗分期支付信息
|
||||
}
|
||||
|
||||
// TransQueryResponseData 聚合扫码交易查询响应数据结构体
|
||||
type TransQueryResponseData 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,omitempty"` // 交易大类
|
||||
SplitAttr string `json:"split_attr,omitempty"` // 拆单属性
|
||||
SplitInfo []*SplitInfo `json:"split_info,omitempty"` // 拆单信息
|
||||
AccTradeNo string `json:"acc_trade_no"` // 账户端交易订单号
|
||||
AccountType string `json:"account_type"` // 钱包类型
|
||||
TradeState string `json:"trade_state"` // 交易状态
|
||||
TradeStateDesc string `json:"trade_state_desc,omitempty"` // 交易状态描述
|
||||
TotalAmount string `json:"total_amount"` // 订单金额
|
||||
PayerAmount string `json:"payer_amount,omitempty"` // 付款人实付金额
|
||||
AccSettleAmount string `json:"acc_settle_amount,omitempty"` // 账户端结算金额
|
||||
AccMDiscountAmount string `json:"acc_mdiscount_amount,omitempty"` // 商户侧优惠金额(账户端)
|
||||
AccDiscountAmount string `json:"acc_discount_amount,omitempty"` // 账户端优惠金额
|
||||
AccOtherDiscountAmount string `json:"acc_other_discount_amount,omitempty"` // 账户端其它优惠金额
|
||||
TradeTime string `json:"trade_time"` // 交易完成时间
|
||||
UserId1 string `json:"user_id1,omitempty"` // 用户标识1
|
||||
UserId2 string `json:"user_id2,omitempty"` // 用户标识2
|
||||
BankType string `json:"bank_type,omitempty"` // 付款银行
|
||||
CardType string `json:"card_type,omitempty"` // 银行卡类型
|
||||
AccActivityId string `json:"acc_activity_id,omitempty"` // 活动ID
|
||||
TradeReqDate string `json:"trade_req_date"` // 交易请求日期
|
||||
AccRespFields *AccRespFields `json:"acc_resp_fields,omitempty"` // 账户端返回信息域
|
||||
RefundSplitInfo []*RefundSplitInfo `json:"refund_split_info,omitempty"` // 合单退款拆单信息
|
||||
}
|
||||
|
||||
// TransQueryResponse 聚合扫码交易查询响应结构体
|
||||
type TransQueryResponse struct {
|
||||
RespTime string `json:"resp_time"`
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
RespData *TransQueryResponseData `json:"resp_data,omitempty"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断响应是否成功
|
||||
func (r *TransQueryResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package transShareCode
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// TransShareCodeServer 聚合扫码申请支付宝吱口令服务
|
||||
type TransShareCodeServer struct {
|
||||
client *common.Client[TransShareCodeResponse]
|
||||
}
|
||||
|
||||
// NewTransShareCodeServer 创建聚合扫码申请支付宝吱口令服务实例
|
||||
func NewTransShareCodeServer(client *common.Client[TransShareCodeResponse]) *TransShareCodeServer {
|
||||
return &TransShareCodeServer{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TransShareCode 聚合扫码申请支付宝吱口令
|
||||
func (s *TransShareCodeServer) TransShareCode(reqData *TransShareCodeRequestData) (*TransShareCodeResponse, error) {
|
||||
// 构建请求
|
||||
request := &TransShareCodeRequest{
|
||||
ReqTime: gtime.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: reqData,
|
||||
}
|
||||
return s.client.DoRequest(consts.BASE_URL+consts.LKL_BASE_URL_TRANS_SHARE_CODE_URL, request)
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package transShareCode
|
||||
|
||||
// LocationInfo 地址位置信息
|
||||
type LocationInfo struct {
|
||||
RequestIP string `json:"request_ip"` // 请求方IP地址,必填
|
||||
BaseStation string `json:"base_station"` // 客户端设备的基站信息
|
||||
Location string `json:"location"` // 商户终端的地理位置,整体格式:纬度,经度
|
||||
}
|
||||
|
||||
// ExtInfo 扩展内容,主要满足花呗分期相关的额鉴权验等功能
|
||||
type ExtInfo struct {
|
||||
FqNumber string `json:"fq_number"` // 花呗分期期数,支付宝花呗分期必送字段: 花呗分期数 3:3期 6:6期 12:12期
|
||||
FqSellerPercent string `json:"fq_seller_percent"` // 卖家承担手续费比例,支付宝花呗分期必送字段: 卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0
|
||||
}
|
||||
|
||||
// AccBusiFields 账户端业务信息域
|
||||
type AccBusiFields struct {
|
||||
Source string `json:"source"` // 业务来源,必填
|
||||
BizLink string `json:"biz_link"` // 跳转业务链接,必填
|
||||
SellerID string `json:"seller_id"` // 卖家支付宝ID,可选
|
||||
ExtInfo *ExtInfo `json:"ext_info"` // 扩展内容,可选
|
||||
}
|
||||
|
||||
// TransShareCodeRequestData 请求数据
|
||||
type TransShareCodeRequestData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必填
|
||||
TermNo string `json:"term_no"` // 终端号,必填
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户交易流水号,必填
|
||||
AccountType string `json:"account_type"` // 钱包类型,必填,支付宝:ALIPAY
|
||||
TotalAmount string `json:"total_amount"` // 金额,必填,单位分,整数型字符
|
||||
LocationInfo LocationInfo `json:"location_info"` // 地址位置信息,必填
|
||||
CodeValidPeriod string `json:"code_valid_period"` // 码有效期,可选,秒为单位,整型
|
||||
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,可选
|
||||
}
|
||||
|
||||
// TransShareCodeRequest 整体请求结构
|
||||
type TransShareCodeRequest struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // 版本号
|
||||
ReqData *TransShareCodeRequestData `json:"req_data"` // 请求数据
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package transShareCode
|
||||
|
||||
// AccRespFields 账户端返回信息域
|
||||
type AccRespFields struct {
|
||||
ShareToken string `json:"share_token"` // 吱口令,必填
|
||||
ExpireDate string `json:"expire_date"` // 吱口令失效时间,可选,若为空则表示永久有效
|
||||
}
|
||||
|
||||
// TransShareCodeResponseData 响应数据
|
||||
type TransShareCodeResponseData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
OutTradeNo string `json:"out_trade_no"` // 商户请求流水号
|
||||
TradeNo string `json:"trade_no"` // 拉卡拉交易流水号
|
||||
AccRespFields *AccRespFields `json:"acc_resp_fields"` // 账户端返回信息域
|
||||
}
|
||||
|
||||
// TransShareCodeResponse 整体响应结构
|
||||
type TransShareCodeResponse struct {
|
||||
Code string `json:"code"` // 响应码
|
||||
Msg string `json:"msg"` // 响应信息
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
RespData *TransShareCodeResponseData `json:"resp_data"` // 响应数据
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断请求是否成功
|
||||
func (r *TransShareCodeResponse) SuccessOrFail() bool {
|
||||
return r.Code == "BBS00000"
|
||||
}
|
||||
@@ -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,118 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// CleanJSON 清理JSON字符串中的空值和0值字段
|
||||
func CleanJSON(jsonStr string) ([]byte, error) {
|
||||
var data interface{}
|
||||
|
||||
// 解析JSON字符串
|
||||
if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 递归清理数据
|
||||
cleaned := cleanData(data)
|
||||
|
||||
// 转换回JSON字符串
|
||||
result, err := json.Marshal(cleaned)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// 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,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,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)
|
||||
}
|
||||
+249
@@ -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)
|
||||
}
|
||||
+37
-26
@@ -2,33 +2,44 @@ package consts
|
||||
|
||||
const (
|
||||
BASE_URL = "https://s2.lakala.com/api"
|
||||
BASE_TEST_URL = "https://test.wsmsd.cn/sit/api"
|
||||
)
|
||||
|
||||
// basePay/labs 基础支付聚合扫码API地址
|
||||
const (
|
||||
// LKL_UPLOAD_FILE_URL 拉卡拉附件上传地址
|
||||
LKL_UPLOAD_FILE_URL = "/v2/mms/openApi/uploadFile"
|
||||
// LKL_SPLIT_LEDGER_URL 拉卡拉商户分账业务开通申请
|
||||
LKL_SPLIT_LEDGER_URL = "/v2/mms/openApi/ledger/applyLedgerMer"
|
||||
// LKL_SPLIT_LEDGER_QUERY_URL 拉卡拉商户分账信息查询
|
||||
LKL_SPLIT_LEDGER_QUERY_URL = "/v2/mms/openApi/ledger/queryLedgerMer"
|
||||
// LKL_SPLIT_LEDGER_RECEIVE_URL 拉卡拉分账接收方创建申请
|
||||
LKL_SPLIT_LEDGER_RECEIVE_URL = "/v2/mms/openApi/ledger/applyLedgerReceiver"
|
||||
// LKL_SPLIT_LEDGER_RECEIVE_BIND_URL 拉卡拉分账关系绑定申请
|
||||
LKL_SPLIT_LEDGER_RECEIVE_BIND_URL = "/v2/mms/openApi/ledger/applyBind"
|
||||
// LKL_SPLIT_LEDGER_BALANCE_URL 拉卡拉可分账金额查询
|
||||
LKL_SPLIT_LEDGER_BALANCE_URL = "/v3/sacs/queryAmt"
|
||||
// LKL_ORDER_SPLIT_LEDGER_URL 拉卡拉订单分账
|
||||
LKL_ORDER_SPLIT_LEDGER_URL = "/v3/sacs/separate"
|
||||
// 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_TRADE_QUERY_URL 拉卡拉交易查询
|
||||
LKL_TRADE_QUERY_URL = "/v3/labs/query/tradequery"
|
||||
// LKL_PRE_ORDER_URL 拉卡拉聚合预下单
|
||||
LKL_PRE_ORDER_URL = "/v3/labs/trans/preorder"
|
||||
// LKL_MERGE_ORDER_URL 拉卡拉主扫合单交易
|
||||
LKL_MERGE_ORDER_URL = "/v3/labs/trans/merge/preorder"
|
||||
// LKL_REFOUND_URL 拉卡拉退款
|
||||
LKL_REFOUND_URL = "/v3/rfd/refund_front/refund"
|
||||
// LKL_BASE_URL_TRANS_PREORDER_URL 拉卡拉聚合主扫
|
||||
LKL_BASE_URL_TRANS_PREORDER_URL = "/v3/labs/trans/preorder"
|
||||
// LKL_DCP_TRANS_PREORDER_URL 拉卡拉直连主扫
|
||||
LKL_DCP_TRANS_PREORDER_URL = "/v3/dcp/trans/preorder"
|
||||
// LKL_BASE_URL_TRANS_PREORDER_ENCRY_URL 拉卡拉聚合主扫交易(全报文加密)
|
||||
LKL_BASE_URL_TRANS_PREORDER_ENCRY_URL = "/v3/labs/trans/preorder_encry"
|
||||
// LKL_BASE_URL_TRANS_MICROPAY_URL 拉卡拉聚合被扫
|
||||
LKL_BASE_URL_TRANS_MICROPAY_URL = "/v3/labs/trans/micropay"
|
||||
// LKL_BASE_URL_TRANS_MICROPAY_ENCRY_URL 拉卡拉聚合被扫接口(全报文加密)
|
||||
LKL_BASE_URL_TRANS_MICROPAY_ENCRY_URL = "/v3/labs/trans/micropay_encry"
|
||||
// LKL_BASE_URL_TRANS_SHARE_CODE_URL 拉卡拉聚合扫码申请支付宝吱口令
|
||||
LKL_BASE_URL_TRANS_SHARE_CODE_URL = "/v3/labs/trans/share_code"
|
||||
// LKL_BASE_URL_TRANS_QUERY_URL 拉卡拉聚合扫码交易查询
|
||||
LKL_BASE_URL_TRANS_QUERY_URL = "/v3/labs/query/tradequery"
|
||||
// LKL_BASE_URL_RELATION_CLOSE_URL 拉卡拉聚合扫码关单
|
||||
LKL_BASE_URL_RELATION_CLOSE_URL = "/v3/labs/relation/close"
|
||||
// LKL_BASE_URL_RELATION_REVOKED_URL 拉卡拉聚合扫码撤销
|
||||
LKL_BASE_URL_RELATION_REVOKED_URL = "/v3/labs/relation/revoked"
|
||||
// LKL_BASE_URL_RELATION_REFUND_URL 拉卡拉聚合扫码退款
|
||||
LKL_BASE_URL_RELATION_REFUND_URL = "/v3/labs/relation/refund"
|
||||
)
|
||||
|
||||
// basePay/dcp 基础支付直接扫码API地址
|
||||
const ()
|
||||
|
||||
// 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"
|
||||
)
|
||||
|
||||
@@ -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,60 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
)
|
||||
|
||||
// AccountService 账户服务
|
||||
type AccountService[T any] struct {
|
||||
client *Client[T]
|
||||
}
|
||||
|
||||
// NewAccountService 创建账户服务实例
|
||||
func NewAccountService[T any](client *Client[T]) *AccountService[T] {
|
||||
return &AccountService[T]{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// BalanceQuery 账户余额查询
|
||||
func (a *AccountService[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_ACCOUNT_BALANCE_QUERY_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.BalanceQueryRequest{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
// 发送请求
|
||||
respBody, err := a.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// Withdraw 账户提现
|
||||
func (a *AccountService[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_ACCOUNT_WITHDRAW_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.WithdrawRequest{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
respBody, err := a.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return respBody, nil
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package transmicropay
|
||||
@@ -0,0 +1 @@
|
||||
package transmicropay
|
||||
@@ -0,0 +1 @@
|
||||
package transmicropay
|
||||
@@ -1,38 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type MergePreService[T any] struct {
|
||||
client *Client[T]
|
||||
}
|
||||
|
||||
// NewMergePreService 创建拉卡拉主扫合单交易
|
||||
func NewMergePreService[T any](client *Client[T]) *MergePreService[T] {
|
||||
return &MergePreService[T]{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MergePreService[T]) PreOrder(req *model.MergePreorderReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_MERGE_ORDER_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.MergePreorder{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "2.0",
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
respBody, err := s.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"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]
|
||||
}
|
||||
|
||||
// NewSDK 创建拉卡拉SDK实例
|
||||
func NewSDK[T any](ctx context.Context, cfgJson string) *SDK[T] {
|
||||
client := NewClient[T](ctx, cfgJson)
|
||||
return &SDK[T]{
|
||||
Client: client,
|
||||
SplitLedger: NewSplitLedgerService(client),
|
||||
Trade: NewTradeService(client),
|
||||
Account: NewAccountService(client),
|
||||
UploadFile: NewUploadFileService(client),
|
||||
MergePre: NewMergePreService(client),
|
||||
}
|
||||
}
|
||||
|
||||
// 以下为便捷方法,直接通过SDK调用各服务的主要功能
|
||||
|
||||
// MergePreOrder 主扫合单交易
|
||||
func (s *SDK[T]) MergePreOrder(req *model.MergePreorderReqData) (*T, error) {
|
||||
return s.MergePre.PreOrder(req)
|
||||
}
|
||||
|
||||
// Refound 退款
|
||||
func (s *SDK[T]) Refound(req *model.RefundReqData) (*T, error) {
|
||||
return s.Trade.Refound(req)
|
||||
}
|
||||
|
||||
// ApplyLedgerMer 商户分账业务开通申请
|
||||
func (s *SDK[T]) ApplyLedgerMer(req *model.ApplyLedgerMerReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyLedgerMer(req)
|
||||
}
|
||||
|
||||
// QueryLedgerMer 商户分账信息查询
|
||||
func (s *SDK[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData) (*T, error) {
|
||||
return s.SplitLedger.QueryLedgerMer(req)
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiver 分账接收方创建申请
|
||||
func (s *SDK[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiverReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyLedgerReceiver(req)
|
||||
}
|
||||
|
||||
// ApplyBind 分账关系绑定申请
|
||||
func (s *SDK[T]) ApplyBind(req *model.ApplyBindReqData) (*T, error) {
|
||||
return s.SplitLedger.ApplyBind(req)
|
||||
}
|
||||
|
||||
// QuerySplitBalance 可分账金额查询
|
||||
func (s *SDK[T]) QuerySplitBalance(req *model.SplitBalanceReqData) (*T, error) {
|
||||
return s.SplitLedger.QuerySplitBalance(req)
|
||||
}
|
||||
|
||||
// OrderSplitLedger 订单分账
|
||||
func (s *SDK[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqData) (*T, error) {
|
||||
return s.SplitLedger.OrderSplitLedger(req)
|
||||
}
|
||||
|
||||
// TradeQuery 交易查询
|
||||
func (s *SDK[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
|
||||
return s.Trade.TradeQuery(req)
|
||||
}
|
||||
|
||||
// PreOrder 聚合预下单
|
||||
func (s *SDK[T]) PreOrder(req *model.PreorderReqData) (*T, error) {
|
||||
return s.Trade.PreOrder(req)
|
||||
}
|
||||
|
||||
// BalanceQuery 账户余额查询
|
||||
func (s *SDK[T]) BalanceQuery(req *model.BalanceQueryReqData) (*T, error) {
|
||||
return s.Account.BalanceQuery(req)
|
||||
}
|
||||
|
||||
func (s *SDK[T]) UploadFileQuery(req *model.UploadFileReqData) (*T, error) {
|
||||
return s.UploadFile.UploadFileQuery(req)
|
||||
}
|
||||
|
||||
// Withdraw 账户提现
|
||||
func (s *SDK[T]) Withdraw(req *model.WithdrawReqData) (*T, error) {
|
||||
return s.Account.Withdraw(req)
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/gogf/gf/v2/crypto/gmd5"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// SplitLedgerService 分账服务
|
||||
type SplitLedgerService[T any] struct {
|
||||
client *Client[T]
|
||||
}
|
||||
|
||||
// NewSplitLedgerService 创建分账服务实例
|
||||
func NewSplitLedgerService[T any](client *Client[T]) *SplitLedgerService[T] {
|
||||
return &SplitLedgerService[T]{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// ApplyLedgerMer 商户分账业务开通申请
|
||||
func (s *SplitLedgerService[T]) ApplyLedgerMer(req *model.ApplyLedgerMerReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiver 分账接收方创建申请
|
||||
func (s *SplitLedgerService[T]) ApplyLedgerReceiver(req *model.ApplyLedgerReceiverReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// QueryLedgerMer 商户分账信息查询
|
||||
func (s *SplitLedgerService[T]) QueryLedgerMer(req *model.QueryLedgerMerReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/gogf/gf/v2/crypto/gmd5"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// ApplyBind 分账关系绑定申请
|
||||
func (s *SplitLedgerService[T]) ApplyBind(req *model.ApplyBindReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// QuerySplitBalance 可分账金额查询
|
||||
func (s *SplitLedgerService[T]) QuerySplitBalance(req *model.SplitBalanceReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// OrderSplitLedger 订单分账
|
||||
func (s *SplitLedgerService[T]) OrderSplitLedger(req *model.OrderSplitLedgerReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
)
|
||||
|
||||
// TradeService 交易服务
|
||||
type TradeService[T any] struct {
|
||||
client *Client[T]
|
||||
}
|
||||
|
||||
// NewTradeService 创建交易服务实例
|
||||
func NewTradeService[T any](client *Client[T]) *TradeService[T] {
|
||||
return &TradeService[T]{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// TradeQuery 交易查询
|
||||
func (t *TradeService[T]) TradeQuery(req *model.TradeQueryReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_TRADE_QUERY_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.TradeQuery{
|
||||
ReqTime: time.Now().Format("20060102150405"),
|
||||
Version: "3.0",
|
||||
OutOrgCode: t.client.config.AppId,
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// PreOrder 聚合预下单
|
||||
func (t *TradeService[T]) PreOrder(req *model.PreorderReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_PRE_ORDER_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.NewPreorder(req)
|
||||
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
// Refound 退款
|
||||
func (t *TradeService[T]) Refound(req *model.RefundReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_URL + consts.LKL_REFOUND_URL
|
||||
|
||||
// 构建BaseModel请求
|
||||
baseReq := model.NewRefund(req)
|
||||
// 发送请求
|
||||
respBody, err := t.client.doRequest(url, baseReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package lklsdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/black1552/lkl_sdk/model"
|
||||
"github.com/gogf/gf/v2/crypto/gmd5"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// UploadFileService 交易服务
|
||||
type UploadFileService[T any] struct {
|
||||
client *Client[T]
|
||||
}
|
||||
|
||||
// NewUploadFileService 创建交易服务实例
|
||||
func NewUploadFileService[T any](client *Client[T]) *UploadFileService[T] {
|
||||
return &UploadFileService[T]{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// UploadFileQuery 交易查询
|
||||
func (t *UploadFileService[T]) UploadFileQuery(req *model.UploadFileReqData) (*T, error) {
|
||||
// 构建请求参数
|
||||
url := consts.BASE_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
|
||||
}
|
||||
return respBody, nil
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package model
|
||||
|
||||
// ApplyBindRequest 分账关系绑定请求结构体
|
||||
// 用于发起分账接收方与商户的关系绑定申请
|
||||
// 拉卡拉SDK接口文档:分账关系绑定接口
|
||||
|
||||
type ApplyBindRequest struct {
|
||||
ReqData *ApplyBindReqData `json:"reqData"` // 请求业务数据
|
||||
ReqId string `json:"reqId"` // 请求ID,唯一标识一笔请求
|
||||
Version string `json:"version"` // 接口版本号
|
||||
ReqTime string `json:"reqTime"` // 请求时间,格式为yyyyMMddHHmmss
|
||||
}
|
||||
|
||||
// ApplyBindReqData 分账关系绑定请求业务数据结构体
|
||||
// 包含分账关系绑定所需的详细业务参数
|
||||
|
||||
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"` // 附加资料,可选,集合类型,其他附加资料文件信息
|
||||
}
|
||||
|
||||
// ApplyBindResponse 分账关系绑定响应结构体
|
||||
// 包含分账关系绑定申请的处理结果信息
|
||||
|
||||
type ApplyBindResponse struct {
|
||||
RetCode string `json:"retCode"` // 响应码,000000表示成功
|
||||
RetMsg string `json:"retMsg"` // 响应消息,描述响应结果
|
||||
RespData struct {
|
||||
Version string `json:"version"` // 接口版本号,例如:547110502170558464
|
||||
OrderNo string `json:"orderNo"` // 订单编号,例如:2021020112000012345678
|
||||
OrgCode string `json:"orgCode"` // 机构代码,例如:200669
|
||||
ApplyId int64 `json:"applyId"` // 受理编号,例如:548099616395186176
|
||||
} `json:"respData"` // 响应业务数据,当retCode为000000时返回
|
||||
}
|
||||
|
||||
func (a *ApplyBindResponse) SuccessOrFail() bool {
|
||||
return a.RetCode == "000000"
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package model
|
||||
|
||||
// ApplyLedgerMerRequest 商户分账业务开通申请请求结构体
|
||||
type ApplyLedgerMerRequest struct {
|
||||
ReqData *ApplyLedgerMerReqData `json:"reqData"` // 请求业务数据
|
||||
ReqId string `json:"reqId"` // 请求ID
|
||||
Version string `json:"version"` // 接口版本号
|
||||
ReqTime string `json:"reqTime"` // 请求时间
|
||||
}
|
||||
|
||||
// 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"` // 附加资料,可选,集合,其他需附加的文件信息
|
||||
}
|
||||
|
||||
// ApplyLedgerMerResponse 商户分账业务开通申请响应结构体
|
||||
type ApplyLedgerMerResponse struct {
|
||||
RetCode string `json:"retCode"` // 返回码,000000表示成功
|
||||
RetMsg string `json:"retMsg"` // 返回消息
|
||||
RespData struct {
|
||||
Version string `json:"version"` // 接口版本号,例如:547110502170558464
|
||||
OrderNo string `json:"orderNo"` // 订单编号,例如:2021020112000012345678
|
||||
OrgCode string `json:"orgCode"` // 机构代码,例如:200669
|
||||
ApplyId int64 `json:"applyId"` // 受理编号,例如:548099616395186176
|
||||
} `json:"respData"` // 响应数据
|
||||
}
|
||||
|
||||
func (a *ApplyLedgerMerResponse) SuccessOrFail() bool {
|
||||
return a.RetCode == "000000"
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
package model
|
||||
|
||||
// ApplyLedgerReceiverRequest 分账接收方创建请求结构体
|
||||
// 用于向拉卡拉接口发送分账接收方创建请求
|
||||
// 包含请求头信息和业务数据
|
||||
type ApplyLedgerReceiverRequest struct {
|
||||
// 请求业务数据
|
||||
ReqData *ApplyLedgerReceiverReqData `json:"reqData"`
|
||||
// 请求ID,用于幂等性校验
|
||||
ReqId string `json:"reqId"`
|
||||
// 接口版本号
|
||||
Version string `json:"version"`
|
||||
// 请求时间,格式为yyyyMMddHHmmss
|
||||
ReqTime string `json:"reqTime"`
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiverReqData 分账接收方创建请求业务数据结构体
|
||||
// 包含分账接收方创建所需的具体业务参数
|
||||
// 用于创建分账接收方信息
|
||||
type ApplyLedgerReceiverReqData struct {
|
||||
// 接口版本号,必传,长度8,取值说明:1.0
|
||||
Version string `json:"version"`
|
||||
// 订单编号(便于后续跟踪排查问题及核对报文),必传,长度32,取值说明:14位年月日(24小时制)分秒+8位的随机数(不重复)
|
||||
OrderNo string `json:"orderNo"`
|
||||
// 机构代码,必传,长度32
|
||||
OrgCode string `json:"orgCode"`
|
||||
// 分账接收方名称,必传,长度64
|
||||
ReceiverName string `json:"receiverName"`
|
||||
// 联系手机号,必传,长度16
|
||||
ContactMobile string `json:"contactMobile"`
|
||||
// 营业执照号码,可选,长度32,取值说明:收款账户类型为对公,必须上送
|
||||
LicenseNo string `json:"licenseNo"`
|
||||
// 营业执照名称,可选,长度128,取值说明:收款账户类型为对公,必须上送
|
||||
LicenseName string `json:"licenseName"`
|
||||
// 法人姓名,可选,长度32,取值说明:收款账户类型为对公,必须上送
|
||||
LegalPersonName string `json:"legalPersonName"`
|
||||
// 法人证件类型,可选,长度32,取值说明:17身份证,18护照,19港澳居民来往内地通行证,20台湾居民来往内地通行证,收款账户类型为对公,必须上送,身份证外类型先咨询后再使用
|
||||
LegalPersonCertificateType string `json:"legalPersonCertificateType"`
|
||||
// 法人证件号,可选,长度32,取值说明:收款账户类型为对公,必须上送
|
||||
LegalPersonCertificateNo string `json:"legalPersonCertificateNo"`
|
||||
// 收款账户卡号,必传,长度32
|
||||
AcctNo string `json:"acctNo"`
|
||||
// 收款账户名称,必传,长度32
|
||||
AcctName string `json:"acctName"`
|
||||
// 收款账户类型代码,必传,长度32,取值说明:57:对公,58:对私
|
||||
AcctTypeCode string `json:"acctTypeCode"`
|
||||
// 收款账户证件类型,必传,长度32,取值说明:17身份证,18护照,19港澳居民来往内地通行证,20台湾居民来往内地通行证,身份证外类型先咨询后再使用
|
||||
AcctCertificateType string `json:"acctCertificateType"`
|
||||
// 收款账户证件号,必传,长度32
|
||||
AcctCertificateNo string `json:"acctCertificateNo"`
|
||||
// 收款账户开户行号,必传,长度32,取值说明:参照FBI.N信息查询,仅支持对私结算账户
|
||||
AcctOpenBankCode string `json:"acctOpenBankCode"`
|
||||
// 收款账户开户行名称,必传,长度64,取值说明:参照FBI.N信息查询,仅支持对私结算账户
|
||||
AcctOpenBankName string `json:"acctOpenBankName"`
|
||||
// 收款账户清算行行号,必传,长度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"`
|
||||
// 提款类型,可选,长度32,取值说明:01:主动提款,03:交易自动结算,不填默认01
|
||||
SettleType string `json:"settleType"`
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiverResponse 分账接收方创建响应结构体
|
||||
// 拉卡拉接口返回的分账接收方创建响应数据
|
||||
// 包含响应状态码、消息和业务数据
|
||||
type ApplyLedgerReceiverResponse struct {
|
||||
// 响应状态码,000000表示成功
|
||||
RetCode string `json:"retCode"`
|
||||
// 响应消息
|
||||
RetMsg string `json:"retMsg"`
|
||||
// 响应业务数据,当retCode为000000时返回
|
||||
RespData *ApplyLedgerReceiverRespData `json:"respData"`
|
||||
}
|
||||
|
||||
// ApplyLedgerReceiverRespData 分账接收方创建响应业务数据结构体
|
||||
// 包含分账接收方创建返回的具体业务信息
|
||||
type ApplyLedgerReceiverRespData struct {
|
||||
// 接口版本号(回传)
|
||||
Version string `json:"version"`
|
||||
// 订单编号(回传)
|
||||
OrderNo string `json:"orderNo"`
|
||||
// 申请机构代码(回传)
|
||||
OrgCode string `json:"orgCode"`
|
||||
// 接收方所属机构
|
||||
OrgId string `json:"orgId"`
|
||||
// 接收方所属机构名称
|
||||
OrgName string `json:"orgName"`
|
||||
// 接收方编号
|
||||
ReceiverNo string `json:"receiverNo"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断分账接收方创建请求是否成功
|
||||
// 成功条件:响应码为000000
|
||||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *ApplyLedgerReceiverResponse) SuccessOrFail() bool {
|
||||
return resp.RetCode == "000000"
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package model
|
||||
|
||||
// BalanceQueryRequest 余额查询请求结构体
|
||||
// 用于向拉卡拉接口发送余额查询请求
|
||||
// 包含请求头信息和业务数据
|
||||
type BalanceQueryRequest struct {
|
||||
// 请求业务数据
|
||||
ReqData *BalanceQueryReqData `json:"req_data"`
|
||||
// 接口版本号
|
||||
Version string `json:"version"`
|
||||
// 请求时间,格式为yyyyMMddHHmmss
|
||||
ReqTime string `json:"req_time"`
|
||||
}
|
||||
|
||||
// BalanceQueryReqData 余额查询请求业务数据结构体
|
||||
// 包含余额查询所需的具体业务参数
|
||||
// 用于查询账户的实时余额信息
|
||||
type BalanceQueryReqData struct {
|
||||
// 机构号,必传,最大长度32
|
||||
OrgNo string `json:"org_no"`
|
||||
// 商户号或receiveNo或商户用户编号,必传,最大长度32
|
||||
MerchantNo string `json:"merchant_no"`
|
||||
// 账号,若该参数上送,则payType将无效,非必传,最大长度32
|
||||
PayNo string `json:"pay_no"`
|
||||
// 账号类型(01:收款账户,02:付款账户,03:分账商户账户,04:分账接收方账户,05:充值代付账户,06:结算代付账户)-未上送则默认01,非必传,最大长度32
|
||||
PayType string `json:"pay_type"`
|
||||
// 账户标志(01:一般账户;03:虚户)-未上送则默认01,非必传,最大长度32
|
||||
MgtFlag string `json:"mgt_flag"`
|
||||
}
|
||||
|
||||
// BalanceQueryResponse 余额查询响应结构体
|
||||
// 拉卡拉接口返回的余额查询响应数据
|
||||
// 包含响应状态码、消息和业务数据
|
||||
type BalanceQueryResponse struct {
|
||||
// 响应状态码,000000
|
||||
Code string `json:"code"`
|
||||
// 响应消息
|
||||
Msg string `json:"msg"`
|
||||
// 响应业务数据,当code为SACS0000时返回
|
||||
RespData *BalanceQueryRespData `json:"resp_data"`
|
||||
}
|
||||
|
||||
// BalanceQueryRespData 余额查询响应业务数据结构体
|
||||
// 包含余额查询返回的具体账户信息
|
||||
type BalanceQueryRespData struct {
|
||||
// 账号,必传
|
||||
PayNo string `json:"pay_no"`
|
||||
// 账户类型,必传
|
||||
PayType string `json:"pay_type"`
|
||||
// 账户状态,必传,取值说明:CLOSE销户,NORMAL正常,FREEZE冻结,STOPAY止付
|
||||
AcctSt string `json:"acct_st"`
|
||||
// 预付余额(单位元),必传
|
||||
ForceBalance string `json:"force_balance"`
|
||||
// 上日余额(单位元)-该字段已废弃使用,必传
|
||||
HisBalance string `json:"his_balance"`
|
||||
// 实时余额(单位元),必传
|
||||
ReBalance string `json:"re_balance"`
|
||||
// 当前可用余额(单位元),必传
|
||||
CuBalance string `json:"cu_balance"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断余额查询请求是否成功
|
||||
// 成功条件:响应码为SACS0000
|
||||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *BalanceQueryResponse) SuccessOrFail() bool {
|
||||
return resp.Code == "000000"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package model
|
||||
|
||||
type BaseModel[T any] struct {
|
||||
ReqTime string `json:"req_time"`
|
||||
Version string `json:"version"`
|
||||
ReqData T `json:"req_data"`
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
// MergePreorder 主扫合单交易请求结构体
|
||||
type MergePreorder struct {
|
||||
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),选填
|
||||
}
|
||||
|
||||
// OutSplitInfo 拆单信息
|
||||
type OutSplitInfo struct {
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子交易流水号,商户子交易流水号,商户号下唯一,String(32),必填
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,拉卡拉分配的商户号,String(32),必填
|
||||
TermNo string `json:"term_no"` // 终端号,拉卡拉分配的业务终端号,String(32),必填
|
||||
Amount string `json:"amount"` // 金额,单位分,整数型字符,String(12),必填
|
||||
SettleType string `json:"settle_type"` // 结算类型(单台),"0"或者空,常规结算方式,String(4),选填
|
||||
SubRemark string `json:"sub_remark"` // 子备注,子单备注信息,String(64),选填
|
||||
}
|
||||
|
||||
// LocationInfo 地址位置信息
|
||||
type LocationInfo struct {
|
||||
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),选填
|
||||
}
|
||||
|
||||
// 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),选填
|
||||
GoodsDetail []*GoodsDetail `json:"goods_detail"` // 商品详情列表,微信商品详情字段说明
|
||||
}
|
||||
|
||||
// GoodsDetail 微信商品详情字段说明
|
||||
type GoodsDetail struct {
|
||||
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),必填
|
||||
}
|
||||
|
||||
// NewMergePreorder 创建主扫合单交易请求
|
||||
func NewMergePreorder(param *MergePreorderReqData) *MergePreorder {
|
||||
return &MergePreorder{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: param,
|
||||
}
|
||||
}
|
||||
|
||||
// MergePreorderResponse 主扫合单交易响应结构体
|
||||
type MergePreorderResponse struct {
|
||||
Code string `json:"code"` // 响应码,BBS00000表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
ReqData MergePreorderRespData `json:"resp_data"` // 响应业务数据
|
||||
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"` // 账户端返回信息域
|
||||
}
|
||||
|
||||
// SplitInfo 拆单信息
|
||||
type 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"` // 金额,单位为:分。整数型字符
|
||||
}
|
||||
|
||||
// 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"` // 子商户号,账户端子商户号
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断主扫合单交易是否成功
|
||||
func (m *MergePreorderResponse) SuccessOrFail() bool {
|
||||
return m.Code == "BBS00000"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
package model
|
||||
|
||||
// OrderSplitLedgerRequest 订单分账请求结构体
|
||||
// 用于发起订单分账操作,支持向多个接收方进行分账
|
||||
// 拉卡拉SDK接口文档:订单分账接口
|
||||
|
||||
type OrderSplitLedgerRequest struct {
|
||||
ReqData *OrderSplitLedgerReqData `json:"req_data"` // 请求业务数据
|
||||
Version string `json:"version"` // 接口版本号
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式为yyyyMMddHHmmss
|
||||
}
|
||||
|
||||
// OrderSplitLedgerReqData 订单分账请求业务数据结构体
|
||||
// 包含订单分账所需的详细业务参数
|
||||
|
||||
type OrderSplitLedgerReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传,长度32
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,必传,长度14,posp流水号,用于查询结算
|
||||
LogDate string `json:"log_date"` // 交易日期,必传,长度8,posp日期,格式为yyyyMMdd,用于查询结算
|
||||
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
|
||||
NotifyUrl string `json:"notify_url"` // 回调地址,条件必传,长度128,分账、分账撤销或分账回退时,通过该地址通知商户最终处理结果,不传时不回调
|
||||
RecvDatas []*OrderSplitLedgerRecvDatas `json:"recv_datas,omitempty"` // 分账接收数据对象,条件必传,列表类型,分账接收方编号必须已创建
|
||||
}
|
||||
|
||||
type OrderSplitLedgerRecvDatas struct {
|
||||
RecvMerchantNo string `json:"recv_merchant_no"` // 接收方商户号,条件必传,长度32,分账接收方商户号,分给自己时使用,需和merchantNo一样,否则检查报错;分账接收方商户号和分账接收方只能填写一个
|
||||
RecvNo string `json:"recv_no"` // 分账接收方编号,条件必传,长度32,分账接收方编号,分给他人时使用;分账接收方商户号和分账接收方只能填写一个
|
||||
SeparateValue string `json:"separate_value"` // 分账数值,必传,长度32,calType为0时按照固定金额分账(单位:分),calType为1时按照比例分账(单位:百分比的小数值,如0.55表示55%)
|
||||
}
|
||||
|
||||
// OrderSplitLedgerResponse 订单分账响应结构体
|
||||
// 包含订单分账操作的处理结果信息
|
||||
|
||||
type OrderSplitLedgerResponse struct {
|
||||
Msg string `json:"msg"` // 响应消息,描述响应结果
|
||||
RespTime string `json:"resp_time"` // 响应时间,格式为yyyyMMddHHmmss
|
||||
Code string `json:"code"` // 响应码,SACS0000表示成功
|
||||
RespData struct {
|
||||
SeparateNo string `json:"separate_no"` // 分账指令流水号,必传,长度32,分账系统生成唯一流水
|
||||
OutSeparateNo string `json:"out_separate_no"` // 商户订单号,必传,长度32,请求报文中的商户外部订单号
|
||||
Status string `json:"status"` // 分账状态,条件必传,长度16,取值说明:处理中-PROCESSING,已受理-ACCEPTED,成功-SUCCESS,失败-FAIL
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,条件必传,长度14,请求透返
|
||||
LogDate string `json:"log_date"` // 拉卡拉订单日期,条件必传,长度8,posp日期,格式为yyyyMMdd,用于查询结算
|
||||
TotalAmt string `json:"total_amt"` // 分账总金额,条件必传,长度15,单位为分
|
||||
} `json:"resp_data"` // 响应业务数据,当code为SACS0000时返回
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断分账请求是否成功
|
||||
// 返回true表示成功,false表示失败
|
||||
func (s *OrderSplitLedgerResponse) SuccessOrFail() bool {
|
||||
return s.Code == "SACS0000"
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
// Preorder 预下单请求结构体
|
||||
type Preorder struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||||
ReqData *PreorderReqData `json:"req_data"` // 请求业务数据
|
||||
}
|
||||
|
||||
// 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)
|
||||
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)
|
||||
}
|
||||
|
||||
func NewPreorder(param *PreorderReqData) *Preorder {
|
||||
return &Preorder{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: param,
|
||||
}
|
||||
}
|
||||
|
||||
// PreorderResponse 预下单响应结构体
|
||||
type PreorderResponse struct {
|
||||
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"` // 支付通道返回的具体信息
|
||||
|
||||
}
|
||||
|
||||
// WxPreorderResponse 支付通道返回的具体信息
|
||||
type WxPreorderResponse struct {
|
||||
Code string `json:"code"` // 返回码
|
||||
CodeImage string `json:"code_image"` // 二维码图片Base64编码
|
||||
PrepayId string `json:"prepay_id"` // 预支付ID
|
||||
AppId string `json:"app_id"` // 应用ID
|
||||
PaySign string `json:"pay_sign"` // 签名
|
||||
TimeStamp string `json:"time_stamp"` // 时间戳
|
||||
NonceStr string `json:"nonce_str"` // 随机字符串
|
||||
Package string `json:"package"` // 订单详情扩展字符串
|
||||
SignType string `json:"sign_type"` // 签名方式
|
||||
FormData string `json:"form_data"` // 表单数据
|
||||
RedirectUrl string `json:"redirect_url"` // 重定向URL
|
||||
BestPayInfo string `json:"best_pay_info"` // 翼支付信息
|
||||
PartnerId string `json:"partner_id"` // 合作伙伴ID
|
||||
SubMchId string `json:"sub_mch_id"` // 子商户ID
|
||||
}
|
||||
|
||||
func (p *PreorderResponse) SuccessOrFail() bool {
|
||||
return p.Code == "BBS00000"
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
package model
|
||||
|
||||
// QueryLedgerMerRequest 分账商户查询请求结构体
|
||||
// 用于向拉卡拉接口发送分账商户查询请求
|
||||
// 包含请求头信息和业务数据
|
||||
type QueryLedgerMerRequest struct {
|
||||
// 请求业务数据
|
||||
ReqData *QueryLedgerMerReqData `json:"req_data"`
|
||||
// 接口版本号
|
||||
Version string `json:"version"`
|
||||
// 请求时间,格式为yyyyMMddHHmmss
|
||||
ReqTime string `json:"req_time"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerReqData 分账商户查询请求业务数据结构体
|
||||
// 包含分账商户查询所需的具体业务参数
|
||||
// 用于查询商户的分账设置信息
|
||||
type QueryLedgerMerReqData struct {
|
||||
// 接口版本号,必传,长度8,取值说明:1.0
|
||||
Version string `json:"version"`
|
||||
// 订单编号(便于后续跟踪排查问题及核对报文),必传,长度32,取值说明:14位年月日(24小时制)分秒+8位的随机数(不重复)
|
||||
OrderNo string `json:"order_no"`
|
||||
// 机构代码,必传,长度32
|
||||
OrgCode string `json:"org_code"`
|
||||
// 拉卡拉内部商户号,可选,长度32,取值说明:拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
// 银联商户号,可选,长度32,取值说明:拉卡拉内部商户号和银联商户号必须传一个,都送以内部商户号为准
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerResponse 分账商户查询响应结构体
|
||||
// 拉卡拉接口返回的分账商户查询响应数据
|
||||
// 包含响应状态码、消息和业务数据
|
||||
type QueryLedgerMerResponse struct {
|
||||
// 响应状态码,000000表示成功
|
||||
Code string `json:"code"`
|
||||
// 响应消息
|
||||
Msg string `json:"msg"`
|
||||
// 响应业务数据,当code为000000时返回
|
||||
RespData *QueryLedgerMerRespData `json:"resp_data"`
|
||||
}
|
||||
|
||||
// QueryLedgerMerRespData 分账商户查询响应业务数据结构体
|
||||
// 包含分账商户查询返回的具体业务信息
|
||||
type QueryLedgerMerRespData struct {
|
||||
// 分账商户机构号
|
||||
OrgId string `json:"org_id"`
|
||||
// 分账商户机构名称
|
||||
OrgName string `json:"org_name"`
|
||||
// 拉卡拉内部商户号
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
// 银联商户号
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
// 最低分账比例(百分比,支持2位精度),取值说明:70或70.50
|
||||
SplitLowestRatio string `json:"split_lowest_ratio"`
|
||||
// 商户分账状态,取值说明:VALID启用,INVALID禁用
|
||||
SplitStatus string `json:"split_status"`
|
||||
// 分账范围,取值说明:ALL:全部交易分账(商户所有交易默认待分账),MARK:标记交易分账(只有带分账标识交易待分账,其余交易正常结算),默认:MARK
|
||||
SplitRange string `json:"split_range"`
|
||||
// 分账依据,取值说明:TR或空:交易分账,BA:余额分账,默认:TR交易分账
|
||||
SepFundSource string `json:"sep_fund_source"`
|
||||
// 平台ID,取值说明:如果商户和绑定平台分账,返回平台ID
|
||||
PlatformId string `json:"platform_id"`
|
||||
// 分账发起方式,取值说明:AUTO:自动规则分账,POINTRULE:指定规则分账,MANUAL:手动规则分账
|
||||
SplitLaunchMode string `json:"split_launch_mode"`
|
||||
// 分账规则来源,取值说明:MER:商户分账规则,PLATFORM:平台分账规则
|
||||
SplitRuleSource string `json:"split_rule_source"`
|
||||
// 已绑定接收方列表
|
||||
BindRelations []BindRelation `json:"bind_relations"`
|
||||
}
|
||||
|
||||
// BindRelation 已绑定接收方信息结构体
|
||||
// 用于表示分账商户已绑定的接收方信息
|
||||
type BindRelation struct {
|
||||
// 拉卡拉内部商户号
|
||||
MerInnerNo string `json:"mer_inner_no"`
|
||||
// 银联商户号
|
||||
MerCupNo string `json:"mer_cup_no"`
|
||||
// 接收方编号
|
||||
ReceiverNo string `json:"receiver_no"`
|
||||
// 接收方编号名称
|
||||
ReceiverName string `json:"receiver_name"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断分账商户查询请求是否成功
|
||||
// 成功条件:响应码为000000
|
||||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *QueryLedgerMerResponse) SuccessOrFail() bool {
|
||||
return resp.Code == "000000"
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
package model
|
||||
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
// Refund 退款请求结构体
|
||||
type Refund struct {
|
||||
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 {
|
||||
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-为分账;分账交易退款必须填写。需要退款上送该笔的分账状态,为分账时,是退分账前处理,还是退分账后处理
|
||||
}
|
||||
|
||||
// NewRefund 创建退款请求
|
||||
func NewRefund(param *RefundReqData) *Refund {
|
||||
return &Refund{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: param,
|
||||
}
|
||||
}
|
||||
|
||||
// RefundResponse 退款响应结构体
|
||||
type RefundResponse struct {
|
||||
Code string `json:"code"` // 响应码,"000000"表示成功
|
||||
Msg string `json:"msg"` // 响应信息,对响应码的文字描述
|
||||
RespData RefundRespData `json:"resp_data"` // 响应业务数据
|
||||
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),选填
|
||||
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-渠道处理超时"
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断退款交易是否成功
|
||||
func (r *RefundResponse) SuccessOrFail() bool {
|
||||
return r.Code == "000000"
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package model
|
||||
|
||||
type SeparateRequest struct {
|
||||
ReqData *SeparateReqData `json:"req_data"` // 请求数据
|
||||
Version string `json:"version"` // 版本号
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
}
|
||||
|
||||
type SeparateReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号
|
||||
LogDate string `json:"log_date"` // 交易日期 yyyyMMdd,查清结算用
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号
|
||||
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 非必填
|
||||
SeparateType string `json:"separate_type"`
|
||||
NotifyUrl string `json:"notify_url"` // 回调地址 分账,分账撤销或分账回退时,是异步接口。通过该地址通知商户最终处理结果。不传时,不回调
|
||||
RecvDatas []*SeparateRecvDatas `json:"recv_datas"` // 分账接收数据对象 分账接收方编号必须已创建
|
||||
}
|
||||
type SeparateRecvDatas struct {
|
||||
RecvMerchantNo string `json:"recv_merchant_no,omitempty"` // 接收方商户号 分账接收方商户号,分给自己时使用,需和merchantNo一样,否则检查报错;分账接收方商户号 和 分账接收方 只能填写一个。
|
||||
SeparateValue string `json:"separate_value"` // 分账数值 calType为0时,按照固定金额分账,单位:分 calType为1时,按照比例分账,单位:百分比的小数值,比如0.55 (55%)
|
||||
RecvNo string `json:"recv_no,omitempty"` // 分账接收方编号 分账接收方编号, 分给他人时使用;分账接收方商户号 和 分账接收方 只能填写一个。
|
||||
}
|
||||
|
||||
type SeparateResponse struct {
|
||||
Msg string `json:"msg"`
|
||||
RespTime string `json:"resp_time"`
|
||||
Code string `json:"code"`
|
||||
RespData struct {
|
||||
TotalAmt string `json:"total_amt"` // 分账总金额 单位:分
|
||||
LogDate string `json:"log_date"` // 拉卡拉订单日期 posp日期,yyyyMMdd,查清结算用
|
||||
SeparateNo string `json:"separate_no"` // 分账指令流水号 分账系统生成唯一流水
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号 请求透返
|
||||
OutSeparateNo string `json:"out_separate_no"` // 商户订单号 请求报文中的商户外部订单号
|
||||
Status string `json:"status"` // 分账状态 处理中:PROCESSING, 已受理:ACCEPTED, 成功:SUCCESS, 失败:FAIL
|
||||
} `json:"resp_data"`
|
||||
}
|
||||
|
||||
func (s *SeparateResponse) SuccessOrFail() bool {
|
||||
return s.Code == "SACS0000"
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package model
|
||||
|
||||
// SplitBalanceRequest 可分账金额查询请求结构体
|
||||
// 用于查询指定交易的可分账金额信息
|
||||
// 拉卡拉SDK接口文档:可分账金额查询接口
|
||||
|
||||
type SplitBalanceRequest struct {
|
||||
ReqData *SplitBalanceReqData `json:"req_data"` // 请求业务数据
|
||||
Version string `json:"version"` // 接口版本号
|
||||
ReqTime string `json:"req_time"` // 请求时间,格式为yyyyMMddHHmmss
|
||||
}
|
||||
|
||||
// SplitBalanceReqData 可分账金额查询请求业务数据结构体
|
||||
// 包含可分账金额查询所需的查询参数
|
||||
|
||||
type SplitBalanceReqData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传,长度32
|
||||
LogDate string `json:"log_date"` // 拉卡拉对账单交易日期,必传,长度8,格式为yyyyMMdd,用于查询结算
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,必传,长度14,对应pos流水号,用于查询结算
|
||||
}
|
||||
// SplitBalanceResponse 可分账金额查询响应结构体
|
||||
// 包含可分账金额查询的结果信息
|
||||
|
||||
type SplitBalanceResponse struct {
|
||||
Msg string `json:"msg"` // 响应消息,描述响应结果
|
||||
RespTime string `json:"resp_time"` // 响应时间,格式为yyyyMMddHHmmss
|
||||
Code string `json:"code"` // 响应码,SACS0000表示成功
|
||||
RespData struct {
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,请求返回
|
||||
TotalSeparateAmt string `json:"total_separate_amt"` // 总分账金额,必传,长度15,单位为分
|
||||
CanSeparateAmt string `json:"can_separate_amt"` // 可分账金额,必传,长度15,单位为分
|
||||
LogDate string `json:"log_date"` // 拉卡拉对账单交易日期,必传,长度8,格式为yyyyMMdd
|
||||
LogNo string `json:"log_no"` // 拉卡拉对账单流水号,必传,长度14,请求返回
|
||||
} `json:"resp_data"` // 响应业务数据,当code为SACS0000时返回
|
||||
}
|
||||
|
||||
func (s *SplitBalanceResponse) SuccessOrFail() bool {
|
||||
return s.Code == "SACS0000"
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
package model
|
||||
|
||||
// TradeQuery 交易查询请求结构体
|
||||
type TradeQuery struct {
|
||||
ReqTime string `json:"req_time"` // 请求时间
|
||||
Version string `json:"version"` // API版本号
|
||||
OutOrgCode string `json:"out_org_code"` // 外部机构码
|
||||
ReqData *TradeQueryReqData `json:"req_data"` // 请求数据
|
||||
}
|
||||
|
||||
// TradeQueryReqData 交易查询请求数据结构体
|
||||
type TradeQueryReqData struct {
|
||||
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"` // 响应消息
|
||||
RespTime string `json:"resp_time"` // 响应时间
|
||||
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"` // 子单对账单单流水号,必传
|
||||
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 {
|
||||
OutSubTradeNo string `json:"out_sub_trade_no"` // 外部子退款交易流水号,必传
|
||||
MerchantNo string `json:"merchant_no"` // 商户号,必传
|
||||
TermNo string `json:"term_no"` // 终端号,必传
|
||||
RefundAmount string `json:"refund_amount"` // 申请退款金额,必传(单位分)
|
||||
SubTradeNo string `json:"sub_trade_no"` // 拉卡分子交易流水号,条件必传
|
||||
SubLogNo string `json:"sub_log_no"` // 对账单子流水号,条件必传
|
||||
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:"resp_data"` // 响应数据
|
||||
}
|
||||
|
||||
func (t *TradeQueryResponse) SuccessOrFail() bool {
|
||||
return t.Code == "000000"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package model
|
||||
|
||||
type UploadFileRequest struct {
|
||||
ReqData *UploadFileReqData `json:"reqData"`
|
||||
Ver string `json:"ver"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
ReqId string `json:"reqId"`
|
||||
}
|
||||
|
||||
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"`
|
||||
}
|
||||
|
||||
type UploadFileResponse struct {
|
||||
CmdRetCode string `json:"cmdRetCode"`
|
||||
ReqId string `json:"reqId"`
|
||||
RespData struct {
|
||||
AttType string `json:"attType"`
|
||||
OrderNo string `json:"orderNo"`
|
||||
OrgCode string `json:"orgCode"`
|
||||
AttFileId string `json:"attFileId"`
|
||||
} `json:"respData"`
|
||||
RetCode string `json:"retCode"`
|
||||
RetMsg string `json:"retMsg"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Ver string `json:"ver"`
|
||||
}
|
||||
|
||||
func (u *UploadFileResponse) SuccessOrFail() bool {
|
||||
return u.RetCode == "000000"
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package model
|
||||
|
||||
// WithdrawRequest 提现请求结构体
|
||||
// 用于向拉卡拉接口发送提现请求
|
||||
// 包含请求头信息和业务数据
|
||||
type WithdrawRequest struct {
|
||||
// 请求业务数据
|
||||
ReqData *WithdrawReqData `json:"req_data"`
|
||||
// 接口版本号
|
||||
Version string `json:"version"`
|
||||
// 请求时间,格式为yyyyMMddHHmmss
|
||||
ReqTime string `json:"req_time"`
|
||||
}
|
||||
|
||||
// WithdrawReqData 提现请求业务数据结构体
|
||||
// 包含提现所需的具体业务参数
|
||||
// 用于申请账户资金提现
|
||||
type WithdrawReqData struct {
|
||||
// bmcp机构号,必传,最大长度32
|
||||
OrgNo string `json:"org_no"`
|
||||
// 商户号,必传,最大长度32,822商户号,SR分账接收方编号
|
||||
MerchantNo string `json:"merchant_no"`
|
||||
// 提现金额(单位:元),必传,最大长度32
|
||||
DrawAmt string `json:"draw_amt"`
|
||||
// 通知地址,非必传,最大长度256
|
||||
NotifyUrl string `json:"notify_url"`
|
||||
// 商户订单号(商户系统唯一),非必传,最大长度256
|
||||
MerOrderNo string `json:"mer_order_no"`
|
||||
// 账号(若该参数上送,则payType将无效),非必传,最大长度32
|
||||
PayNo string `json:"pay_no"`
|
||||
// 账号类型(01:收款账户,04:分账接收方账户)未上送则默认01,必传,最大长度32,分账接收方提现时需填04
|
||||
PayType string `json:"pay_type"`
|
||||
// 备注信息,非必传,最大长度64
|
||||
Remark string `json:"remark"`
|
||||
// 摘要,非必传,最大长度64
|
||||
Summary string `json:"summary"`
|
||||
// 结算银行ID,非必传,最大长度32
|
||||
BankId string `json:"bank_id"`
|
||||
}
|
||||
|
||||
// WithdrawResponse 提现响应结构体
|
||||
// 拉卡拉接口返回的提现响应数据
|
||||
// 包含响应状态码、消息和业务数据
|
||||
type WithdrawResponse struct {
|
||||
// 响应状态码,000000表示成功
|
||||
Code string `json:"code"`
|
||||
// 响应消息
|
||||
Msg string `json:"msg"`
|
||||
// 响应业务数据,当code为000000时返回
|
||||
RespData *WithdrawRespData `json:"resp_data"`
|
||||
}
|
||||
|
||||
// WithdrawRespData 提现响应业务数据结构体
|
||||
// 包含提现返回的具体业务信息
|
||||
type WithdrawRespData struct {
|
||||
// 提现流水号,必传
|
||||
DrawJnl string `json:"draw_jnl"`
|
||||
// 商户订单号,必传
|
||||
MerOrderNo string `json:"mer_order_no"`
|
||||
}
|
||||
|
||||
// SuccessOrFail 判断提现请求是否成功
|
||||
// 成功条件:响应码为000000
|
||||
// 返回值:true表示成功,false表示失败
|
||||
func (resp *WithdrawResponse) SuccessOrFail() bool {
|
||||
return resp.Code == "000000"
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package lklSDK
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/black1552/lkl_sdk/basePay/labs"
|
||||
"github.com/black1552/lkl_sdk/unifiedreturn"
|
||||
)
|
||||
|
||||
type SDK struct {
|
||||
labs *labs.Labs
|
||||
unifiedReturn *unifiedreturn.Server
|
||||
}
|
||||
|
||||
func NewSDK(ctx context.Context, cfgJson string) *SDK {
|
||||
return &SDK{
|
||||
labs: labs.NewLabs(ctx, cfgJson),
|
||||
unifiedReturn: unifiedreturn.NewServer(ctx, cfgJson),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package mergerefund
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type MergeRefund struct {
|
||||
client *common.Client[ResponseMergeRefund]
|
||||
}
|
||||
|
||||
func NewMergeRefund(client *common.Client[ResponseMergeRefund]) *MergeRefund {
|
||||
return &MergeRefund{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
func (t *MergeRefund) MergeRefund(req *RequestDataMergeRefund) (*ResponseMergeRefund, error) {
|
||||
// 构建BaseModel请求
|
||||
baseReq := RequestMergeRefund{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
return t.client.DoRequest(consts.BASE_URL+consts.LKL_UNIFIED_RETURN_MERGE_REFUND_URL, baseReq)
|
||||
}
|
||||
func (t *MergeRefund) MergeRefundTest(req *RequestDataMergeRefund) (*ResponseMergeRefund, error) {
|
||||
// 构建BaseModel请求
|
||||
baseReq := RequestMergeRefund{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
return t.client.DoRequest(consts.BASE_TEST_URL+consts.LKL_UNIFIED_RETURN_MERGE_REFUND_URL, baseReq)
|
||||
}
|
||||
@@ -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/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// Refund 统一退货API结构体
|
||||
type Refund struct {
|
||||
client *common.Client[ResponseRefund]
|
||||
}
|
||||
|
||||
// NewRefund 创建统一退货API实例
|
||||
func NewRefund(client *common.Client[ResponseRefund]) *Refund {
|
||||
return &Refund{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// Refund 发起统一退货请求
|
||||
// request: 统一退货请求参数
|
||||
// 返回统一退货响应结果和错误信息
|
||||
func (api *Refund) Refund(req *RequestDataRefund) (*ResponseRefund, 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,30 @@
|
||||
package refundquery
|
||||
|
||||
import (
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
"github.com/black1552/lkl_sdk/consts"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type RefundQuery struct {
|
||||
client *common.Client[ResponseRefundQuery]
|
||||
}
|
||||
|
||||
// NewRefundQuery 创建统一退货查询API实例
|
||||
func NewRefundQuery(client *common.Client[ResponseRefundQuery]) *RefundQuery {
|
||||
return &RefundQuery{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// RefundQuery 发起统一退货查询请求
|
||||
func (api *RefundQuery) RefundQuery(req *RequestDataRefundQuery) (*ResponseRefundQuery, error) {
|
||||
// 构建BaseModel请求
|
||||
baseReq := RequestRefundQuery{
|
||||
ReqTime: gtime.Now().Format("YmdHis"),
|
||||
Version: "3.0",
|
||||
ReqData: req,
|
||||
}
|
||||
|
||||
return api.client.DoRequest(consts.BASE_URL+consts.LKL_UNIFIED_RETURN_REFUND_QUERY_URL, baseReq)
|
||||
}
|
||||
@@ -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,25 @@
|
||||
package unifiedreturn
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/black1552/lkl_sdk/common"
|
||||
mergeRefund "github.com/black1552/lkl_sdk/unifiedReturn/mergeRefund"
|
||||
"github.com/black1552/lkl_sdk/unifiedReturn/refund"
|
||||
"github.com/black1552/lkl_sdk/unifiedReturn/refundquery"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
MergeRefound *mergeRefund.MergeRefund
|
||||
Refound *refund.Refund
|
||||
RefoundQuery *refundquery.RefundQuery
|
||||
}
|
||||
|
||||
// NewServer 创建拉卡拉统一退货服务实例
|
||||
func NewServer(ctx context.Context, cfgJson string) *Server {
|
||||
return &Server{
|
||||
MergeRefound: mergeRefund.NewMergeRefund(common.NewClient[mergeRefund.ResponseMergeRefund](ctx, cfgJson)),
|
||||
Refound: refund.NewRefund(common.NewClient[refund.ResponseRefund](ctx, cfgJson)),
|
||||
RefoundQuery: refundquery.NewRefundQuery(common.NewClient[refundquery.ResponseRefundQuery](ctx, cfgJson)),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user