Payments Made Easy
with
Stripe
ConFoo Vancouver 2016
Blog - shawnhooper.ca

Twitter - @shawnhooper
Blog - shawnhooper.ca

Twitter - @shawnhooper
Director of IT at 

Actionable.co


Web Developer for the past 20 years

Happy to be visiting here from Ottawa
Hi, I’m Shawn
Blog - shawnhooper.ca

Twitter - @shawnhooper


A set of unified APIs and tools that
instantly enables businesses to accept and
manage online payments.
Built for developers!
What is Stripe?
Blog - shawnhooper.ca

Twitter - @shawnhooper


2.9% + $0.30 per transaction
Discounted rates apply once you exceed
$10,000 in transactions per month.
What does Stripe cost?
Blog - shawnhooper.ca

Twitter - @shawnhooper


No setup fees

No monthly fees

Free refunds

Free failed transactions
What does Stripe cost?
Blog - shawnhooper.ca

Twitter - @shawnhooper






$15 fee on chargebacks

* refunded if the dispute is resolved

in your favour
What does Stripe cost?
Blog - shawnhooper.ca

Twitter - @shawnhooper




2% Currency Exchange Fee
What does Stripe cost?
Blog - shawnhooper.ca

Twitter - @shawnhooper




0.5% on funds paid out through
Managed Accounts
What does Stripe cost?
Blog - shawnhooper.ca

Twitter - @shawnhooper
Visa

MasterCard


American Express


Apple Pay
Bitcoin, Alipay, ACH (US Only)
Payment Methods Accepted
Blog - shawnhooper.ca

Twitter - @shawnhooper


If you have a US Dollar Bank Account:
Bitcoin
ACH (Direct to Bank Account)
AliPay
Payment Methods Accepted
Blog - shawnhooper.ca

Twitter - @shawnhooper


If you have a US Stripe Account :
JCB
Discover
Diner’s Club
Payment Methods Accepted
Blog - shawnhooper.ca

Twitter - @shawnhooper
Accepted Currencies
AED: United Arab Emirates Dirham

ALL: Albanian Lek

ANG: Netherlands Antillean Gulden

ARS: Argentine Peso*

AUD: Australian Dollar

AWG: Aruban Florin

BBD: Barbadian Dollar

BDT: Bangladeshi Taka

BIF: Burundian Franc

BMD: Bermudian Dollar

BND: Brunei Dollar

BOB: Bolivian Boliviano*

BRL: Brazilian Real*

BSD: Bahamian Dollar

BWP: Botswana Pula

BZD: Belize Dollar

CAD: Canadian Dollar

CHF: Swiss Franc

CLP: Chilean Peso*

CNY: Chinese Renminbi Yuan
COP: Colombian Peso*

CRC: Costa Rican Colón*

CVE: Cape Verdean Escudo*

CZK: Czech Koruna*

DJF: Djiboutian Franc*

DKK: Danish Krone

DOP: Dominican Peso

DZD: Algerian Dinar

EGP: Egyptian Pound

ETB: Ethiopian Birr

EUR: Euro

FJD: Fijian Dollar

FKP: Falkland Islands Pound*

GBP: British Pound

GIP: Gibraltar Pound

GMD: Gambian Dalasi

GNF: Guinean Franc*

GTQ: Guatemalan Quetzal*

GYD: Guyanese Dollar

HKD: Hong Kong Dollar
HNL: Honduran Lempira*

HRK: Croatian Kuna

HTG: Haitian Gourde

HUF: Hungarian Forint*

IDR: Indonesian Rupiah

ILS: Israeli New Sheqel

INR: Indian Rupee*

ISK: Icelandic Króna

JMD: Jamaican Dollar

JPY: Japanese Yen

KES: Kenyan Shilling

KHR: Cambodian Riel

KMF: Comorian Franc

KRW: South Korean Won

KYD: Cayman Islands Dollar

KZT: Kazakhstani Tenge

LAK: Lao Kip*

LBP: Lebanese Pound

LKR: Sri Lankan Rupee

LRD: Liberian Dollar

MAD: Moroccan Dirham
Blog - shawnhooper.ca

Twitter - @shawnhooper
Accepted Currencies
MDL: Moldovan Leu

MNT: Mongolian Tögrög

MOP: Macanese Pataca

MRO: Mauritanian Ouguiya

MUR: Mauritian Rupee*

MVR: Maldivian Rufiyaa

MWK: Malawian Kwacha

MXN: Mexican Peso*

MYR: Malaysian Ringgit

NAD: Namibian Dollar

NGN: Nigerian Naira

NIO: Nicaraguan Córdoba*

NOK: Norwegian Krone

NPR: Nepalese Rupee

NZD: New Zealand Dollar

PAB: Panamanian Balboa*

PEN: Peruvian Nuevo Sol*

PGK: Papua New Guinean Kina

PHP: Philippine Peso
PKR: Pakistani Rupee

PLN: Polish Złoty

PYG: Paraguayan Guaraní*

QAR: Qatari Riyal

RUB: Russian Ruble

SAR: Saudi Riyal

SBD: Solomon Islands Dollar

SCR: Seychellois Rupee

SEK: Swedish Krona

SGD: Singapore Dollar

SHP: Saint Helenian Pound*

SLL: Sierra Leonean Leone

SOS: Somali Shilling

STD: São Tomé and Príncipe Dobra

SVC: Salvadoran Colón*

SZL: Swazi Lilangeni

THB: Thai Baht

TOP: Tongan Pa‘anga

TTD: Trinidad and Tobago Dollar

TWD: New Taiwan Dollar
TZS: Tanzanian Shilling

UAH: Ukrainian Hryvnia

UGX: Ugandan Shilling

USD: United States Dollar

UYU: Uruguayan Peso*

UZS: Uzbekistani Som

VND: Vietnamese Đồng

VUV: Vanuatu Vatu

WST: Samoan Tala

XAF: Central African Cfa Franc

XOF: West African Cfa Franc*

XPF: Cfp Franc*

YER: Yemeni Rial

ZAR: South African Rad
Blog - shawnhooper.ca

Twitter - @shawnhooper
Unfortunately, in Canada, you can only charge in:
Canadian Dollar (CAD)
United States Dollar (USD)
Accepted Currencies
Blog - shawnhooper.ca

Twitter - @shawnhooper
Transfers from your Stripe account to your
bank account happen automatically.
In Canada, transfers happen on a
rolling 7 day period.
Transfer Periods
Blog - shawnhooper.ca

Twitter - @shawnhooper
How Do You Use Stripe?
Blog - shawnhooper.ca

Twitter - @shawnhooper
You need a publishable and a secret key
pk_test_TWiIAK1daBceEh3lfCDzjavf
sk_test_nigZcikILd8oLeaJk4hvuYtN
You get these in your dashboard under Account Settings,
API Keys
API Keys
Blog - shawnhooper.ca

Twitter - @shawnhooper
If you’re in production,
your site needs to running HTTPS.
You can use HTTP for testing.
HTTPS
Blog - shawnhooper.ca

Twitter - @shawnhooper
https://stripe.com/docs/testing
Test Credit Card Numbers
Blog - shawnhooper.ca

Twitter - @shawnhooper
https://stripe.com/docs/testing
Test Credit Card Numbers
Blog - shawnhooper.ca

Twitter - @shawnhooper
There are official libraries available for
Python, Ruby, PHP, Java, Node.js, Go,
iOS and Android
+ many other community libraries
https://stripe.com/docs/libraries
Download a Stripe Library
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Checkout
Blog - shawnhooper.ca

Twitter - @shawnhooper
This is the simplest way of
charging credit cards.
Stripe Checkout
Blog - shawnhooper.ca

Twitter - @shawnhooper
Create your checkout button:
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Checkout
Blog - shawnhooper.ca

Twitter - @shawnhooper
stripeToken
A hidden field that contains a token representing
the credit card entered.
Stripe Checkout
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Checkout
Blog - shawnhooper.ca

Twitter - @shawnhooper
Congratulations!
You’ve successfully charged
your customer!
Blog - shawnhooper.ca

Twitter - @shawnhooper
Add Metadata
Blog - shawnhooper.ca

Twitter - @shawnhooper
Store Cards for Future Use
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe.JS
Blog - shawnhooper.ca

Twitter - @shawnhooper
Instead of using the modal credit
card form from Stripe,
you can build your own.
Stripe.JS
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe.JS
Blog - shawnhooper.ca

Twitter - @shawnhooper
Blog - shawnhooper.ca

Twitter - @shawnhooper
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe.JS
Blog - shawnhooper.ca

