Skip to content

Paddle Webhook Signature validation always shows invalid  #7

Description

@pushkarsingh32

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;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions