diff --git a/backend/internal/modules/payment/handler.go b/backend/internal/modules/payment/handler.go index 735dc27..c270769 100644 --- a/backend/internal/modules/payment/handler.go +++ b/backend/internal/modules/payment/handler.go @@ -12,6 +12,7 @@ import ( "hfb_sys/backend/internal/integrations/payment/shuncheng" "hfb_sys/backend/internal/middleware" "hfb_sys/backend/internal/modules/order" + "hfb_sys/backend/internal/modules/paymentconfig" "hfb_sys/backend/pkg/response" "github.com/gin-gonic/gin" @@ -316,6 +317,13 @@ func writePaymentError(c *gin.Context, err error) { response.ServiceUnavailable(c, "数据库未连接") case errors.Is(err, ErrPaymentUnavailable): response.Error(c, http.StatusBadGateway, "payment_unavailable", "支付渠道暂不可用") + case errors.Is(err, paymentconfig.ErrNoActiveConfigFound): + response.Error( + c, + http.StatusServiceUnavailable, + "payment_channel_missing", + "尚未配置可用的支付渠道,请在后台「支付配置」启用渠道;本地联调可使用 Mock 渠道", + ) case errors.Is(err, ErrPaymentCannotStart), errors.Is(err, order.ErrOrderCannotPay): response.Error(c, http.StatusConflict, "payment_cannot_start", "当前订单不能支付") case errors.Is(err, ErrRefundCannotStart): diff --git a/backend/scripts/seed_mock_payment.sql b/backend/scripts/seed_mock_payment.sql new file mode 100644 index 0000000..5e0fedc --- /dev/null +++ b/backend/scripts/seed_mock_payment.sql @@ -0,0 +1,13 @@ +-- 本地/测试环境 Mock 支付渠道。 +-- 执行后,发布页发起支付会直接按「已支付」处理,便于联调订单、交接和结算。 +-- 生产环境不要执行本脚本。 +DELETE FROM payment_merchant_configs WHERE provider = 'mock'; + +INSERT INTO payment_merchant_configs + (name, provider, merchant_id, gateway_url, sign_key, notify_key, notify_url, jump_url, + pay_way, jspay_flag, sign_type, is_default, status, environment) +VALUES + ('Mock 支付 · 微信', 'mock', 'MOCK_WXZF', '', NULL, NULL, '', '', + 'WXZF', '2', 'MD5', 1, 'active', 'sandbox'), + ('Mock 支付 · 支付宝', 'mock', 'MOCK_ZFBZF', '', NULL, NULL, '', '', + 'ZFBZF', '2', 'MD5', 1, 'active', 'sandbox'); diff --git a/frontend/src/features/admin/AdminPaymentConfigsPage.tsx b/frontend/src/features/admin/AdminPaymentConfigsPage.tsx index 4195c31..bb3b239 100644 --- a/frontend/src/features/admin/AdminPaymentConfigsPage.tsx +++ b/frontend/src/features/admin/AdminPaymentConfigsPage.tsx @@ -102,6 +102,7 @@ export function AdminPaymentConfigsPage() { const { message, modal } = App.useApp() const queryClient = useQueryClient() const [form] = Form.useForm() + const providerValue = Form.useWatch('provider', form) const [draft, setDraft] = useState({}) const [filters, setFilters] = useState({}) const [page, setPage] = useState(1) @@ -537,6 +538,15 @@ export function AdminPaymentConfigsPage() { : '乐刷/拉卡拉/顺诚需要完整密钥与回调地址;创建前请确认商户环境。' } /> + {providerValue === 'mock' ? ( + + ) : null} form={form} layout="vertical" disabled={submitting}>