payment

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 26, 2023 License: GPL-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package payment 支付单,不限于订单,可以生成支付单,即一个支付请求

Index

Constants

View Source
const (
	// MBalance 余额抵扣通道
	MBalance = 1 << 0
	// MWallet 钱包支付通道
	MWallet = 1 << 1
	// MIntegral 积分兑换通道
	MIntegral = 1 << 2
	// MUserCard 用户卡通道
	MUserCard = 1 << 3
	// MUserCoupon 用户券通道
	MUserCoupon = 1 << 4
	// MCash 现金支付通道
	MCash = 1 << 5
	// MBankCard 银行卡支付通道(64)
	MBankCard = 1 << 6
	// MPaySP 第三方支付(128)
	MPaySP = 1 << 7
	// MSellerPay 卖家支付通道
	MSellerPay = 1 << 8
	// MSystemPay 系统支付通道
	MSystemPay = 1 << 9
)

支付通道

View Source
const (
	// StateAwaitingPayment 待支付
	StateAwaitingPayment = 1
	// StateFinished 已支付
	StateFinished = 2
	// StateCancelled 已关闭
	StateClosed = 3
	// StateRefunded 已退款
	StateRefunded = 4
)

支付单状态

PAllFlag 所有支付方式

Variables

View Source
var (
	ErrNoSuchPaymentOrder = domain.NewError(
		"err_no_such_payment_order", "支付单不存在")

	ErrExistsTradeNo = domain.NewError(
		"err_payment_exists_trade_no", "支付单号重复")

	ErrPaymentNotSave = domain.NewError(
		"err_payment_not_save", "支付单需存后才能执行操作")

	ErrFinalAmount = domain.NewError(
		"err_final_amount", "支付单金额有误")

	ErrNotSupportPaymentChannel = domain.NewError(
		"err_payment_not_support_channel", "不支持此支付方式,无法完成付款")
	ErrItemAmount       = domain.NewError("err_payment_item_amount", "支付单金额不能为零")
	ErrOutOfFinalAmount = domain.NewError("err_out_of_final_amount",
		"超出支付单金额")
	ErrNotMatchFinalAmount = domain.NewError("err_not_match_final_amount",
		"金额与实际金额不符,无法完成付款")
	ErrTradeNoPrefix = domain.NewError(
		"err_payment_trade_no_prefix", "支付单号前缀不正确")
	ErrTradeNoExistsPrefix = domain.NewError(
		"err_payment_trade_no_exists_prefix", "支付单号已存在前缀")

	ErrOrderCommitted = domain.NewError(
		"err_payment_order_committed", "支付单已提交")

	ErrOrderPayed = domain.NewError(
		"err_payment_order_payed", "订单已支付")

	ErrOrderClosed = domain.NewError("err_payment_order_has_closed", "订单已经取消")

	ErrOrderRefunded = domain.NewError("err_payment_order_has_refunded", "订单已退款")

	ErrOrderNotPayed = domain.NewError("err_payment_order_not_payed", "订单未支付")

	ErrCanNotUseBalance = domain.NewError("err_can_not_use_balance", "不能使用余额支付")

	ErrNotEnoughAmount = domain.NewError("err_payment_not_enough_amount", "余额不足,无法完成支付")

	ErrCanNotUseIntegral = domain.NewError("err_can_not_use_integral", "不能使用积分抵扣")

	ErrCanNotUseCoupon = domain.NewError("err_can_not_use_coupon", "不能使用优惠券")

	ErrCanNotSystemDiscount = domain.NewError("err_can_not_system_discount", "不允许系统支付")

	ErrOuterNo = domain.NewError("err_outer_no", "第三方交易号错误")
)

Functions

This section is empty.

Types

type IPaymentOrder

