0% found this document useful (0 votes)
21 views154 pages

Apple Pay Within Apps

The document provides an overview of Apple Pay, detailing its architecture, user and developer benefits, and integration within apps. It compares Apple Pay with In-App Purchases, outlines the payment processing flow, and discusses the importance of customizing the payment sheet for user convenience. Additionally, it includes technical guidance on creating and accepting payments using Apple Pay in iOS applications.

Uploaded by

chatgpthaina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views154 pages

Apple Pay Within Apps

The document provides an overview of Apple Pay, detailing its architecture, user and developer benefits, and integration within apps. It compares Apple Pay with In-App Purchases, outlines the payment processing flow, and discusses the importance of customizing the payment sheet for user convenience. Additionally, it includes technical guidance on creating and accepting payments using Apple Pay in iOS applications.

Uploaded by

chatgpthaina
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 154

System Frameworks #WWDC15

Apple Pay within Apps


Session 702

Nick Shearer iOS Apps and Frameworks


Rachel Roth User Experience Evangelist

© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
Overview
Overview

What is Apple Pay?

Architecture

Design

Code
What is Apple Pay?
And how do I use it within my app?
An easy, secure, and private way to
pay within app
One-touch payments
Use for physical goods and services
Apple Pay
User benefits

Easy—No need to re-enter payment and contact information


Secure—Pay using Touch ID
Private—Card number not exposed to the merchant
Apple Pay
Developer benefits

Don't need to handle actual card numbers


Higher conversion rates and faster checkouts
No onboarding or existing accounts required
Users love it
Apple Pay users transact more frequently
20%
Apple Pay users transact more frequently
Transaction growth with Apple Pay
50%
Transaction growth with Apple Pay
Increase in overall conversion
109%
Increase in overall conversion
“Apple Pay is not only driving more purchases
but also activating our biggest spenders.”

Joe Einhorn, CEO


Apple Pay or In-App Purchase?
Apple Pay or In-App Purchase?

Apple Pay In-App Purchase

Framework PassKit StoreKit

In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions

Payment Processor Developer responsible Apple

App Store Review Section 29 Section 11


Guidelines
Apple Pay or In-App Purchase?

Apple Pay In-App Purchase

Framework PassKit StoreKit

In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions

Payment Processor Developer responsible Apple

App Store Review Section 29 Section 11


Guidelines
Apple Pay or In-App Purchase?

Apple Pay In-App Purchase

Framework PassKit StoreKit

In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions

Payment Processor Developer responsible Apple

App Store Review Section 29 Section 11


Guidelines
Apple Pay or In-App Purchase?

Apple Pay In-App Purchase

Framework PassKit StoreKit

In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions

Payment Processor Developer responsible Apple

App Store Review Section 29 Section 11


Guidelines
Supported Devices

iPhone 6
iPhone 6 Plus
iPad Air 2
iPad mini 3
Supported Countries
Apple Pay Architecture
How payments are made
First Steps
Merchant Identifier

Apple Pay requires a Merchant Identifier


Create a Merchant Identifier and matching certificate at the Developer Portal
Your identifier and certificate are used to encrypt payment data
Should be a reverse DNS format beginning merchant.*

merchant.com.wwdc.emporium
First Steps
Merchant Identifier

Apple Pay requires a Merchant Identifier


Create a Merchant Identifier and matching certificate at the Developer Portal
Your identifier and certificate are used to encrypt payment data
Should be a reverse DNS format beginning merchant.*

merchant.com.wwdc.emporium
Anatomy of a Payment
Anatomy of a Payment

Your app displays the payment sheet


Anatomy of a Payment

Your app displays the payment sheet


Touch ID is used to authorize
Anatomy of a Payment

Your app displays the payment sheet


Touch ID is used to authorize
Your app receives a payment token
Anatomy of a Payment

Your app displays the payment sheet


