React Stripe Checkout Component
Stripe's Checkout makes it almost too easy to take people's money.
This should make it even easier if you're building a react
application.
Installation
Get started by installing with npm
npm install react-stripe-checkout
Requires babel for compiling. If anyone is having issues with that,
open an issue and I'll do my best to better document the build process.
Changes in version 2.0
There used to be a separate .styl
file and respective .css
output. These have been removed and are now written directly in js.
Requirements
token
and stripeKey
are the only required props,
everything else is optional as per the stripe docs. See Checkout
Docs. All props
go through simple validation and are passed to stripe checkout, they're
also documented in StripeCheckout.js
.
import React from 'react'
import StripeCheckout from 'react-stripe-checkout';
export default class TakeMoney extends React.Component {
onToken = (token) => {
fetch('/save-stripe-token', {
method: 'POST',
body: JSON.stringify(token),
}).then(response => {
response.json().then(data => {
alert(`We are in business, ${data.email}`);
});
});
}
render() {
return (
<StripeCheckout
token={this.onToken}
stripeKey="my_PUBLISHABLE_stripekey"
/>
)
}
}
This will give you a default Stripe-style button which looks like this:
Send all the props!
<StripeCheckout
name="Three Comma Co."
description="Big Data Stuff"
image="https://www.vidhub.co/assets/logos/vidhub-icon-2e5c629f64ced5598a56387d4e3d0c7c.png"
ComponentClass="div"
panelLabel="Give Money"
amount={1000000}
currency="USD"
stripeKey="..."
locale="zh"
email="info@vidhub.co"
shippingAddress
billingAddress={false}
zipCode={false}
alipay
bitcoin
allowRememberMe
token={this.onToken}
opened={this.onOpened}
closed={this.onClosed}
reconfigureOnUpdate={false}
triggerEvent="onTouchTap"
>
<button className="btn btn-primary">
Use your own child component, which gets wrapped in whatever
component you pass into as "ComponentClass" (defaults to span)
</button>
</StripeCheckout>
Other info
This was probably terribly written, I'll look at any PR coming my way.
Resources
Contributors
- @orhan-swe added updates to checkout after instantiation and fixed a loading error
- @ekalvi added multiple checkout buttons per page
- @jstaffans adding support for locale
- @gabestein added billing and shipping options
- @samcorcos added testing