type IPaymentOrder interface {
	// GetAggregateRootId 获取聚合根编号
	GetAggregateRootId() int
	// Get 获取支付单的值
	Get() Order
	// TradeNo 获取交易号
	TradeNo() string
	// State 支付单状态
	State() int
	// Flag 支付方式
	Flag() int
	// TradeMethods 支付途径支付信息
	TradeMethods() []*TradeMethodData
	// CheckPaymentState 在支付之前检查订单状态
	CheckPaymentState() error
	// Submit 提交支付单
	Submit() error
	// MergePay 合并支付
	MergePay(orders []IPaymentOrder) (mergeTradeNo string, finalAmount int, err error)
	// Cancel 取消支付/退款
	Cancel() error
	// OfflineDiscount 线下现金/刷卡支付,cash:现金,bank:刷卡金额,finalZero:是否金额必须为零
	OfflineDiscount(cash int, bank int, finalZero bool) error
	// TradeFinish 交易完成
	TradeFinish() error
	// PaymentFinish 支付完成并保存,传入第三名支付名称,以及外部的交易号
	PaymentFinish(spName string, outTradeNo string) error
	// CouponDiscount 优惠券抵扣
	CouponDiscount(coupon promotion.ICouponPromotion) (int, error)
	// BalanceDeduct 使用会员的余额抵扣
	BalanceDeduct(remark string) error
	// WalletDeduct 使用会员的钱包抵扣
	WalletDeduct(remark string) error
	// IntegralDiscount 使用会员积分抵扣,返回抵扣的金额及错误,ignoreOut:是否忽略超出订单金额的积分
	IntegralDiscount(integral int, ignoreOut bool) (amount int, err error)
	// SystemPayment SystemPayment 系统支付金额
	SystemPayment(amount int) error
	// PaymentByWallet PaymentByWallet 钱包账户支付
	PaymentByWallet(remark string) error
	// PaymentWithCard 使用会员卡支付,cardCode:会员卡编码,amount:支付金额
	PaymentWithCard(cardCode string, amount int) error
	// HybridPayment 余额钱包混合支付,优先扣除余额。
	HybridPayment(remark string) error

	// Adjust 调整金额,如调整金额与实付金额相加小于等于零,则支付成功。
	Adjust(amount int) error
	// Refund 退款
	Refund(amount int) error
	// ChanName 获取支付通道字符串
	ChanName(method int) string
}

IPaymentOrder 支付单接口

type IPaymentRepo

type IPaymentRepo interface {
	// GetPaymentOrderById 根据编号获取支付单
	GetPaymentOrderById(id int) IPaymentOrder
	// DeletePaymentOrder 拆分后删除父支付单
	DeletePaymentOrder(id int) error
	// DeletePaymentTradeData 删除支付单的支付数据
	DeletePaymentTradeData(orderId int) error
	// GetPaymentOrder 根据支付单号获取支付单
	GetPaymentOrder(paymenOrderNo string) IPaymentOrder
	// GetPaymentBySalesOrderId 根据订单号获取支付单
	GetPaymentBySalesOrderId(orderId int64) IPaymentOrder
	// GetPaymentOrderByOrderNo 根据支付单号获取支付单
	GetPaymentOrderByOrderNo(orderType int, orderNo string) IPaymentOrder
	// CreatePaymentOrder 创建支付单
	CreatePaymentOrder(p *Order) IPaymentOrder
	// SavePaymentOrder 保存支付单
	SavePaymentOrder(v *Order) (int, error)
	// CheckTradeNoMatch 检查支付单号是否匹配
	CheckTradeNoMatch(tradeNo string, id int) bool
	// GetTradeChannelItems 获取交易途径支付信息
	GetTradeChannelItems(tradeNo string) []*TradeMethodData
	// SavePaymentTradeChan 保存支付途径支付信息
	SavePaymentTradeChan(tradeNo string, tradeChan *TradeMethodData) (int, error)
	// GetMergePayOrders 获取合并支付的订单
	GetMergePayOrders(mergeTradeNo string) []IPaymentOrder
	// ResetMergePaymentOrders 清除欲合并的支付单
	ResetMergePaymentOrders(tradeNos []string) error
	// SaveMergePaymentOrders 保存合并的支付单
	SaveMergePaymentOrders(s string, tradeNos []string) error
	// FindAllIntegrateApp 集成支付应用
	FindAllIntegrateApp() []*IntegrateApp
	// SaveIntegrateApp Save 集成支付应用
	SaveIntegrateApp(v *IntegrateApp) (int, error)
	// DeleteIntegrateApp Delete 集成支付应用
	DeleteIntegrateApp(primary interface{}) error
	// GetAwaitCloseOrders 获取支付超时待关闭的订单
	GetAwaitCloseOrders(lastId int, size int) []IPaymentOrder
}

