route.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { NextRequest, NextResponse } from 'next/server';
  2. // 다날 failUrl 핸들러
  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 errorCode = params.get('errorCode') || params.get('code') || '';
  8. const errorMessage = params.get('errorMessage') || params.get('message') || '';
  9. const url = new URL('/charge/fail', request.url);
  10. url.searchParams.set('orderId', orderId);
  11. url.searchParams.set('errorCode', errorCode);
  12. url.searchParams.set('errorMessage', errorMessage);
  13. return NextResponse.redirect(url);
  14. }
  15. export async function POST(request: NextRequest) {
  16. const contentType = request.headers.get('content-type') || '';
  17. let orderId = '';
  18. let errorCode = '';
  19. let errorMessage = '';
  20. if (contentType.includes('application/x-www-form-urlencoded')) {
  21. const formData = await request.formData();
  22. orderId = (formData.get('orderId') as string) || '';
  23. errorCode = (formData.get('errorCode') as string) || (formData.get('code') as string) || '';
  24. errorMessage = (formData.get('errorMessage') as string) || (formData.get('message') as string) || '';
  25. } else {
  26. try {
  27. const json = await request.json();
  28. orderId = json.orderId || '';
  29. errorCode = json.errorCode || json.code || '';
  30. errorMessage = json.errorMessage || json.message || '';
  31. } catch {
  32. orderId = request.nextUrl.searchParams.get('orderId') || '';
  33. }
  34. }
  35. const url = new URL('/charge/fail', request.url);
  36. url.searchParams.set('orderId', orderId);
  37. url.searchParams.set('errorCode', errorCode);
  38. url.searchParams.set('errorMessage', errorMessage);
  39. return NextResponse.redirect(url);
  40. }