feat: allow stripe promotion code
This commit is contained in:
@@ -225,7 +225,8 @@ func genStripeLink(referenceId string, customerId string, email string, amount i
|
|||||||
Quantity: stripe.Int64(amount),
|
Quantity: stripe.Int64(amount),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Mode: stripe.String(string(stripe.CheckoutSessionModePayment)),
|
Mode: stripe.String(string(stripe.CheckoutSessionModePayment)),
|
||||||
|
AllowPromotionCodes: stripe.Bool(setting.StripePromotionCodesEnabled),
|
||||||
}
|
}
|
||||||
|
|
||||||
if "" == customerId {
|
if "" == customerId {
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ func InitOptionMap() {
|
|||||||
common.OptionMap["StripeWebhookSecret"] = setting.StripeWebhookSecret
|
common.OptionMap["StripeWebhookSecret"] = setting.StripeWebhookSecret
|
||||||
common.OptionMap["StripePriceId"] = setting.StripePriceId
|
common.OptionMap["StripePriceId"] = setting.StripePriceId
|
||||||
common.OptionMap["StripeUnitPrice"] = strconv.FormatFloat(setting.StripeUnitPrice, 'f', -1, 64)
|
common.OptionMap["StripeUnitPrice"] = strconv.FormatFloat(setting.StripeUnitPrice, 'f', -1, 64)
|
||||||
|
common.OptionMap["StripePromotionCodesEnabled"] = strconv.FormatBool(setting.StripePromotionCodesEnabled)
|
||||||
common.OptionMap["TopupGroupRatio"] = common.TopupGroupRatio2JSONString()
|
common.OptionMap["TopupGroupRatio"] = common.TopupGroupRatio2JSONString()
|
||||||
common.OptionMap["Chats"] = setting.Chats2JsonString()
|
common.OptionMap["Chats"] = setting.Chats2JsonString()
|
||||||
common.OptionMap["AutoGroups"] = setting.AutoGroups2JsonString()
|
common.OptionMap["AutoGroups"] = setting.AutoGroups2JsonString()
|
||||||
@@ -330,6 +331,8 @@ func updateOptionMap(key string, value string) (err error) {
|
|||||||
setting.StripeUnitPrice, _ = strconv.ParseFloat(value, 64)
|
setting.StripeUnitPrice, _ = strconv.ParseFloat(value, 64)
|
||||||
case "StripeMinTopUp":
|
case "StripeMinTopUp":
|
||||||
setting.StripeMinTopUp, _ = strconv.Atoi(value)
|
setting.StripeMinTopUp, _ = strconv.Atoi(value)
|
||||||
|
case "StripePromotionCodesEnabled":
|
||||||
|
setting.StripePromotionCodesEnabled = value == "true"
|
||||||
case "TopupGroupRatio":
|
case "TopupGroupRatio":
|
||||||
err = common.UpdateTopupGroupRatioByJSONString(value)
|
err = common.UpdateTopupGroupRatioByJSONString(value)
|
||||||
case "GitHubClientId":
|
case "GitHubClientId":
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ var StripeWebhookSecret = ""
|
|||||||
var StripePriceId = ""
|
var StripePriceId = ""
|
||||||
var StripeUnitPrice = 8.0
|
var StripeUnitPrice = 8.0
|
||||||
var StripeMinTopUp = 1
|
var StripeMinTopUp = 1
|
||||||
|
var StripePromotionCodesEnabled = false
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ const PaymentSetting = () => {
|
|||||||
StripePriceId: '',
|
StripePriceId: '',
|
||||||
StripeUnitPrice: 8.0,
|
StripeUnitPrice: 8.0,
|
||||||
StripeMinTopUp: 1,
|
StripeMinTopUp: 1,
|
||||||
|
StripePromotionCodesEnabled: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
let [loading, setLoading] = useState(false);
|
let [loading, setLoading] = useState(false);
|
||||||
|
|||||||
@@ -837,6 +837,7 @@
|
|||||||
"确定要充值 $": "Confirm to top up $",
|
"确定要充值 $": "Confirm to top up $",
|
||||||
"微信/支付宝 实付金额:": "WeChat/Alipay actual payment amount:",
|
"微信/支付宝 实付金额:": "WeChat/Alipay actual payment amount:",
|
||||||
"Stripe 实付金额:": "Stripe actual payment amount:",
|
"Stripe 实付金额:": "Stripe actual payment amount:",
|
||||||
|
"允许在 Stripe 支付中输入促销码": "Allow entering promotion codes during Stripe checkout",
|
||||||
"支付中...": "Paying",
|
"支付中...": "Paying",
|
||||||
"支付宝": "Alipay",
|
"支付宝": "Alipay",
|
||||||
"收益统计": "Income statistics",
|
"收益统计": "Income statistics",
|
||||||
|
|||||||
@@ -32,5 +32,6 @@
|
|||||||
"端口配置详细说明": "限制外部请求只能访问指定端口。支持单个端口(80, 443)或端口范围(8000-8999)。空列表允许所有端口。默认包含常用Web端口。",
|
"端口配置详细说明": "限制外部请求只能访问指定端口。支持单个端口(80, 443)或端口范围(8000-8999)。空列表允许所有端口。默认包含常用Web端口。",
|
||||||
"输入端口后回车,如:80 或 8000-8999": "输入端口后回车,如:80 或 8000-8999",
|
"输入端口后回车,如:80 或 8000-8999": "输入端口后回车,如:80 或 8000-8999",
|
||||||
"更新SSRF防护设置": "更新SSRF防护设置",
|
"更新SSRF防护设置": "更新SSRF防护设置",
|
||||||
"域名IP过滤详细说明": "⚠️此功能为实验性选项,域名可能解析到多个 IPv4/IPv6 地址,若开启,请确保 IP 过滤列表覆盖这些地址,否则可能导致访问失败。"
|
"域名IP过滤详细说明": "⚠️此功能为实验性选项,域名可能解析到多个 IPv4/IPv6 地址,若开启,请确保 IP 过滤列表覆盖这些地址,否则可能导致访问失败。",
|
||||||
|
"允许在 Stripe 支付中输入促销码": "允许在 Stripe 支付中输入促销码"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export default function SettingsPaymentGateway(props) {
|
|||||||
StripePriceId: '',
|
StripePriceId: '',
|
||||||
StripeUnitPrice: 8.0,
|
StripeUnitPrice: 8.0,
|
||||||
StripeMinTopUp: 1,
|
StripeMinTopUp: 1,
|
||||||
|
StripePromotionCodesEnabled: false,
|
||||||
});
|
});
|
||||||
const [originInputs, setOriginInputs] = useState({});
|
const [originInputs, setOriginInputs] = useState({});
|
||||||
const formApiRef = useRef(null);
|
const formApiRef = useRef(null);
|
||||||
@@ -63,6 +64,10 @@ export default function SettingsPaymentGateway(props) {
|
|||||||
props.options.StripeMinTopUp !== undefined
|
props.options.StripeMinTopUp !== undefined
|
||||||
? parseFloat(props.options.StripeMinTopUp)
|
? parseFloat(props.options.StripeMinTopUp)
|
||||||
: 1,
|
: 1,
|
||||||
|
StripePromotionCodesEnabled:
|
||||||
|
props.options.StripePromotionCodesEnabled !== undefined
|
||||||
|
? props.options.StripePromotionCodesEnabled
|
||||||
|
: false,
|
||||||
};
|
};
|
||||||
setInputs(currentInputs);
|
setInputs(currentInputs);
|
||||||
setOriginInputs({ ...currentInputs });
|
setOriginInputs({ ...currentInputs });
|
||||||
@@ -114,6 +119,16 @@ export default function SettingsPaymentGateway(props) {
|
|||||||
value: inputs.StripeMinTopUp.toString(),
|
value: inputs.StripeMinTopUp.toString(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
originInputs['StripePromotionCodesEnabled'] !==
|
||||||
|
inputs.StripePromotionCodesEnabled &&
|
||||||
|
inputs.StripePromotionCodesEnabled !== undefined
|
||||||
|
) {
|
||||||
|
options.push({
|
||||||
|
key: 'StripePromotionCodesEnabled',
|
||||||
|
value: inputs.StripePromotionCodesEnabled ? 'true' : 'false',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// 发送请求
|
// 发送请求
|
||||||
const requestQueue = options.map((opt) =>
|
const requestQueue = options.map((opt) =>
|
||||||
@@ -225,6 +240,15 @@ export default function SettingsPaymentGateway(props) {
|
|||||||
placeholder={t('例如:2,就是最低充值2$')}
|
placeholder={t('例如:2,就是最低充值2$')}
|
||||||
/>
|
/>
|
||||||
</Col>
|
</Col>
|
||||||
|
<Col xs={24} sm={24} md={8} lg={8} xl={8}>
|
||||||
|
<Form.Switch
|
||||||
|
field='StripePromotionCodesEnabled'
|
||||||
|
size='default'
|
||||||
|
checkedText='|'
|
||||||
|
uncheckedText='〇'
|
||||||
|
label={t('允许在 Stripe 支付中输入促销码')}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Button onClick={submitStripeSetting}>{t('更新 Stripe 设置')}</Button>
|
<Button onClick={submitStripeSetting}>{t('更新 Stripe 设置')}</Button>
|
||||||
</Form.Section>
|
</Form.Section>
|
||||||
|
|||||||
Reference in New Issue
Block a user