重构账户与商户服务模块

- 移除旧版 account.go 文件中的账户服务实现
- 新增聚合扫码关单、退款、撤销等接口实现
- 新增聚合被扫、主扫及加密接口实现
- 新增交易查询与支付宝吱口令申请接口
- 重构统一退货及退货查询接口,优化泛型使用
- 移除旧版商户进件相关接口实现
- 调整部分服务结构体命名与参数传递方式
- 统一请求时间格式并优化代码结构
This commit is contained in:
2025-10-21 13:24:24 +08:00
parent 7777630306
commit 7b9657a9e8
62 changed files with 1061 additions and 2040 deletions
@@ -0,0 +1,32 @@
package transPreorederEncry
import (
"github.com/black1552/lkl_sdk/consts"
"github.com/black1552/lkl_sdk/lklsdk/common"
"github.com/gogf/gf/v2/os/gtime"
)
// TransPreorderEncryServer 聚合扫码主扫交易(全报文加密)服务结构体
type TransPreorderEncryServer[T any] struct {
Client *common.Client[T]
}
// NewTransPreorderEncryServer 创建聚合扫码主扫交易(全报文加密)服务实例
func NewTransPreorderEncryServer(client *common.Client[TransPreorederEncryResponse]) *TransPreorderEncryServer[TransPreorederEncryResponse] {
return &TransPreorderEncryServer[TransPreorederEncryResponse]{
Client: client,
}
}
// TransPreorderEncry 聚合扫码主扫交易(全报文加密)接口
func (a *TransPreorderEncryServer[TransPreorederEncryResponse]) 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"
}