trailpack-stripe
v2.0.0
Published
Stripe API Trailpack for Trails
Downloads
36
Maintainers
Readme
trailpack-stripe
Stripe API Trailpack for Trails
Handles and validates Stripe Webhooks.
It checks the time the webhooks were received and keeps the DB in sync by adding a lastStripeEvent
attribute to each event.
Optionally, it can perform Round Trip
validation of every Stripe webhook that hits the endpoint.
Stores Stripe event models with lifecyle handler for after a Stripe event occurs.
Makes call via Stripe API using a Stripe Service.
Supported ORMs
| Repo | Build Status (edge) | |---------------|---------------------------------------| | trailpack-waterline | | | trailpack-sequelize | | | trailpack-js-data | |
Don't see your ORM here? Make a PR!
Why Store Models from Stripe?
Stripe has a great API, but performing complex queries through it are not really possible. By storing events and models from Stripe, you get the ability to do complex queries and analytics. This also allows you to interact qucikly with an entry that you've just created instead of waiting for Stripe Webhooks.
Install
With yo:
$ yo trails:trailpack trailpack-stripe
With npm:
$ npm install --save trailpack-stripe
Configure
// config/main.js
module.exports = {
packs: [
// ... other trailpacks
require('trailpack-stripe')
]
}
// config/stripe
module.exports = {
// Public Key
public: process.env.STRIPE_PUBLIC || '<test_public_key>',
// Secret Key
secret: process.env.STRIPE_SECRET || '<test_secret_key>',
// Validate Events with Stripe
validate: process.env.STRIPE_VALIDATE || false
}
Then on Stripe
In Account settings Webhooks
Point webhook to <yourdomain>/stripe/webhook
Enable whatever webhooks you desire
Usage Examples
Get a Full list of API calls here
var const StripeService = this.app.services.StripeService
// Create a Customer
StripeService.customers.create({
description: 'Customer for [email protected]',
source: "tok_189fGA2eZvKYlo2C3pWnuPIc" // obtained with Stripe.js
}, (err, customer) => {
// asynchronously called
// Stripe will issue a webhook after this is called and add it to the database.
// However, you may wish to interact with the customer before the webhook is delivered
// In which case we can ignore the webhook by adding `lastStripeEvent` manually
customer.lastStripeEvent = new Date(customer.created * 1000)
this.app.services.FootprintService.create('Customer',customer)
})
// Retreive a Customer
StripeService.customers.retrieve(
"cus_8jZwX4LTADczc2",
(err, customer) => {
// asynchronously called
}
)