Files
Pay2Gateway/app/api/transactions/[id]/details/route.ts

54 lines
1.7 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { db } from '@/lib/db';
export async function GET(
req: NextRequest,
context: { params: Promise<{ id: string }> }
) {
try {
const { id } = await context.params;
if (!id) {
return NextResponse.json({ error: 'Missing session ID' }, { status: 400 });
}
const result = await db.query(`
SELECT t.*, m.name as merchant_name
FROM transactions t
JOIN merchants m ON t.merchant_id = m.id
WHERE t.id = $1
LIMIT 1
`, [id]);
if (result.rows.length === 0) {
return NextResponse.json({ error: 'Transaction not found' }, { status: 404 });
}
const tx = result.rows[0];
const metadata = tx.metadata || {};
return NextResponse.json({
id: tx.id,
amount: Number(tx.amount),
currency: tx.currency,
status: tx.status,
customer_name: tx.customer_name,
ref_id: tx.source_ref_id,
merchant_name: tx.merchant_name,
callback_url: tx.callback_url,
// Only expose public wallet addresses, not private keys
wallets: metadata.wallets ? {
EVM: metadata.wallets.EVM?.address,
SOLANA: metadata.wallets.SOLANA?.address
} : null,
clientSecret: tx.stripe_pi_id, // For Stripe/Mock
nextAction: metadata.nextAction || 'none',
redirectUrl: metadata.redirectUrl || '',
provider: tx.provider
});
} catch (error: any) {
return NextResponse.json({ error: error.message }, { status: 500 });
}
}