Touch ID is used to authorize
Your app receives a payment token
This token is encrypted using your Merchant ID's certificate
Anatomy of a Payment

Your app displays the payment sheet


Touch ID is used to authorize
Your app receives a payment token
This token is encrypted using your Merchant ID's certificate
Send this token to your processor
Payment Flow

Checkout

IOS Apple Pay


Eligible?

Secure
Element
Payment Flow

Present
Checkout
Apple Pay

IOS Apple Pay Touch ID


Eligible? Valid?

Secure
Element
Payment Flow

Present
Checkout
Apple Pay

IOS Apple Pay Touch ID


Eligible? Valid?

Secure Create Cryptogram


Element Encrypt Information

Apple
Server
Payment Flow

Merchant
Server

Present Send for


Checkout
Apple Pay Processing

IOS Apple Pay Touch ID


Eligible? Valid?

Secure Create Cryptogram


Element Encrypt Information

Apple Apple
Server Server
Payment Flow

Merchant Merchant
Server Server

Present Send for


Checkout Success!
Apple Pay Processing

IOS Apple Pay Touch ID


Eligible? Valid?

Secure Create Cryptogram


Element Encrypt Information

Apple Apple
Server Server
Processing Payments
Payment platforms

Handle decryption on your behalf


Simply send the payment token
Some provide native iOS development kits
The preferred option for most developers
US Payment Processors
US Payment Processors
UK Payment Processors
UK Payment Processors
Processing Payments
Processing yourself

Decrypt the payment token yourself server-side


Send the underlying cryptogram and payment information to your acquirer
Only recommended for those with existing payment infrastructure
Further information: Payment Token Reference
Design
Make Shopping Easy
Make Shopping Easy

Account setup
Make Shopping Easy

Account setup
Lengthy forms
Make Shopping Easy

Account setup
Lengthy forms
Outdated billing and shipping information
Without Apple Pay
Without Apple Pay
Without Apple Pay
Without Apple Pay
Without Apple Pay
Without Apple Pay
Without Apple Pay
Without Apple Pay
With Apple Pay
With Apple Pay
Make Shopping Easy

Account setup
Lengthy forms
Outdated billing and shipping information
Integrating Apple Pay
Integrating Apple Pay

Enable quick checkout


Chairish
Chairish
Groupon
Groupon
Integrating Apple Pay

Enable quick checkout


Integrating Apple Pay

Enable quick checkout


Default to Apple Pay for eligible customers
Integrating Apple Pay

Enable quick checkout


Default to Apple Pay for eligible customers
Display Apple Pay buttons prominently
Fancy
Fancy
Shoptiques
Shoptiques
Integrating Apple Pay

Enable quick checkout


Default to Apple Pay for eligible customers
Display Apple Pay buttons prominently
Integrating Apple Pay

Enable quick checkout


Default to Apple Pay for eligible customers
Display Apple Pay buttons prominently
Show the payment sheet immediately
Customizing the Payment Sheet
Customizing the Payment Sheet

Request billing, shipping & contact info if needed


Fancy
Fancy
Fancy
Fancy
Uber
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
Apple Store
Apple Store
Customizing the Payment Sheet

Request billing, shipping & contact info if needed


Specify shipping method or pickup
Customizing the Payment Sheet

Request billing, shipping & contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Keep
LIFX
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Make estimates clear
Uber
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Make estimates clear
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Make estimates clear
Place the business name before the total cost
Fancy
Customizing the Payment Sheet

Request billing, shipping, and contact info if needed


Specify shipping method or pickup
List shipping cost, tax, or discounts after the subtotal
Make estimates clear
Place the business name before the total cost
Apple Store
Apple Store
Apple Store
Summary
Summary

Remove obstacles to making a purchase


Summary

Remove obstacles to making a purchase


Display the Apple Pay buttons prominently
Summary

Remove obstacles to making a purchase


Display the Apple Pay buttons prominently
Customize the payment sheet
Summary