Twitter - @shawnhooper
Just like when using
Stripe Checkout
the next step is to charge the card,
or store it for future use as a Customer object.
Stripe.JS
Blog - shawnhooper.ca

Twitter - @shawnhooper
Subscriptions
Blog - shawnhooper.ca

Twitter - @shawnhooper
Create a Plan
Blog - shawnhooper.ca

Twitter - @shawnhooper
Subscribe Customer to a plan
Blog - shawnhooper.ca

Twitter - @shawnhooper
Subscriptions
Other features of the subscription system:
Changing (upgrading/downgrading) subscriptions
Trial Periods
Coupons & Discounts
Metered Billing (one time charges)
Per User Pricing
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Allows you to create a marketplace or platform
that interacts with other Stripe accounts.
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Standalone Accounts:
Easier to setup (as a platform)

Puts more responsibility on the account holder
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Managed Accounts:
Invisible to the connected account holder
More responsibility lies with the platform
Incurs the 0.5% fee on payout
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
As the “Marketplace” you would send your user to a URL
like this to setup their account and authorize you to charge
on their behalf:

https://connect.stripe.com/oauth/authorize?
response_type=code&client_id=ca_5dYwdVHsycnuKKz6OM
2bBh6N2u3lCkll&scope=read_write&state=234983275
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Success:

https://example.com/return-url/?
section=stripeconnect&stripeconnectresponse=true?
scope=read_write&code=AUTHORIZATION_CODE
&state=STATE_VALUE

Failure:
https://example.com/return-url/?
section=stripeconnect&stripeconnectresponse=true?
error=access_denied&error_description=The%20user%20denied%20y
our%20request
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Blog - shawnhooper.ca

Twitter - @shawnhooper
Stripe Connect
Blog - shawnhooper.ca

Twitter - @shawnhooper
Charge from Connected Account
Blog - shawnhooper.ca

Twitter - @shawnhooper
Application Fees
Blog - shawnhooper.ca

Twitter - @shawnhooper
Charge Through the Platform
Blog - shawnhooper.ca

Twitter - @shawnhooper
Sharing Customers
Blog - shawnhooper.ca

Twitter - @shawnhooper
Sharing Customers
Blog - shawnhooper.ca

Twitter - @shawnhooper
Refunds
Blog - shawnhooper.ca

Twitter - @shawnhooper
Refunds
Blog - shawnhooper.ca

Twitter - @shawnhooper
Webhooks
Blog - shawnhooper.ca

Twitter - @shawnhooper
Webhooks
Allow Stripe to notify your
application when anything
happens in your Stripe account.
Blog - shawnhooper.ca

Twitter - @shawnhooper
Webhooks
Everything you do in Stripe
is synchronous,
but you may need to know things that happen
when your app isn’t expecting it.
Blog - shawnhooper.ca

Twitter - @shawnhooper
Webhooks
Webhook requests must always
return HTTP 2xx
Blog - shawnhooper.ca

Twitter - @shawnhooper
Webhooks
Webhooks can be sent more
than once.
Make your processing idempotent
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Let’s you sell products directly on
Twitter and Spring
using the Stripe API
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
New API Objects:
Product
SKU
Order
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
https://products.stripe.com/twitter/
acct_1xieu3ZypJUk5ob5FHRm/products/
prod_6yk2nr0y97WMag
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Blog - shawnhooper.ca

Twitter - @shawnhooper
Relay
Implement Webhooks
Mark Orders as Fulfilled
Profit!
Blog - shawnhooper.ca

Twitter - @shawnhooper
Radar
Blog - shawnhooper.ca

Twitter - @shawnhooper
Radar
Machine Learning assisted fraud detection.
Custom Rules
Review Flagged Payments
Blog - shawnhooper.ca

Twitter - @shawnhooper
API Documentation
Blog - shawnhooper.ca

Twitter - @shawnhooper
https://stripe.com/docs/api/
Blog - shawnhooper.ca

Twitter - @shawnhooper
Data Portability
Blog - shawnhooper.ca

Twitter - @shawnhooper
Data Portability
If you want to leave Stripe,
they’ll help you with that too.
They’ll facilitate transferring credit card data
to your next provider in a PCI-compliant way.
For free.
Blog - shawnhooper.ca

Twitter - @shawnhooper
Thank You!
These slides will be available at
shawnhooper.ca
E-Mail: shawn@actionable.co



Tweet me @shawnhooper

Payments Made Easy with Stripe