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

View File

@ -1,6 +1,7 @@
import { NextResponse } from 'next/server' import { NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase-server' import { createServerSupabaseClient } from '@/lib/supabase-server'
import { addCredit } from '@/lib/services/credit' import { addCredit } from '@/lib/services/credit'
import { prisma } from '@/lib/prisma'
export async function POST(request: Request) { export async function POST(request: Request) {
try { try {
@ -37,6 +38,23 @@ export async function POST(request: Request) {
// 开发环境:模拟充值成功 // 开发环境:模拟充值成功
console.log(`🧪 Development mode: Simulating top-up of $${amount} for user ${user.id}`) 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( const creditTransaction = await addCredit(
user.id, user.id,
amount, amount,

View File

@ -2,6 +2,7 @@ import { NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase-server' import { createServerSupabaseClient } from '@/lib/supabase-server'
import { stripe } from '@/lib/stripe' import { stripe } from '@/lib/stripe'
import { addCredit } from '@/lib/services/credit' import { addCredit } from '@/lib/services/credit'
import { prisma } from '@/lib/prisma'
export async function GET(request: Request) { export async function GET(request: Request) {
try { 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 const existingCredit = await prisma.credit.findFirst({
.from('credits') where: {
.select('id') referenceId: sessionId,
.eq('referenceId', sessionId) referenceType: 'stripe_payment'
.eq('referenceType', 'stripe_payment') }
.single() })
if (existingCredit) { if (existingCredit) {
// 已经处理过,直接返回成功 // 已经处理过,直接返回成功
@ -79,13 +97,13 @@ export async function GET(request: Request) {
) )
// 更新 credit 记录的 referenceId 和 referenceType // 更新 credit 记录的 referenceId 和 referenceType
await supabase await prisma.credit.update({
.from('credits') where: { id: creditTransaction.id },
.update({ data: {
referenceId: sessionId, referenceId: sessionId,
referenceType: 'stripe_payment' referenceType: 'stripe_payment'
}) }
.eq('id', creditTransaction.id) })
return NextResponse.json({ return NextResponse.json({
success: true, success: true,