Remove obstacles to making a purchase


Display the Apple Pay buttons prominently
Customize the payment sheet
Confirm the transaction
Putting It All Together
My First Apple Pay App

Request a payment
Display the payment sheet
Handle the authorization
Let's Talk Classes
Let's Talk Classes

PKPaymentSummaryItem
Let's Talk Classes

PKPaymentSummaryItem

PKPaymentRequest
Let's Talk Classes

PKPaymentSummaryItem

PKPaymentRequest

PKPaymentAuthorizationViewController
Let's Talk Classes

PKPaymentSummaryItem

PKPaymentRequest

PKPaymentAuthorizationViewController

PKPayment
First Steps
Checking for Apple Pay
First Steps
Checking for Apple Pay

Does the user have payment cards available that we can accept?
let paymentNetworks = [PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]

if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks)
{
// Create the payment request
} else {
// Traditional checkout flow
}
First Steps
Checking for Apple Pay

Does the user have payment cards available that we can accept?
let paymentNetworks = [PKPaymentNetworkMasterCard, PKPaymentNetworkVisa]

if PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(paymentNetworks)
{
// Create the payment request
} else {
// Traditional checkout flow
}
First Steps
Checking for Apple Pay

Check if the hardware supports Apple Pay:


PKPaymentAuthorizationViewController.canMakePayments()

New in iOS 9 - check for capabilities:


PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(networks,
capabilities: .CapabilityDebit)
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

Summarize the charges you'd like to make and how to pay for them
Request shipping and contact information
let request = PKPaymentRequest()

request.merchantIdentifier = "merchant.com.wwdc.emporium"
request.countryCode = "US"
request.currencyCode = "USD"
request.supportedNetworks = [PKPaymentNetworkAmex, PKPaymentNetworkVisa]
request.merchantCapabilities = .Capability3DS
request.paymentSummaryItems = […]
Creating a Payment
PKPaymentRequest

If necessary, only allow certain types of cards to make payments


// Only allow users to make payments with a debit card
request.merchantCapabilities = .Capability3DS | .CapabilityDebit
Creating a Payment
PKPaymentSummaryItem

Describes what you're paying for and how much it costs


Uses NSDecimalNumber for guaranteed precision
NSDecimalNumber
NSDecimalNumber(string)
NSDecimalNumber(decimal)
NSDecimalNumber(double)
Creating a Payment
PKPaymentSummaryItem

Describes what you're paying for and how much it costs


Uses NSDecimalNumber for guaranteed precision
NSDecimalNumber
NSDecimalNumber(string)
NSDecimalNumber(decimal)
NSDecimalNumber(double)
Creating a Payment
PKPaymentSummaryItem

let total = PKPaymentSummaryItem(label: "Apple Inc",


amount: NSDecimalNumber(string: "349.99"))

request.paymentSummaryItems = [total]

The last item of the summary items array is the total to be charged
Creating a Payment
PKPaymentAuthorizationViewController

Displays the payment information


Modally displayed over your app
On iPad will be a form sheet
Creating a Payment
PKPaymentAuthorizationViewController

let vc = PKPaymentAuthorizationViewController(paymentRequest: request)

vc.delegate = self
presentViewController(vc, animated: true, completion: nil)
Creating a Payment
PKPaymentButton

Use PKPaymentButton to trigger the sheet


Available in a variety of styles and colors
Fully localized
Available in iOS 8.3
Demo
Making a payment
Accepting a Payment
PKPaymentAuthorizationViewControllerDelegate

Receive callbacks when the payment authorization process has completed


Use the delegate to confirm whether a payment has been made or not
Accepting a Payment
PKPaymentAuthorizationViewControllerDelegate

Send the payment data for processing and return the status
func paymentAuthorizationViewController(
controller: PKPaymentAuthorizationViewController,
didAuthorizePayment payment: PKPayment,
completion: (PKPaymentAuthorizationStatus) -> Void)