IPaymentRepo 支付仓储

type IntegrateApp added in v0.4.10

type IntegrateApp struct {
	// 编号
	Id int `db:"id" pk:"yes" auto:"yes"`
	// 支付应用名称
	AppName string `db:"app_name"`
	// 支付应用接口
	AppUrl string `db:"app_url"`
	// 集成方式: 1:API调用 2: 跳转
	IntegrateType int `db:"integrate_type"`
	// 显示顺序
	SortNumber int `db:"sort_number"`
	// 是否启用
	Enabled int `db:"enabled"`
	// 支付提示信息
	Hint string `db:"hint"`
	// 是否高亮显示
	Highlight int `db:"highlight"`
}

IntegrateApp 集成支付应用

type MergeOrder

type MergeOrder struct {
	// 编号
	ID int `db:"id" pk:"yes" auto:"yes"`
	// 合并交易单号
	MergeTradeNo string `db:"merge_trade_no"`
	// 交易号
	OrderTradeNo string `db:"order_trade_no"`
	// 提交时间
	SubmitTime int64 `db:"submit_time"`
}

MergeOrder 合并的支付单

type Order

type Order struct {
	// 编号
	Id int `db:"id" pk:"yes" auto:"yes"`
	// 卖家编号
	SellerId int `db:"seller_id"`
	// 交易类型
	TradeType string `db:"trade_type"`
	// 交易号
	TradeNo string `db:"trade_no"`
	// 支付单的类型,如购物或其他
	OrderType int `db:"order_type"`
	// 是否为子订单
	SubOrder int `db:"sub_order"`
	// 外部订单号
	OutOrderNo string `db:"out_order_no"`
	// 支付单详情
	Subject string `db:"subject"`
	// 买家编号
	BuyerId int64 `db:"buyer_id"`
	// 支付用户编号
	PayerId int64 `db:"payer_id"`
	// 优惠金额,todo: 删除但目前依赖于优惠券
	DiscountAmount int64 `db:"-"`
	// 调整金额
	AdjustAmount int64 `db:"adjust_amount"`
	// 共计金额,包含抵扣金额
	TotalAmount int64 `db:"total_amount"`
	// 抵扣金额
	DeductAmount int64 `db:"deduct_amount"`
	// 手续费
	ProcedureFee int64 `db:"procedure_fee"`
	// 最终支付金额,包含手续费,不包含抵扣金额
	FinalAmount int64 `db:"final_amount"`
	// 实付金额
	PaidAmount int64 `db:"paid_amount"`
	// 可⽤支付方式
	PayFlag int `db:"pay_flag"`
	// 实际支付方式
	FinalFlag int `db:"final_flag"`
	// 其他支付信息
	ExtraData string `db:"extra_data"`
	// 交易支付渠道
	TradeChannel int `db:"trade_channel"`
	// 外部交易提供商
	OutTradeSp string `db:"out_trade_sp"`
	// 外部交易订单号
	OutTradeNo string `db:"out_trade_no"`
	// 订单状态
	State int `db:"state"`
	// 提交时间
	SubmitTime int64 `db:"submit_time"`
	// 支付过期时间
	ExpiresTime int64 `db:"expires_time"`
	// 支付时间
	PaidTime int64 `db:"paid_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
	// 交易途径支付信息
	TradeMethods []*TradeMethodData `db:"-"`
}

Order 支付单

type TradeMethodData

type TradeMethodData struct {
	// 编号
	Id int `db:"id" pk:"yes" auto:"yes"`
	// 支付订单号Id
	OrderId int `db:"order_id"`
	// 交易单号
	TradeNo string `db:"trade_no"`
	// 支付途径
	Method int `db:"pay_method"`
	// 支付代码
	Code string `db:"pay_code"`
	// 是否为内置支付途径
	Internal int `db:"internal"`
	// 支付金额
	Amount int64 `db:"pay_amount"`
	// 外部交易单号
	OutTradeNo string `db:"out_trade_no"`
	// 支付时间
	PayTime int64 `db:"pay_time"`
}

TradeMethodData 支付单项

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL