feat: add Cryptomus payment service toggle

- Added CRYPTOMUS_ENABLED environment variable to control payment service availability
- Created status endpoint to check service availability from frontend
- Updated Header to conditionally show support button based on service status
This commit is contained in:
Yusuf İpek
2025-11-17 18:33:19 +03:00
parent 9123dbb4c0
commit 9c38be3a88
3 changed files with 48 additions and 13 deletions
@@ -3,6 +3,7 @@ import { NextRequest, NextResponse } from 'next/server'
const CRYPTOMUS_API_URL = 'https://api.cryptomus.com/v1/payment'
const MERCHANT_ID = process.env.CRYPTOMUS_MERCHANT_ID || ''
const PAYMENT_API_KEY = process.env.CRYPTOMUS_PAYMENT_API_KEY || ''
const CRYPTOMUS_ENABLED = process.env.CRYPTOMUS_ENABLED !== 'false'
interface PaymentRequest {
amount: number
@@ -35,6 +36,13 @@ function generateSign(data: any, apiKey: string): string {
export async function POST(request: NextRequest) {
try {
if (!CRYPTOMUS_ENABLED) {
return NextResponse.json(
{ error: 'Payment service is temporarily disabled' },
{ status: 503 }
)
}
if (!MERCHANT_ID || !PAYMENT_API_KEY) {
return NextResponse.json(
{ error: 'Payment service not configured' },
+9
View File
@@ -0,0 +1,9 @@
import { NextResponse } from 'next/server'
const CRYPTOMUS_ENABLED = process.env.CRYPTOMUS_ENABLED !== 'false'
export async function GET() {
return NextResponse.json({
cryptomus_enabled: CRYPTOMUS_ENABLED
})
}
+31 -13
View File
@@ -1,6 +1,6 @@
"use client"
import { useState } from 'react'
import { useState, useEffect } from 'react'
import { Button } from '@/components/ui/button'
import { useTheme } from '@/hooks/useTheme'
import { useLocale } from '@/contexts/LocaleContext'
@@ -11,6 +11,22 @@ export function Header() {
const { theme, isDark, toggleTheme } = useTheme()
const { locale, toggleLocale, t } = useLocale()
const [isSupportModalOpen, setIsSupportModalOpen] = useState(false)
const [cryptomusEnabled, setCryptomusEnabled] = useState(true)
useEffect(() => {
const checkCryptomusStatus = async () => {
try {
const response = await fetch('/api/support/status')
const data = await response.json()
setCryptomusEnabled(data.cryptomus_enabled)
} catch (error) {
// Default to enabled if check fails
setCryptomusEnabled(true)
}
}
checkCryptomusStatus()
}, [])
const getThemeIcon = () => {
switch (theme) {
@@ -48,18 +64,20 @@ export function Header() {
</div>
<div className="flex items-center space-x-2">
{/* Support Button */}
<Button
variant="ghost"
size="sm"
onClick={() => setIsSupportModalOpen(true)}
className="w-full justify-start text-red-600 hover:text-red-700 hover:bg-red-50 dark:hover:bg-red-950/20"
>
<Heart className="h-4 w-4" />
<span className="ml-2 hidden sm:inline">
{t('support.title')}
</span>
</Button>
{/* Support Button - Only show when Cryptomus is enabled */}
{cryptomusEnabled && (
<Button
variant="ghost"
size="sm"
onClick={() => setIsSupportModalOpen(true)}
className="w-full justify-start text-red-600 hover:text-red-700 hover:bg-red-50 dark:hover:bg-red-950/20"
>
<Heart className="h-4 w-4" />
<span className="ml-2 hidden sm:inline">
{t('support.title')}
</span>
</Button>
)}
{/* Theme Toggle */}
<Button