125 lines
9.5 KiB
Go
125 lines
9.5 KiB
Go
package model
|
||
|
||
import (
|
||
"github.com/black1552/lkl_sdk/consts"
|
||
"github.com/gogf/gf/v2/os/gtime"
|
||
)
|
||
|
||
// MergePreorder 主扫合单交易请求结构体
|
||
type MergePreorder struct {
|
||
ReqTime string `json:"req_time"` // 请求时间,格式:YYYYMMDDHHMMSS
|
||
Version string `json:"version"` // 接口版本号,固定值"3.0"
|
||
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 consts.AccountType `json:"account_type"` // 钱包类型,微信:WECHAT 支付宝:ALIPAY 银联:UQRCODEPAY 京东钱包:JD,String(32),必填
|
||
TransType consts.TransType `json:"trans_type"` // 接入方式,41:NATIVE(扫码支付)(仅ALIPAY支持) 51:JSAPI(微信公众号支付,支付宝服务窗支付,银联JS支付,支付宝JS支付、拉卡拉钱包支付)71:微信小程序支付 81:支付宝H5支付(需特殊商户账户端支持),String(2),必填
|
||
TotalAmount string `json:"total_amount"` // 金额,单位分,整数型字符,String(12),必填
|
||
LocationInfo *LocationInfo `json:"location_info"` // 地址位置信息,Object,风控要求必送,必填
|
||
BusiMode string `json:"busi_mode"` // 业务模式,ACQ-收单 PAY-付款不填,默认为"ACQ-收单",String(8),选填
|
||
Subject string `json:"subject"` // 订单标题,用于简单描述订单或商品主题,传递给账户端(账户端控制,实际最多42个字节),String(42),选填
|
||
NotifyUrl string `json:"notify_url"` // 商户通知地址,如果上传,且 pay_order_no 不存在情况下,则按此地址通知商户,String(128),选填
|
||
Remark string `json:"remark"` // 备注,String(128),选填
|
||
IdentityInfo string `json:"identity_info"` // 实名支付信息,json字符串,如{"identityNo": "3200000000000000XX", "name": "张三"},然后国密sm2加密,String(1024),选填
|
||
AccBusiFields *AccBusiFields `json:"acc_busi_fields"` // 账户端业务信息域,Object,选填
|
||
CompleteNotifyUrl string `json:"complete_notify_url"` // 发货确认通知地址,发货类小程序确认收货后通知商户的地址,String(128),选填
|
||
}
|
||
|
||
// OutSplitInfo 拆单信息
|
||
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"
|
||
}
|