fix topup

This commit is contained in:
songtianlun 2025-08-27 07:11:21 +08:00
parent 4eccc94a58
commit 78e435f60c
3 changed files with 68 additions and 21 deletions

View File

@ -1,6 +1,7 @@
import { NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase-server'
import { createOrGetStripeCustomer, createPaymentSession } from '@/lib/stripe'
import { prisma } from '@/lib/prisma'
export async function POST(request: Request) {
try {
@ -30,16 +31,26 @@ export async function POST(request: Request) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
// 获取用户信息
const { data: userData, error: userError } = await supabase
.from('users')
.select('email, username')
.eq('id', user.id)
.single()
if (userError || !userData) {
return NextResponse.json({ error: 'User not found' }, { status: 404 })
}
// 确保用户存在于数据库中,并获取用户信息
const userData = await prisma.user.upsert({
where: { id: user.id },
update: {
email: user.email || '',
updatedAt: new Date()
},
create: {
id: user.id,
email: user.email || '',
username: user.user_metadata?.username || null,
subscriptionPlanId: 'free',
createdAt: new Date(),
updatedAt: new Date()
},
select: {
email: true,
username: true
}
})
try {
// 创建或获取 Stripe 客户

View File

@ -1,6 +1,7 @@
import { NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase-server'
import { addCredit } from '@/lib/services/credit'
import { prisma } from '@/lib/prisma'
export async function POST(request: Request) {
try {
@ -37,6 +38,23 @@ export async function POST(request: Request) {
// 开发环境:模拟充值成功
console.log(`🧪 Development mode: Simulating top-up of $${amount} for user ${user.id}`)
// 确保用户存在于数据库中
await prisma.user.upsert({
where: { id: user.id },
update: {
email: user.email || '',
updatedAt: new Date()
},
create: {
id: user.id,
email: user.email || '',
username: user.user_metadata?.username || null,
subscriptionPlanId: 'free',
createdAt: new Date(),
updatedAt: new Date()
}
})
const creditTransaction = await addCredit(
user.id,
amount,

View File

@ -2,6 +2,7 @@ import { NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase-server'
import { stripe } from '@/lib/stripe'
import { addCredit } from '@/lib/services/credit'
import { prisma } from '@/lib/prisma'
export async function GET(request: Request) {
try {
@ -53,13 +54,30 @@ export async function GET(request: Request) {
)
}
// 确保用户存在于数据库中
await prisma.user.upsert({
where: { id: user.id },
update: {
email: user.email || '',
updatedAt: new Date()
},
create: {
id: user.id,
email: user.email || '',
username: user.user_metadata?.username || null,
subscriptionPlanId: 'free',
createdAt: new Date(),
updatedAt: new Date()
}
})
// 检查是否已经处理过这个支付会话
const { data: existingCredit } = await supabase
.from('credits')
.select('id')
.eq('referenceId', sessionId)
.eq('referenceType', 'stripe_payment')
.single()
const existingCredit = await prisma.credit.findFirst({
where: {
referenceId: sessionId,
referenceType: 'stripe_payment'
}
})
if (existingCredit) {
// 已经处理过,直接返回成功
@ -79,13 +97,13 @@ export async function GET(request: Request) {
)
// 更新 credit 记录的 referenceId 和 referenceType
await supabase
.from('credits')
.update({
await prisma.credit.update({
where: { id: creditTransaction.id },
data: {
referenceId: sessionId,
referenceType: 'stripe_payment'
})
.eq('id', creditTransaction.id)
}
})
return NextResponse.json({
success: true,