Dismiss the payment view controller


func paymentAuthorizationViewControllerDidFinish(
controller: PKPaymentAuthorizationViewController)
Accepting a Payment
PKPayment and PKPaymentToken

Returned by the payment view controller after successful authorization


Contains the encrypted payment data
Any other metadata you requested
Demo
Accepting a payment
Contact Information

Request contact information from users for shipping (email, phone, address)
paymentRequest.requiredShippingAddressFields = .PostalAddress | .Email

New in iOS 8.3—name only


paymentRequest.requiredShippingAddressFields = .Name
Contact Information

Optionally, request billing address as well

paymentRequest.requiredBillingAddressFields = .PostalAddress

Generally, don't request contact information unless you need it


Billing Address

Billing address is not required to process Apple Pay


We recommend against requesting it
Shipping Costs

Update shipping costs when the user selects a new address


For privacy, you'll receive city and ZIP only
Provide updated shippingMethods and summaryItems arrays

func paymentAuthorizationViewController(
controller: PKPaymentAuthorizationViewController,
didSelectShippingContact contact: CNContact,
completion: (PKPaymentAuthorizationStatus, [PKShippingMethod],
[PKPaymentSummaryItem]) -> Void)
Shipping Costs

Display shipping costs in-line in the Apple Pay sheet


PKShippingMethod (PKPaymentSummaryItem subclass)

let twoDay = PKShippingMethod(label: "Express shipping",


amount: NSDecimalNumber(string: "4.99"))
twoDay.detail = "Delivers in two working days"

paymentRequest.shippingMethods = [twoDay]
Contact Information

Un-redacted contact information is available after the user has authorized the payment

if let shippingContact = payment.shippingContact {


let name = CNContactFormatter.stringFromContact(shippingContact,
style: .FullName)
let email = shippingContact.emailAddresses.first
}

iOS 8 AddressBook.framework based APIs are deprecated


Demo
Shipping and contacts
Payment Information
PKPaymentMethod

Find out more about the payment instrument selected


Apply debit / credit card surcharges or discounts
Receive delegate callback when the payment method changes

if paymentMethod.type == .Debit {
label = "Thanks for paying with your debit card!"
}
Payment Information
PKPaymentMethod

A minority of older cards may have no known payment type


In this case, you'll receive PKPaymentMethodTypeUnknown
Tips and Tricks
Pending items

New property on PKPaymentSummaryItem


paymentSummaryItem.type = .Pending

Use this to indicate charges that aren’t final


Additional documentation in a future seed
Tips and Tricks
Simulator support

Display the Apple Pay sheet in the simulator


Always test your apps on real hardware
Tips and Tricks
Apple Pay on Apple Watch

Trigger payments directly from Apple Watch


Handoff directly to an Apple Pay sheet
Sample code available

Wallet - The Home for Apple Pay and More Mission Tuesday 10:00AM
Summary

Apple Pay: Easy, private, secure


Try out Apple Pay for yourself
Integrate into your apps
Delight your users
More Information

Documentation
Apple Pay for Developers
https://developer.apple.com/apple-pay/

iOS Security White Paper


http://www.apple.com/business/docs/iOS_Security_Guide.pdf
More Information

Technical Support
Apple Developer Forums
http://developer.apple.com/forums

Developer Technical Support


http://developer.apple.com/support/technical

General Inquiries
Paul Danbold, Core OS Evangelist
[email protected]

Rachel Roth, User Experience Evangelist


[email protected]
Related Sessions

Wallet - The Home for Apple Pay and More Mission Tuesday 10:00AM

Introducing the Contacts Framework for iOS and OS X Pacific Heights Thursday 3:30PM
Related Labs

Wallet and Apple Pay Lab Frameworks Lab C Tuesday 1:30PM

Wallet and Apple Pay Lab Frameworks Lab C Wednesday 1:30PM

You might also like