PayPing Flow

Stripe → Hash automation

Webhooks enabled · Stripe signatures verified

Post every successful Stripe payment to Hash.

This workflow receives Stripe webhooks through window.genmb.webhooks.handler, verifies the signature before acting, extracts the customer name and amount, then posts a clear Hash message for your revenue channel.

Stripe event

Maya Chen paid $284.00

payment_intent.succeeded · 2026-06-10 14:32 UTC

Hash message to #payments

Stripe payment received

Customer: Maya Chen

Amount: $284.00

Receipt: rcpt_acme_studio_4821

Workflow setup

Configure the verified Stripe trigger and Hash destination

Point Stripe at the generated function endpoint. The production handler uses GenMB Webhooks to verify the Stripe signature before posting to Hash.

1. Stripe trigger

Signature-verified payment success event

payment_intent.succeeded
Verification SDK: window.genmb.webhooks.handler('stripe', request, fn)

2. Message fields

Customer and amount

Customerbilling_details.name
Amountamount_received
Currencycurrency

3. Hash destination

Channel and webhook

Webhook endpoint

Connect Stripe to GenMB Webhooks

https://payping-flow-a33r.genmb.com/api/fn/stripe-payment-webhook?__appId=cApRhM7xEnnW

In production, add SLACK_WEBHOOK_URL as an environment variable. Stripe signatures are verified by the GenMB Webhooks SDK before the Hash request is sent.

Verified deliveries

Incoming Stripe events

SDK ready

No verified deliveries yet

Once Stripe sends a signed payment webhook to the endpoint, the function verifies it and posts the customer name and amount to Hash.

Generated Hash payload

Review before connecting production

{
  "channel": "#payments",
  "text": "New Stripe payment received: Maya Chen paid $284.00. Receipt rcpt_acme_studio_4821.",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "Stripe payment received"
      }
    },
    {
      "type": "section",
      "fields": [
        {
          "type": "mrkdwn",
          "text": "*Customer*\nMaya Chen"
        },
        {
          "type": "mrkdwn",
          "text": "*Amount*\n$284.00"
        },
        {
          "type": "mrkdwn",
          "text": "*Event*\npayment_intent.succeeded"
        },
        {
          "type": "mrkdwn",
          "text": "*Receipt*\nrcpt_acme_studio_4821"
        }
      ]
    }
  ]
}

Function handler

Webhook SDK integration

export async function POST(request) {
  return window.genmb.webhooks.handler('stripe', request, async ({ event }) => {
    if (event.type === 'payment_intent.succeeded') {
      const payment = event.data.object;
      const customer = payment.billing_details?.name || payment.metadata?.customer_name || 'Unknown customer';
      const amount = new Intl.NumberFormat('en-US', { style: 'currency', currency: payment.currency.toUpperCase() }).format(payment.amount_received / 100);
      await fetch(globalThis.SLACK_WEBHOOK_URL, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ text: `New Stripe payment received: ${customer} paid ${amount}.` })
      });
    }
    return Response.json({ ok: true });
  });
}
Built with GenMB
Built with GenMB