Skip to content
wp-full-pay

Unlimited transactions, no fees – accept Stripe payments with WP Full Pay Pro and pay zero plugin fees on unlimited transactions.

See Pro Plans →

Setting up webhooks

Learn how to set up webhooks for WP Full Pay.

Table of contents:

Why do you need webhooks?

A webhook is a mechanism that allows one system or application to send real-time data to another system or application when a specific event occurs.

There is a one-way communication between WP Full Pay and Stripe by default; the plugin sends requests to Stripe via the Stripe API.

Stripe webhooks make it possible to send messages in the other direction, so Stripe can notify the plugin when certain events occur.

While WP Full Pay is functional without webhooks, webhooks are required to use the plugin to its full potential.

Which WP Full Pay features require webhooks?

For working properly, the following features require webhooks:

  • Payment in installments - type subscription plans

  • Synchronizing charge status from Stripe to the plugin

    (For example, you made a refund in Stripe, not in WP admin)

How to set up webhooks?

Setup procedure in a nutshell

  1. Write down the Stripe webhook URL of the plugin on the Full Pay → Settings → Stripe account page in WP admin.
  2. Go to the Developers / Webhooks page on the Stripe dashboard.
  3. Press the “Add endpoint” button, and fill in the form as follows:
    • Endpoint URL: Paste the webhook URL of the plugin
    • Select events to listen to: Select the following events:
      • charge.captured
      • charge.expired
      • charge.failed
      • charge.pending
      • charge.refunded
      • charge.updated
      • charge.succeeded
      • customer.subscription.deleted
      • invoice.created
      • invoice.payment_succeeded
  4. Switch to live mode
  5. Repeat step 3) in live mode

Setup procedure with screenshots

1. Write down the Stripe webhook URL you can find on the Full Pay Settings Stripe account page

WP Full Pay  - Copy webhooks URL

2. Go to the Developers Webhooks page on the Stripe dashboard, and press the Add endpoint button

Stripe dashboard  - Add webhook endpoint

3. Configure the endpoint URL, and press the “Select events” button

Stripe dashboard  - Configure endpoint

4. Search/check the required events, and press the “Add events” button

Stripe dashboard  - Add webhook events

When the events are added, press the “Add endpoint” button as well.

Make sure that only one webhook endpoint is set up per API mode (one for test, and one for live).

5. Switch to live mode

Switch to live mode by pressing the “Test mode” toggle in the top-tight corner:

Stripe dashboard  - Switch to live mode

6. Configure webhooks in live mode

Repeat steps 2), 3), and 4) in live mode.

Verifying webhooks on the Stripe dashboard

Stripe removed webhook testing temporarily

You can test your webhook configuration by making a test payment .

You can test your webhook setup by sending a test webhook event to the plugin.

Follow these steps:

  1. Go to the Developers / Webhooks page on the Stripe dashboard, and select the webhook you’d like to test.
  2. Press the “Send test event” button.
  3. Select an event (any event will do), and press the “Send test webhook” button.
  4. Verify in Stripe that sending the event was successful.
  5. Verify in the plugin that receiving the event was successful.

Lets see the test procedure with screenshots:

1. Go to the Developers / Webhooks page on the Stripe dashboard, and select the webhook you’d like to test

Stripe dashboard  - Select the webhook to test

2-3. Press the “Send test event” button, and send a test webhook

Stripe dashboard  - Send a test webhook

4. Verify that sending the event was successful

Stripe dashboard  - Webhook event sent successfully

Verifying webhooks in WP Full Pay

The final step to check the webhook endpoint status in the plugin on the Full Pay → Settings → Stripe account page in WP admin.

If the webhook endpoint is configured properly, then you’ll see a green status indicator, and the time the last event was sent:

Stripe dashboard  - Webhook event received successfully

If the webhook endpoint is not configured properly, then you’ll see a grey status indicator:

Stripe dashboard  - Webhook event not received

Troubleshooting

You’ll find the most common errors with possible solutions in this section.

Webhook sent successfully but response is not empty

You are sending a test webhook from the Stripe dashboard.

Stripe says that “Test webhook sent successfully” but the response is not empty.

This usually means that there is a security plugin blocking the /wp-admin/admin-post.php URL.

Enable this URL for external callers, or add an exception so that the security plugin doesn’t block this URL.

Test webhook error: 503. Lookup <your_host>: no such host

This happens when are trying to send a webhook to local test environment, or there are issues with the DNS entries of <your_host>.

Verify your DNS settings, or use a globally accessible domain name for your test site - consider DynDNS or similar.

Test webhook error: 401

It means that the webhook endpoint rejected the webhook request.

It usually happens when the authentication token is not valid anymore. Compare the webhook URL in Stripe and in the plugin.

Test webhook error: 404

It means the webhook URL doesn’t exist.

Maybe a few characters of the URL were left off, consider copying and pasting the webhook URL to Stripe again.

List common Stripe webhook events provided

EventDescription
charge.succeededa payment was successfully processed
invoice.payment_faileda payment for an invoice failed
customer.subscription.createda customer subscribed to a plan
customer.subscription.updateda subscription was updated
customer.subscription.deletedsubscription was canceled
dispute.createda dispute was created for a charge
payout.createda payout to your bank account was initiated
checkout.session.completedThis event is sent when a customer successfully completes the checkout process and the payment is confirmed
checkout.session.async_payment_failedIndicates that a payment attempt for a Checkout Session has failed
checkout.session.async_payment_succeededIndicates that a payment attempt for a Checkout Session has succeeded.
checkout.session.completedIndicates that a customer has successfully completed the Checkout process.
customer.subscription.createdSent when a new subscription is created for a customer.
customer.subscription.updatedSent when a subscription is updated, such as changing the subscription plan or quantity.
customer.subscription.deletedSent when a subscription is canceled or expires.
invoice.createdSent when a new invoice is created for a subscription.
invoice.payment_failedSent when a payment for an invoice fails.
invoice.payment_succeededSent when a payment for an invoice succeeds.
invoice.updatedSent when an invoice is updated, such as when a subscription change triggers a proration.
subscription_schedule.updatedSent when changes are made to a subscription schedule, such as adding or removing phases.
account.updatedSent when an account's properties are updated
account.application.deauthorizedSent when an account removes an application from the connected applications in their dashboard.
balance.availableSent when the available balance is updated.
charge.capturedSent when a charge is captured.
charge.failedSent when a charge attempt fails.
charge.refundedSent when a charge is refunded.
charge.succeededSent when a charge is successful.
checkout.session.completedSent when a Checkout Session has been successfully completed.
customer.createdSent when a new customer is created.
customer.deletedSent when a customer is deleted.
customer.updatedSent when a customer's properties are updated.
invoice.createdSent when a new invoice is created.
invoice.finalizedSent when an invoice is finalized.
invoice.payment_failedSent when an invoice payment attempt fails.
invoice.payment_succeededSent when an invoice payment is successful.
invoice.updatedSent when an invoice is updated.
payment_intent.createdSent when a new PaymentIntent is created.
payment_intent.succeededSent when a PaymentIntent transitions to succeeded.
payment_intent.payment_failedSent when a PaymentIntent transitions to failed.
payout.paidSent when a payout is successfully sent to the bank.
payout.failedSent when a payout fails.
plan.createdSent when a new plan is created.
plan.deletedSent when a plan is deleted.
plan.updatedSent when a plan is updated.
subscription_schedule.createdSent when a new subscription schedule is created.
subscription_schedule.updatedSent when a subscription schedule is updated.
subscription_schedule.canceledSent when a subscription schedule is canceled.