支持微信支付宝独立支付渠道
This commit is contained in:
@@ -37,9 +37,10 @@ func (r *Repository) Create(ctx context.Context, req CreateRequest, actorID uint
|
||||
if environment == "" {
|
||||
environment = "production"
|
||||
}
|
||||
payWay := firstNonEmpty(req.PayWay, "ZFBZF")
|
||||
isDefault := req.IsDefault
|
||||
if status == "active" {
|
||||
if err := deactivateOtherConfigs(tx, 0, actorID); err != nil {
|
||||
if err := deactivateOtherConfigs(tx, 0, actorID, payWay); err != nil {
|
||||
return err
|
||||
}
|
||||
isDefault = true
|
||||
@@ -56,7 +57,7 @@ func (r *Repository) Create(ctx context.Context, req CreateRequest, actorID uint
|
||||
NotifyKey: encryptedNotifyKey,
|
||||
NotifyURL: req.NotifyURL,
|
||||
JumpURL: req.JumpURL,
|
||||
PayWay: firstNonEmpty(req.PayWay, "ZFBZF"),
|
||||
PayWay: payWay,
|
||||
JSPayFlag: firstNonEmpty(req.JSPayFlag, "2"),
|
||||
SignType: firstNonEmpty(req.SignType, defaultSignType(req.Provider)),
|
||||
ExtraConfig: req.ExtraConfig,
|
||||
@@ -97,6 +98,9 @@ func (r *Repository) Update(ctx context.Context, id uint64, req UpdateRequest, a
|
||||
if req.SignType != nil && *req.SignType != "" && !isValidSignType(*req.SignType) {
|
||||
return nil, ErrInvalidSignType
|
||||
}
|
||||
if req.PayWay != nil && !isValidPayWay(*req.PayWay) {
|
||||
return nil, ErrInvalidPayWay
|
||||
}
|
||||
if req.Status != nil && !isValidStatus(*req.Status) {
|
||||
return nil, ErrInvalidStatus
|
||||
}
|
||||
@@ -145,7 +149,7 @@ func (r *Repository) Update(ctx context.Context, id uint64, req UpdateRequest, a
|
||||
updates["jump_url"] = *req.JumpURL
|
||||
}
|
||||
if req.PayWay != nil {
|
||||
updates["pay_way"] = *req.PayWay
|
||||
updates["pay_way"] = firstNonEmpty(*req.PayWay, "ZFBZF")
|
||||
}
|
||||
if req.JSPayFlag != nil {
|
||||
updates["jspay_flag"] = *req.JSPayFlag
|
||||
@@ -174,8 +178,15 @@ func (r *Repository) Update(ctx context.Context, id uint64, req UpdateRequest, a
|
||||
if req.Status != nil {
|
||||
finalStatus = *req.Status
|
||||
}
|
||||
finalPayWay := item.PayWay
|
||||
if req.PayWay != nil && *req.PayWay != "" {
|
||||
finalPayWay = *req.PayWay
|
||||
}
|
||||
if finalPayWay == "" {
|
||||
finalPayWay = "ZFBZF"
|
||||
}
|
||||
if finalStatus == "active" {
|
||||
if err := deactivateOtherConfigs(tx, id, actorID); err != nil {
|
||||
if err := deactivateOtherConfigs(tx, id, actorID, finalPayWay); err != nil {
|
||||
return err
|
||||
}
|
||||
updates["status"] = "active"
|
||||
@@ -225,8 +236,10 @@ func (r *Repository) Delete(ctx context.Context, id uint64, actorID uint64, meta
|
||||
}
|
||||
|
||||
var usedCount int64
|
||||
if err := tx.Model(&model.PaymentOrder{}).
|
||||
Where("provider = ? AND merchant_id = ?", item.Provider, item.MerchantID).
|
||||
usedDB := tx.Model(&model.PaymentOrder{}).
|
||||
Where("payment_config_id = ?", item.ID).
|
||||
Or("(payment_config_id = ? OR payment_config_id IS NULL) AND provider = ? AND merchant_id = ? AND pay_way = ?", 0, item.Provider, item.MerchantID, item.PayWay)
|
||||
if err := usedDB.
|
||||
Count(&usedCount).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -246,12 +259,10 @@ func (r *Repository) Delete(ctx context.Context, id uint64, actorID uint64, meta
|
||||
})
|
||||
}
|
||||
|
||||
// IncrementUsage 增加使用统计
|
||||
|
||||
// deactivateOtherConfigs 保证全局同一时间只有一个启用配置。
|
||||
func deactivateOtherConfigs(tx *gorm.DB, activeID uint64, actorID uint64) error {
|
||||
// deactivateOtherConfigs 保证同一个支付方式同一时间只有一个启用配置。
|
||||
func deactivateOtherConfigs(tx *gorm.DB, activeID uint64, actorID uint64, payWay string) error {
|
||||
db := tx.Model(&model.PaymentMerchantConfig{}).
|
||||
Where("status = ? OR is_default = ?", "active", true)
|
||||
Where("pay_way = ? AND (status = ? OR is_default = ?)", payWay, "active", true)
|
||||
if activeID > 0 {
|
||||
db = db.Where("id != ?", activeID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user