feat: add Jupiter and Donut payment provider support

- METHOD_LABELS entries for jupiter and donut
- Custom SVG icons: Jupiter (planet with ring), Donut (glazed donut)
- Admin settings tree nodes: payments_jupiter, payments_donut
- Locale strings (ru/en/zh/fa) for descriptions and admin labels
This commit is contained in:
Fringg
2026-05-04 19:36:35 +03:00
parent 60c835301d
commit 7def84718b
7 changed files with 125 additions and 0 deletions

View File

@@ -335,6 +335,95 @@ export default function PaymentMethodIcon({
); );
} }
case 'jupiter': {
const jupiterGradId = `${uid}-jupiter`;
const jupiterRingId = `${uid}-jupiter-ring`;
return (
<svg className={className} viewBox="0 0 40 40">
<defs>
<linearGradient id={jupiterGradId} x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stopColor="#7c3aed" />
<stop offset="55%" stopColor="#6366f1" />
<stop offset="100%" stopColor="#0ea5e9" />
</linearGradient>
<linearGradient id={jupiterRingId} x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stopColor="#fde68a" stopOpacity="0.9" />
<stop offset="100%" stopColor="#fde68a" stopOpacity="0.45" />
</linearGradient>
</defs>
<circle cx="20" cy="20" r="20" fill={`url(#${jupiterGradId})`} />
<ellipse
cx="20"
cy="22"
rx="15"
ry="3.4"
fill="none"
stroke={`url(#${jupiterRingId})`}
strokeWidth="2"
transform="rotate(-18 20 22)"
/>
<circle cx="20" cy="20" r="6.5" fill="#fde68a" opacity="0.95" />
</svg>
);
}
case 'donut': {
const donutBgGradId = `${uid}-donut-bg`;
const donutGlazeGradId = `${uid}-donut-glaze`;
return (
<svg className={className} viewBox="0 0 40 40">
<defs>
<linearGradient id={donutBgGradId} x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stopColor="#fdf2f8" />
<stop offset="100%" stopColor="#fbcfe8" />
</linearGradient>
<radialGradient id={donutGlazeGradId} cx="50%" cy="40%" r="60%">
<stop offset="0%" stopColor="#fb7185" />
<stop offset="60%" stopColor="#ec4899" />
<stop offset="100%" stopColor="#be185d" />
</radialGradient>
</defs>
<circle cx="20" cy="20" r="20" fill={`url(#${donutBgGradId})`} />
<circle cx="20" cy="20" r="13" fill={`url(#${donutGlazeGradId})`} />
<circle cx="20" cy="20" r="4.5" fill="#fdf2f8" />
<g fill="#fde68a">
<rect
x="13.5"
y="11"
width="2.5"
height="1"
rx="0.5"
transform="rotate(-30 14.75 11.5)"
/>
<rect x="22" y="13" width="2.5" height="1" rx="0.5" transform="rotate(20 23.25 13.5)" />
<rect
x="26"
y="20"
width="2.5"
height="1"
rx="0.5"
transform="rotate(-15 27.25 20.5)"
/>
</g>
<g fill="#a7f3d0">
<rect x="11" y="22" width="2.5" height="1" rx="0.5" transform="rotate(40 12.25 22.5)" />
<rect
x="20"
y="26"
width="2.5"
height="1"
rx="0.5"
transform="rotate(-30 21.25 26.5)"
/>
</g>
<g fill="#bfdbfe">
<rect x="16" y="27" width="2.5" height="1" rx="0.5" transform="rotate(15 17.25 27.5)" />
<rect x="24" y="9" width="2.5" height="1" rx="0.5" transform="rotate(-25 25.25 9.5)" />
</g>
</svg>
);
}
case 'apple_iap': case 'apple_iap':
return ( return (
<svg className={className} viewBox="0 0 40 40"> <svg className={className} viewBox="0 0 40 40">

View File

@@ -57,6 +57,8 @@ export const SETTINGS_TREE: SettingsTreeConfig = {
{ id: 'payments_aurapay', categories: ['AURAPAY'] }, { id: 'payments_aurapay', categories: ['AURAPAY'] },
{ id: 'payments_etoplatezhi', categories: ['ETOPLATEZHI'] }, { id: 'payments_etoplatezhi', categories: ['ETOPLATEZHI'] },
{ id: 'payments_antilopay', categories: ['ANTILOPAY'] }, { id: 'payments_antilopay', categories: ['ANTILOPAY'] },
{ id: 'payments_jupiter', categories: ['JUPITER'] },
{ id: 'payments_donut', categories: ['DONUT'] },
{ id: 'payments_apple_iap', categories: ['APPLE_IAP'] }, { id: 'payments_apple_iap', categories: ['APPLE_IAP'] },
], ],
}, },

View File

