Production Verification Snippets
Copy-paste production verification logic in TypeScript, Next.js, and Python.
1. TypeScript / Node.js (via @ownpay/sdk)
import { OwnPayWebhook } from '@ownpay/sdk';
app.post('/api/webhooks', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-ownpay-signature'];
const timestamp = req.headers['x-ownpay-timestamp'];
const rawBody = req.body.toString('utf8');
const isValid = OwnPayWebhook.verifySignature(rawBody, signature, timestamp, process.env.OWNPAY_WEBHOOK_SECRET);
if (!isValid) return res.status(401).send('Invalid signature');
const event = JSON.parse(rawBody);
console.log(`Fulfilling order: ${event.data.order_id}`);
res.json({ received: true });
});
2. Next.js 14/15 App Router (via @ownpay/adapters)
import { createOwnPayNextWebhookHandler } from '@ownpay/adapters/next';
export const POST = createOwnPayNextWebhookHandler({
webhookSecret: process.env.OWNPAY_WEBHOOK_SECRET!,
onEvent: async (event) => {
if (event.event === 'intent.settled') {
// Automatic Base USDC settlement confirmed!
await fulfillOrder(event.data.order_id, event.data.tx_hash);
}
}
});