I am working in nextjs. Have tried to use this library & tried using directly using your code inline inside api folder but somehow computerHmac is always different.
import { createHmac } from 'crypto';
import { NextResponse } from 'next/server';
// import { parseWebhookBody } from "paddle-billing/webhooks";
export async function POST(request) {
const secret = process.env.PADDLE_WEBHOOK_SECRET;
const signature = request.headers.get('paddle-signature');
if (!signature || typeof signature !== 'string') {
return NextResponse.JSON({ error: 'No signature' }, { status: 401 });
}
// parse the webhook
const webhookData = request.body;
console.log(`webhookData: ${JSON.stringify(webhookData)}`);
const webhook = parseWebhookBody(null, secret, signature, await request.body.toString());
console.log(`\nparsed webhook: ${JSON.stringify(webhook)}`);
if (!webhook) {
return NextResponse.json({ error: 'Bad Request' }, { status: 400 });
}
return NextResponse.json({ response: 'OK from Semantic Pen' }, { status: 200 });
}
export function parseWebhookBody(_client, secret, signature, body) {
const captures = signature.match(/^ts=(\d+);h1=(.+)$/);
console.log(`captures: ${captures}`);
if (!captures) return null;
const [_, ts, h1] = captures;
const computedHmac = createHmac("sha256", secret)
.update(ts + ":" + body)
.digest("hex");
if (computedHmac === h1) return JSON.parse(body);
console.log(`computedHmac: ${computedHmac}`);
return null;
}
I am working in nextjs. Have tried to use this library & tried using directly using your code inline inside api folder but somehow computerHmac is always different.