Payments Made Easy with Stripe

Preview:

Citation preview

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 CurrenciesAED: 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 HryvniaUGX: 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

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

Recommended