feat(payment): 虎皮椒聚合支付 - 官方插件与跨平台可执行文件

新增 xunhupay 官方包,支付 RPC 与宿主只保留订单和验签边界;官方支付包同时带上各系统 provider,避免把 Linux ELF 当成本机入口。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ddCatandCursor committed 2026-09-17 23:32:11 +08:00
1 parent e5a5f0ccc8
commit a23df0cb32
63 files changed
+2070 -128

No files matched your search

@@ -44,6 +44,9 @@ func TestMigrateSchemaRecordsAndValidatesVersion(t *testing.T) {
if !db.Migrator().HasTable(&model.AgentMemorySetting{}) {
t.Fatal("schema migration v18 did not create agent memory settings")
}
if !db.Migrator().HasColumn(&model.PaymentProviderConfig{}, "plugin_version") || !db.Migrator().HasColumn(&model.PaymentOrder{}, "plugin_version") {
t.Fatal("schema migration v19 did not add payment plugin version columns")
}
if err := MigrateSchema(db); err != nil {
t.Fatalf("migration should be idempotent: %v", err)
}
@@ -153,6 +156,38 @@ func TestMigrateSchemaV18UpgradesExistingDatabase(t *testing.T) {
}
}
func TestMigrateSchemaV19AddsPaymentPluginVersion(t *testing.T) {
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-payment-plugin-version-v19?mode=memory&cache=shared"})
if err != nil {
t.Fatal(err)
}
if err := MigrateSchema(db); err != nil {
t.Fatal(err)
}
if err := db.Migrator().DropColumn(&model.PaymentProviderConfig{}, "PluginVersion"); err != nil {
t.Fatal(err)
}
if err := db.Migrator().DropColumn(&model.PaymentOrder{}, "PluginVersion"); err != nil {
t.Fatal(err)
}
if err := db.Where("version = ?", 19).Delete(&schemaMigration{}).Error; err != nil {
t.Fatal(err)
}
if err := MigrateSchema(db); err != nil {
t.Fatalf("upgrade from v18: %v", err)
}
if !db.Migrator().HasColumn(&model.PaymentProviderConfig{}, "plugin_version") {
t.Fatal("v19 upgrade did not add payment_provider_configs.plugin_version")
}
if !db.Migrator().HasColumn(&model.PaymentOrder{}, "plugin_version") {
t.Fatal("v19 upgrade did not add payment_orders.plugin_version")
}
status, err := ReadSchemaStatus(db)
if err != nil || !status.Ready || status.Current != CurrentSchemaVersion {
t.Fatalf("unexpected upgraded schema status: %+v, %v", status, err)
}
}
func TestMigrateSchemaV8AllowsReusingArchivedLogicalModelCode(t *testing.T) {
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-logical-model-active-code?mode=memory&cache=shared"})
if err != nil {