feat(payment): 增加本地 Mock 支付渠道与缺失渠道提示

This commit is contained in:
yml2213
2026-11-01 15:45:00 +08:00
parent 13bda13633
commit 3576378e7e
3 changed files with 31 additions and 0 deletions
@@ -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):
+13
View File
@@ -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');
@@ -102,6 +102,7 @@ export function AdminPaymentConfigsPage() {
const { message, modal } = App.useApp()
const queryClient = useQueryClient()
const [form] = Form.useForm<ConfigFormValues>()
const providerValue = Form.useWatch('provider', form)
const [draft, setDraft] = useState<AdminPaymentConfigQuery>({})
const [filters, setFilters] = useState<AdminPaymentConfigQuery>({})
const [page, setPage] = useState(1)
@@ -537,6 +538,15 @@ export function AdminPaymentConfigsPage() {
: '乐刷/拉卡拉/顺诚需要完整密钥与回调地址;创建前请确认商户环境。'
}
/>
{providerValue === 'mock' ? (
<Alert
type="info"
showIcon
className="admin-table-alert"
message="Mock 渠道仅用于联调"
description="无需网关、密钥和回调地址;用户发起支付后会直接标记为已支付,请勿在生产环境启用。"
/>
) : null}
<Form<ConfigFormValues> form={form} layout="vertical" disabled={submitting}>
<Row gutter={16}>
<Col span={12}>