Apple Pay Within Apps
Apple Pay Within Apps
© 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
Overview
Overview
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
In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions
In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions
In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions
In-App
Content
Physical goods
Use For Services Functionality
Services
Subscriptions
iPhone 6
iPhone 6 Plus
iPad Air 2
iPad mini 3
Supported Countries
Apple Pay Architecture
How payments are made
First Steps
Merchant Identifier
merchant.com.wwdc.emporium
First Steps
Merchant Identifier
merchant.com.wwdc.emporium
Anatomy of a Payment
Anatomy of a Payment
Checkout
Secure
Element
Payment Flow
Present
Checkout
Apple Pay
Secure
Element
Payment Flow
Present
Checkout
Apple Pay
Apple
Server
Payment Flow
Merchant
Server
Apple Apple
Server Server
Payment Flow
Merchant Merchant
Server Server
Apple Apple
Server Server
Processing Payments
Payment platforms
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
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
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
request.paymentSummaryItems = [total]
The last item of the summary items array is the total to be charged
Creating a Payment
PKPaymentAuthorizationViewController
vc.delegate = self
presentViewController(vc, animated: true, completion: nil)
Creating a Payment
PKPaymentButton
Send the payment data for processing and return the status
func paymentAuthorizationViewController(
controller: PKPaymentAuthorizationViewController,
didAuthorizePayment payment: PKPayment,
completion: (PKPaymentAuthorizationStatus) -> Void)
Request contact information from users for shipping (email, phone, address)
paymentRequest.requiredShippingAddressFields = .PostalAddress | .Email
paymentRequest.requiredBillingAddressFields = .PostalAddress
func paymentAuthorizationViewController(
controller: PKPaymentAuthorizationViewController,
didSelectShippingContact contact: CNContact,
completion: (PKPaymentAuthorizationStatus, [PKShippingMethod],
[PKPaymentSummaryItem]) -> Void)
Shipping Costs
paymentRequest.shippingMethods = [twoDay]
Contact Information
Un-redacted contact information is available after the user has authorized the payment
if paymentMethod.type == .Debit {
label = "Thanks for paying with your debit card!"
}
Payment Information
PKPaymentMethod
Wallet - The Home for Apple Pay and More Mission Tuesday 10:00AM
Summary
Documentation
Apple Pay for Developers
https://developer.apple.com/apple-pay/
Technical Support
Apple Developer Forums
http://developer.apple.com/forums
General Inquiries
Paul Danbold, Core OS Evangelist
[email protected]
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