route.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { NextRequest, NextResponse } from 'next/server';
  2. // 다날 successUrl 핸들러
  3. // PC: POST (form body), 모바일: GET (query string)
  4. export async function GET(request: NextRequest) {
  5. const params = request.nextUrl.searchParams;
  6. const orderId = params.get('orderId') || '';
  7. const transactionId = params.get('transactionId') || '';
  8. const method = params.get('method') || '';
  9. const url = new URL('/charge/success', request.url);
  10. url.searchParams.set('orderId', orderId);
  11. url.searchParams.set('transactionId', transactionId);
  12. url.searchParams.set('method', method);
  13. return NextResponse.redirect(url);
  14. }
  15. export async function POST(request: NextRequest) {
  16. // form-urlencoded 또는 JSON body 파싱
  17. const contentType = request.headers.get('content-type') || '';
  18. let orderId = '';
  19. let transactionId = '';
  20. let method = '';
  21. if (contentType.includes('application/x-www-form-urlencoded')) {
  22. const formData = await request.formData();
  23. orderId = (formData.get('orderId') as string) || '';
  24. transactionId = (formData.get('transactionId') as string) || '';
  25. method = (formData.get('method') as string) || '';
  26. } else {
  27. try {
  28. const json = await request.json();
  29. orderId = json.orderId || '';
  30. transactionId = json.transactionId || '';
  31. method = json.method || '';
  32. } catch {
  33. // fallback: query string
  34. orderId = request.nextUrl.searchParams.get('orderId') || '';
  35. transactionId = request.nextUrl.searchParams.get('transactionId') || '';
  36. method = request.nextUrl.searchParams.get('method') || '';
  37. }
  38. }
  39. const url = new URL('/charge/success', request.url);
  40. url.searchParams.set('orderId', orderId);
  41. url.searchParams.set('transactionId', transactionId);
  42. url.searchParams.set('method', method);
  43. return NextResponse.redirect(url);
  44. }