import { NextRequest, NextResponse } from 'next/server'; import { z } from 'zod'; import { createOrder, OrderError } from '@/lib/order/service'; import { getEnv } from '@/lib/config'; const createOrderSchema = z.object({ user_id: z.number().int().positive(), amount: z.number().positive(), payment_type: z.enum(['alipay', 'wxpay']), }); export async function POST(request: NextRequest) { try { const env = getEnv(); const body = await request.json(); const parsed = createOrderSchema.safeParse(body); if (!parsed.success) { return NextResponse.json( { error: '参数错误', details: parsed.error.flatten().fieldErrors }, { status: 400 }, ); } const { user_id, amount, payment_type } = parsed.data; // Validate amount range if (amount < env.MIN_RECHARGE_AMOUNT || amount > env.MAX_RECHARGE_AMOUNT) { return NextResponse.json( { error: `充值金额需在 ${env.MIN_RECHARGE_AMOUNT} - ${env.MAX_RECHARGE_AMOUNT} 之间` }, { status: 400 }, ); } // Validate payment type is enabled if (!env.ENABLED_PAYMENT_TYPES.includes(payment_type)) { return NextResponse.json( { error: `不支持的支付方式: ${payment_type}` }, { status: 400 }, ); } const clientIp = request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() || request.headers.get('x-real-ip') || '127.0.0.1'; const result = await createOrder({ userId: user_id, amount, paymentType: payment_type, clientIp, }); return NextResponse.json(result); } catch (error) { if (error instanceof OrderError) { return NextResponse.json( { error: error.message, code: error.code }, { status: error.statusCode }, ); } console.error('Create order error:', error); return NextResponse.json( { error: '创建订单失败,请稍后重试' }, { status: 500 }, ); } }