feat(payment): 增加本地 Mock 支付渠道与缺失渠道提示
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user