import React, { useEffect, useState, useRef } from 'react'; import { Banner, Button, Form, Row, Col, Typography, Spin, } from '@douyinfe/semi-ui'; const { Text } = Typography; import { API, removeTrailingSlash, showError, showSuccess, } from '../../../helpers'; import { useTranslation } from 'react-i18next'; export default function SettingsPaymentGateway(props) { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [inputs, setInputs] = useState({ StripeApiSecret: '', StripeWebhookSecret: '', StripePriceId: '', StripeUnitPrice: 8.0, StripeMinTopUp: 1, }); const [originInputs, setOriginInputs] = useState({}); const formApiRef = useRef(null); useEffect(() => { if (props.options && formApiRef.current) { const currentInputs = { StripeApiSecret: props.options.StripeApiSecret || '', StripeWebhookSecret: props.options.StripeWebhookSecret || '', StripePriceId: props.options.StripePriceId || '', StripeUnitPrice: props.options.StripeUnitPrice !== undefined ? parseFloat(props.options.StripeUnitPrice) : 8.0, StripeMinTopUp: props.options.StripeMinTopUp !== undefined ? parseFloat(props.options.StripeMinTopUp) : 1, }; setInputs(currentInputs); setOriginInputs({ ...currentInputs }); formApiRef.current.setValues(currentInputs); } }, [props.options]); const handleFormChange = (values) => { setInputs(values); }; const submitStripeSetting = async () => { if (props.options.ServerAddress === '') { showError(t('请先填写服务器地址')); return; } setLoading(true); try { const options = [] if (inputs.StripeApiSecret && inputs.StripeApiSecret !== '') { options.push({ key: 'StripeApiSecret', value: inputs.StripeApiSecret }); } if (inputs.StripeWebhookSecret && inputs.StripeWebhookSecret !== '') { options.push({ key: 'StripeWebhookSecret', value: inputs.StripeWebhookSecret }); } if (inputs.StripePriceId !== '') { options.push({key: 'StripePriceId', value: inputs.StripePriceId,}); } if (inputs.StripeUnitPrice !== undefined && inputs.StripeUnitPrice !== null) { options.push({ key: 'StripeUnitPrice', value: inputs.StripeUnitPrice.toString() }); } if (inputs.StripeMinTopUp !== undefined && inputs.StripeMinTopUp !== null) { options.push({ key: 'StripeMinTopUp', value: inputs.StripeMinTopUp.toString() }); } // 发送请求 const requestQueue = options.map(opt => API.put('/api/option/', { key: opt.key, value: opt.value, }) ); const results = await Promise.all(requestQueue); // 检查所有请求是否成功 const errorResults = results.filter(res => !res.data.success); if (errorResults.length > 0) { errorResults.forEach(res => { showError(res.data.message); }); } else { showSuccess(t('更新成功')); // 更新本地存储的原始值 setOriginInputs({ ...inputs }); props.refresh?.(); } } catch (error) { showError(t('更新失败')); } setLoading(false); }; return (
(formApiRef.current = api)} > Stripe 密钥、Webhook 等设置请 点击此处 进行设置,最好先在 测试环境 进行测试。
); }