merge: P8 订阅/recurring + 拒付 chargeback 并入(订阅生命周期/续费/取消/past_due/chargeback/事件集收口)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u # Conflicts: # internal/model/testdb.go # internal/provider/provider.go # internal/router/router.go # internal/store/order_query_test.go # main.go
This commit is contained in:
@@ -154,6 +154,10 @@ func (n *Notifier) deliverOne(d *store.WebhookDeliveryRow) bool {
|
||||
n.fail(d, "biz system not configured")
|
||||
return false
|
||||
}
|
||||
if !eventSupported(cfg.SupportedEvents, d.EventType) {
|
||||
_ = n.deliveries.MarkDelivered(d.ID) // 业务方未订阅该事件:视为已受理,不投递、不重试
|
||||
return true
|
||||
}
|
||||
ts := strconv.FormatInt(time.Now().Unix(), 10)
|
||||
nonce := uuid.NewString()
|
||||
sign := util.HMACSign(cfg.Secret, d.BizSystem, ts, nonce, d.Payload)
|
||||
@@ -186,6 +190,21 @@ func (n *Notifier) deliverOne(d *store.WebhookDeliveryRow) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// eventSupported 判断业务方是否声明支持该 event_type(设计 §「接入方显式声明支持事件
|
||||
// 集」):list 为空 → 仅 payment.succeeded 为真(v1/P2 接入方向后兼容,不会突然收到
|
||||
// subscription.*/chargeback.received 等新事件把它们搞崩);非空则按声明集精确匹配。
|
||||
func eventSupported(list []string, ev string) bool {
|
||||
if len(list) == 0 {
|
||||
return ev == "payment.succeeded"
|
||||
}
|
||||
for _, e := range list {
|
||||
if e == ev {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// truncate safely truncates a string to n bytes without splitting UTF-8 runes.
|
||||
func truncate(s string, n int) string {
|
||||
if len(s) <= n {
|
||||
|
||||
Reference in New Issue
Block a user