@@ -20,6 +20,8 @@ export const METHOD_LABELS: Record<string, string> = {
aurapay: 'AuraPay', aurapay: 'AuraPay',
etoplatezhi: 'Etoplatezhi', etoplatezhi: 'Etoplatezhi',
antilopay: 'Antilopay', antilopay: 'Antilopay',
jupiter: 'Jupiter',
donut: 'Donut',
apple_iap: 'Apple In-App Purchase', apple_iap: 'Apple In-App Purchase',
manual: 'Ручное пополнение', manual: 'Ручное пополнение',
}; };

View File

@@ -688,6 +688,12 @@
"antilopay": { "antilopay": {
"description": "Pay via Antilopay" "description": "Pay via Antilopay"
}, },
"jupiter": {
"description": "Pay via SBP through Jupiter (FPGate P2P)"
},
"donut": {
"description": "Pay by card or SBP through Donut P2P"
},
"apple_iap": { "apple_iap": {
"description": "Pay via Apple In-App Purchase" "description": "Pay via Apple In-App Purchase"
} }
@@ -2014,6 +2020,8 @@
"payments_aurapay": "AuraPay", "payments_aurapay": "AuraPay",
"payments_etoplatezhi": "Etoplatezhi", "payments_etoplatezhi": "Etoplatezhi",
"payments_antilopay": "Antilopay", "payments_antilopay": "Antilopay",
"payments_jupiter": "Jupiter",
"payments_donut": "Donut",
"payments_apple_iap": "Apple IAP", "payments_apple_iap": "Apple IAP",
"subs_core": "Core", "subs_core": "Core",
"subs_trial": "Trial", "subs_trial": "Trial",

View File

@@ -525,6 +525,12 @@
"antilopay": { "antilopay": {
"description": "پرداخت از طریق Antilopay" "description": "پرداخت از طریق Antilopay"
}, },
"jupiter": {
"description": "پرداخت SBP از طریق Jupiter (FPGate P2P)"
},
"donut": {
"description": "پرداخت با کارت یا SBP از طریق Donut P2P"
},
"apple_iap": { "apple_iap": {
"description": "پرداخت از طریق Apple In-App Purchase" "description": "پرداخت از طریق Apple In-App Purchase"
} }
@@ -1654,6 +1660,8 @@
"payments_aurapay": "AuraPay", "payments_aurapay": "AuraPay",
"payments_etoplatezhi": "Etoplatezhi", "payments_etoplatezhi": "Etoplatezhi",
"payments_antilopay": "Antilopay", "payments_antilopay": "Antilopay",
"payments_jupiter": "Jupiter",
"payments_donut": "Donut",
"payments_apple_iap": "Apple IAP", "payments_apple_iap": "Apple IAP",
"subs_core": "هسته", "subs_core": "هسته",
"subs_trial": "آزمایشی", "subs_trial": "آزمایشی",

View File

@@ -716,6 +716,12 @@
"antilopay": { "antilopay": {
"description": "Оплата через Antilopay" "description": "Оплата через Antilopay"
}, },
"jupiter": {
"description": "Оплата СБП через Jupiter (FPGate P2P)"
},
"donut": {
"description": "Оплата картой и СБП через Donut P2P"
},
"apple_iap": { "apple_iap": {
"description": "Оплата через Apple In-App Purchase" "description": "Оплата через Apple In-App Purchase"
} }
@@ -2030,6 +2036,8 @@
"payments_aurapay": "AuraPay", "payments_aurapay": "AuraPay",
"payments_etoplatezhi": "Etoplatezhi", "payments_etoplatezhi": "Etoplatezhi",
"payments_antilopay": "Antilopay", "payments_antilopay": "Antilopay",
"payments_jupiter": "Jupiter",
"payments_donut": "Donut",
"payments_apple_iap": "Apple IAP", "payments_apple_iap": "Apple IAP",
"subs_core": "Основные", "subs_core": "Основные",
"subs_trial": "Пробный период", "subs_trial": "Пробный период",

View File

@@ -525,6 +525,12 @@
"antilopay": { "antilopay": {
"description": "通过Antilopay支付" "description": "通过Antilopay支付"
}, },
"jupiter": {
"description": "通过 Jupiter (FPGate P2P) 使用 SBP 支付"
},
"donut": {
"description": "通过 Donut P2P 使用银行卡或 SBP 支付"
},
"apple_iap": { "apple_iap": {
"description": "通过Apple应用内购买支付" "description": "通过Apple应用内购买支付"
} }
@@ -1692,6 +1698,8 @@
"payments_aurapay": "AuraPay", "payments_aurapay": "AuraPay",
"payments_etoplatezhi": "Etoplatezhi", "payments_etoplatezhi": "Etoplatezhi",
"payments_antilopay": "Antilopay", "payments_antilopay": "Antilopay",
"payments_jupiter": "Jupiter",
"payments_donut": "Donut",
"payments_apple_iap": "Apple IAP", "payments_apple_iap": "Apple IAP",
"subs_core": "核心", "subs_core": "核心",
"subs_trial": "试用", "subs_trial": "试用",