Created
January 31, 2012 01:45
-
-
Save boucher/1708172 to your computer and use it in GitHub Desktop.
Stripe Webhook PHP Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// SETUP: | |
// 1. Customize all the settings (stripe api key, email settings, email text) | |
// 2. Put this code somewhere where it's accessible by a URL on your server. | |
// 3. Add the URL of that location to the settings at https://manage.stripe.com/#account/webhooks | |
// 4. Have fun! | |
// set your secret key: remember to change this to your live secret key in production | |
// see your keys here https://manage.stripe.com/account | |
Stripe::setApiKey("YOUR STRIPE SECREY KEY"); | |
// retrieve the request's body and parse it as JSON | |
$body = @file_get_contents('php://input'); | |
$event_json = json_decode($body); | |
// for extra security, retrieve from the Stripe API | |
$event_id = $event_json->id; | |
$event = Stripe_Event::retrieve($event_id); | |
// This will send receipts on succesful invoices | |
if $event->type == 'invoice.payment_succeeded' { | |
email_invoice_receipt(event->data->object); | |
} | |
function email_invoice_receipt($invoice) { | |
$customer = Stripe_Customer::retrieve($invoice->customer); | |
//Make sure to customize your from address | |
$subject = 'Your payment has been received'; | |
$headers = 'From: "MyApp Support" <[email protected]>'; | |
mail($customer->email, $subject, message_body(), $headers); | |
} | |
function format_stripe_amount($amount) { | |
return sprintf('$%0.2f', $amount / 100.0); | |
} | |
function format_stripe_timestamp($timestamp) { | |
return strftime("%m/%d/%Y", $timestamp); | |
} | |
function payment_received_body($invoice, $customer) { | |
$subscription = $invoice->lines->subscriptions[0]; | |
return <<'EOF' | |
Dear {$customer->email}: | |
This is a receipt for your subscription. This is only a receipt, | |
no payment is due. Thanks for your continued support! | |
------------------------------------------------- | |
SUBSCRIPTION RECEIPT | |
Email: {$customer->email} | |
Plan: {$subscription->plan->name} | |
Amount: {format_stripe_amount($invoice->total)} (USD) | |
For service between {format_stripe_timestamp($subscription->period->start)} and {format_stripe_timestamp($subscription->period->end)} | |
------------------------------------------------- | |
EOF; | |
} | |
?> |
This is pretty dated at this point, so I'm going to plug my own repo to help anyone looking for something like this. Basically a boilerplate for all stripe webhook events, with built in email, text, and database logging options. Handles verification of incoming events, as well as duplicate event receipt(in the event that Stripe sends a duplicate).
--added support for payouts
--added support for signature verification
There is a dollar symbol missing before the word 'event' at line https://gist.github.com/boucher/1708172#file-webhook-mailer-php-L23
There's a typo on line #23 event should be $event
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
this seems outdated.