User Guide for amazon models including: amazon, iOS Integration

Stephan Venter

iOS Integration Guide

iOS Integration. Guide. Version: 3.7. April, 2021 ... For more details review the transaction feedback instructions in this section. You need to.

Not Your Device? Search For Manuals / Datasheets:

File Info : application/pdf, 47 Pages, 672.52KB

Document
PDF APS Integration Guide - iOS
iOS Integration Guide
Document Version: 3.7 April, 2021

Amazon Payment Services

iOS Integration Guide

Contents
1 About this Document _____________________________________ 5
1.1 Intended audience ________________________________________________________ 5 1.2 Note regarding PayFort / FORT ______________________________________________ 5
2 Before you start the integration ____________________________ 6
3 Mobile SDK transaction workflow __________________________ 7
4 Installing the Mobile SDK _________________________________ 8
4.1 Include the SDK in your Xcode project _________________________________________ 8 4.1.1 Manual installation ____________________________________________________ 8 4.1.2 Installation using CocoaPods: ____________________________________________ 8
4.2 Ensuring your application does not disconnect in background mode __________________ 9
5 Creating a mobile SDK token _____________________________ 10
5.1 Mobile SDK token URLs___________________________________________________ 10 5.2 Submitting token request parameters _________________________________________ 11
6 Processing transactions with the iOS SDK __________________ 13
6.1 Two routes for payment processing __________________________________________ 13 6.2 Steps for standard checkout________________________________________________ 14 6.3 iOS mobile SDK operations ________________________________________________ 17
6.3.1 Request parameters __________________________________________________ 17 6.3.2 Response parameters_________________________________________________ 21
7 Complete sample code for standard UI checkout: ____________ 25
8 Customizing the standard payment UI______________________ 27
8.1 Customizing the standard payment UI ________________________________________ 27 8.2 Hiding the Amazon Payment Service loading prompt _____________________________ 28 8.3 Changing the presentation style _____________________________________________ 29 8.4 iOS SDK response _______________________________________________________ 29

2014-2021 Amazon Payment Services ©. All rights reserved.

2

Amazon Payment Services

iOS Integration Guide

9 Using a custom payment processing UI ____________________ 30
9.1 Stage 1: Generate an SDK token ____________________________________________ 30 9.2 Stage 2: Create the card components ________________________________________ 30 9.3 Stage 3: Initiate the payment _______________________________________________ 35 9.4 Sample code ___________________________________________________________ 35
10 Using Direct Pay________________________________________ 37
10.1 Direct Pay sample code ___________________________________________________ 37
11 Amazon Payment Services iOS SDK transaction feedback ____ 39
11.1 Receiving transaction feedback _____________________________________________ 39 11.2 Registering Transaction Feedback URLs ______________________________________ 39 11.3 Transaction Feedback Implementation________________________________________ 40
12 Validate API____________________________________________ 41
13 Migrating from version 2.3 of the SDK ______________________ 42
14 Appendix: About the Software ____________________________ 47
14.1 About this software_______________________________________________________ 47 14.2 Supported Platforms _____________________________________________________ 47 14.3 Localization ____________________________________________________________ 47 14.4 Screen Orientation _______________________________________________________ 47 14.5 Supported Payment Methods _______________________________________________ 47 14.6 Supported Payment Options _______________________________________________ 47

2014-2021 Amazon Payment Services ©. All rights reserved.

3

Amazon Payment Services

iOS Integration Guide

Copyright Statement. All rights reserved. No part of this document may be reproduced in any form or by any means or used to make any derivative such as translation, transformation, or adaptation without the prior written permission from Amazon Payment Services.
Trademark
2014-2021 Amazon Payment Services ©, all rights reserved. Contents are subject to change without prior notice.
Contact Us
integration-ps@amazon.com https://paymentservices.amazon.com

2014-2021 Amazon Payment Services ©. All rights reserved.

4

Amazon Payment Services

iOS Integration Guide

1 About this Document
This document describes our Mobile SDK for iOS and includes information on how to integrate it with your mobile application.
1.1 Intended audience This document was created for iOS developers that integrate the Amazon Payment Services iOS mobile SDK with their merchant application.
1.2 Note regarding PayFort / FORT
Amazon Payment Services is the new name for PayFort. PayFort is a leading provider of payment processing services that was acquired by Amazon in 2017.
Throughout this section, and in our API reference and SDK guides, you will see references to PayFort. You may also see references to Fort or FORT.
We continue to use PayFort and Fort in our documentation for the simple reason that the code that powers Amazon Payment Services still contains references to PayFort.
To ensure ongoing stability, and to minimize the development overhead for our customers, we are slowly but steadily changing references to PayFort across our core code and our documentation.
In the meantime, when you see PayFort or Fort, you can safely assume that we are referring to Amazon Payment Services features and benefits.

2014-2021 Amazon Payment Services ©. All rights reserved.

5

Amazon Payment Services

iOS Integration Guide

2 Before you start the integration
Read through the following steps first to understand how the integration process works. This will help you to understand why these steps are required and why you need to follow a specific sequence.
Step 1: Access your test account
You need to make sure that you have access to a test account with Amazon Payment Services. It is a full test environment that allows you to fully simulate transactions.
Step 2: Choose between a standardized or custom payment UI
The Amazon Payment Services iOS SDK provides you with a standard payment UI that you can use to quickly integrate in-app payments. The standard UI offers limited customizability.
Alternatively, you can choose to build your own payment UI using Amazon Payment Services iOS SDK building blocks, we describe this in the section on custom-coding a payment processing UI.
Step 3: Make sure that you are using the correct integration type
Prior to building the integration, you need to make sure that you are selecting and using the proper parameters in the API calls as per the required integration type. All the mandatory parameters are mentioned under every section in the API document
Step 4: Install the Amazon Payment Services iOS SDK in your developer environment
You need to download our iOS SDK from the link provided. Next you need to include the iOS SDK in your Xcode project by following the steps in the next section. You are also required to install the library and to integrate the iOS SDK into your app.
Step 5: Create a test transaction request
You need to create a test transaction request. Processing a valid API request depends on the transaction parameters included, you need to check the documentation and review every parameter to reduce the errors in processing the transaction.
Step 6: Process a transaction response
After every payment, Amazon Payment Services returns the transaction response on the URL configured in your account under Technical Settings, Channel Configuration.
For more details review the transaction feedback instructions in this section. You need to validate the response parameters returned on this URL by calculating the signature for the response parameters using the SHA response phrase configured in your account under security settings.
Step 7: Test and Go Live
You can use our test card numbers to test your integration and simulate your test cases. The Amazon Payment Services team may need to test your integration before going live to assure your application integration.

2014-2021 Amazon Payment Services ©. All rights reserved.

6

Amazon Payment Services

iOS Integration Guide

3 Mobile SDK transaction workflow
Below we describe the transaction workflow that occurs when you process a payment using the Amazon Payment Service iOS Mobile SDK.
1. Your customer clicks on the Pay button in your app. 2. Your merchant system (back-end) generates a mobile SDK token using the Amazon
Payment Services API. 3. Your app passes the parameters, including the SDK token, to the iOS mobile SDK. 4. The iOS mobile SDK starts a secure connection and sends the transaction request to the
Amazon Payment Services server to be validated. 5. The Amazon Payment Services API validates the SDK token, device_ID and other request
parameters and returns the validation response the iOS SDK. 6. Assuming validation is passed your merchant app displays a payment page to the
customer. 7. Your customer enters their payment details on the payment page in the iOS SDK prompt
on their device. 8. The Amazon Payment Services iOS SDK validates your customer's details and sends a
transaction (Authorization or Purchase) request to the relevant payment processor and issuing bank. 9. The payment processor processes the transaction request and returns a transaction response to the iOS SDK. 10. The Amazon Payment Services iOS SDK returns the transaction response to your merchant app. 11. Your merchant app displays the response to your customer.

2014-2021 Amazon Payment Services ©. All rights reserved.

7

Amazon Payment Services

iOS Integration Guide

4 Installing the Mobile SDK
These are the first steps you need to follow to install the Amazon Payment Services iOS SDK in your iOS application.
4.1 Include the SDK in your Xcode project You have two options for including the SDK in your Xcode project. You can do so manually, or you can include the SDK by using CocoaPods
4.1.1 Manual installation

1. Obtain the Amazon Payment Services iOS Mobile SDK by downloading it from the Amazon Payment Services website.
2. Extract the folder you downloaded in the previous step.
3. Drag PayFortSDK.xcframework into the Frameworks, Libraries, and Embedded Content section of your target.

4.1.2 Installation using CocoaPods:
NOTE: The PayFort SDK is distributed as an XCFramework, therefore you are required to use Cocoapods 1.9.0 or newer.
1. Add the following code to your Podfile (inside the target section):

pod 'PayFortSDK'

2. Add the following to the bottom of your Podfile:
post_install do |installer| installer.pods_project.targets.each do |target| if ['PayFortSDK'].include? target.name target.build_configurations.each do |config| config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' end end end
end

2014-2021 Amazon Payment Services ©. All rights reserved.

8

Amazon Payment Services 3. Run the following command:
pod install

iOS Integration Guide

NOTE: Ensure it is linked once in the Linked Framework and Libraries or just drag the PayFortSDK.xcframework to Embedded Binaries in the general tab in the project settings.
NOTE: In Xcode, secondary-click your project's .plist file and select Open As -> Source Code. Insert the following XML snippet into the body of your file just before the final, as below:
</dict>element <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>

4.2 Ensuring your application does not disconnect in background mode
To ensure that your app does not disconnect from the SDK when it goes into the background make sure to add this code: Objective-C:

(void)applicationDidEnterBackground:(UIApplication *)application { block UIBackgroundTaskIdentifier backgroundTask; backgroundTask =
[application beginBackgroundTaskWithExpirationHandler: ^ { [application endBackgroundTask:backgroundTask]; backgroundTask = UIBackgroundTaskInvalid; }]; }
Swift

func applicationDidEnterBackground(_ application: UIApplication) { var bgTask: UIBackgroundTaskIdentifier = 0 bgTask = application.beginBackgroundTask(expirationHandler: { application.endBackgroundTask(bgTask) bgTask = UIBackgroundTaskInvalid }) }

2014-2021 Amazon Payment Services ©. All rights reserved.

9

Amazon Payment Services

iOS Integration Guide

5 Creating a mobile SDK token
A mobile SDK authentication token is required to authenticate every request sent to the SDK. The token is also significant to process payment operations with Amazon Payment Services through our iOS mobile SDK.
To get started with our iOS mobile SDK you must first establish the ability to generate a mobile SDK token.
NOTE: The creation and initiation of a mobile SDK token happens on your server ­ your server must generate the token by sending a request to the Amazon Payment Services API.
NOTE: A unique authentication token must be created for each transaction. Each authentication token has a life-time of only one hour if no new request from the same device is sent.
5.1 Mobile SDK token URLs These are the URLs you need to use when you request a mobile SDK token for your iOS app:
Test Environment URL
https://sbpaymentservices.payfort.com/FortAPI/paymentApi
Production Environment URL
https://paymentservices.payfort.com/FortAPI/paymentApi

2014-2021 Amazon Payment Services ©. All rights reserved.

10

Amazon Payment Services

iOS Integration Guide

5.2 Submitting token request parameters You need to submit parameters as a REST POST request using JSON. Below we list the range of parameters for the iOS mobile SDK token request.
5.2.1.1 iOS Mobile SDK Token Request Parameters When you send your request for an iOS mobile SDK token you must send the following parameters to Amazon Payment Services:
Request Parameters

Parameter Name Type Mandatory Description Length Allowed Special Characters Possible/ Expected Values Example

service_command Alpha

Yes

Command 20

_

access_code

Alphanumeric Yes

Access

20

code

merchant_identifier Alphanumeric Yes

Your

20

merchant

ID

language

Alpha

Yes

The

2

checkout

page and

messages

language.

device_id

Alphanumeric Yes

A unique 100

-

device

identifier.

signature

Alphanumeric Yes

A string

200

hashed

using the

Secure

Hash

Algorithm.

SDK_TOKEN
zx0IPmPy5j p1vAz8Kpg 7
CycHZxVj

-

en

-

ar

ffffffffa9fa0b447b2729e70033 c587
7cad05f021 2ed933c9a 5d5dffa316 61acf2c827 a

NOTE: device_id - This value to be generated from the UIDevice Class Reference, and you can generate this parameter by using the following command: [payFort getUDID]

2014-2021 Amazon Payment Services ©. All rights reserved.

11

Amazon Payment Services

iOS Integration Guide

5.2.1.2 iOS Mobile SDK Token Response Parameters These parameters will be returned in the Amazon Payment Services response:
Response Parameters

Parameter Nam e Type Mandatory Description Length Possible/ Expecte d Values Example

service_command Alpha

Yes Command

20

access_code

Alphanumeric Yes Access code

20

merchant_identifier Alphanumeric Yes

language

Alpha

Yes

device_id

Alphanumeric Yes

Your merchant ID 20

The

2

checkout page and

messages

language.

A unique

100

device

identifier.

sdk_token signature

Alphanumeric Yes Alphanumeric Yes

An SDK

100

authentication token

to enable using the

iOS

Mobile SDK.

A string hashed

200

using the Secure

Hash

Algorithm.

status

Numeric

No

A two-digit numeric 2

value that indicates

the status of the

transaction.

SDK_TOKEN

zx0IPmPy5j p1vAz8Kpg 7

CycHZxVj

-

en

-

ar

ffffffffa9fa0b447b2729e70033 c587
Dwp78q3

7cad05f021 2ed933c9a 5d5dffa316 61acf2c827 a

NOTE: Every parameter the merchant sends in the request should be received by the merchant in the response - even the optional parameters.

2014-2021 Amazon Payment Services ©. All rights reserved.

12

Amazon Payment Services

iOS Integration Guide

6 Processing transactions with the iOS SDK
In this section we outline how you process a transaction using the iOS mobile SDK.

6.1 Two routes for payment processing As a merchant you have two ways in which you can process payments using the Amazon Payment Services iOS mobile SDK.
1. Standard payment screen. You can use the standard Amazon Payment Services iOS SDK interface to display a standard payment screen.
This standard payment view is customizable in three ways. You can hide the loading screen, and you can change the presentation style from full screen to OS default. You can also customize some of the UI elements. We address customizing the standard payment screen in Section 7.
2. Custom integration. You can choose to build your own payment processing screen by coding your own payment processing screen. With this mobile SDK feature, we allow merchants to integrate a native app checkout experience without displaying our standard payment screen ­ while still using SDK features for rapid go-live.
With this integration route your customers can securely pay using a custom merchant checkout interface. The SDK provides card input fields and a pay button that merchants can encapsulate inside their checkout interface to match their own inline customer experience.
The Amazon Payment Services SDK will securely transmit the completed card details to the Amazon Payment Services API for processing in order to complete the transaction. We discuss the custom-coded payment UI in Section 5.

2014-2021 Amazon Payment Services ©. All rights reserved.

13

Amazon Payment Services

iOS Integration Guide

6.2 Steps for standard checkout These are the steps you need to follow to perform a checkout using our standard UI. See the next section for building your own customized payment UI. 1. Import the framework into your app
Start by importing the Amazon Payment Service iOS SDK library. You do so by using the following code:
Objective-C

#import <PayFortSDK/PayFortSDK-Swift.h>

Swift

import PayFortSDK

2. Initialize the controllers Initialize PayFortController at class level and only once within the targeted environment. You set the target environment by setting one of the two ENUM, either PayFortEnviromentSandBox or PayFortEnviromentProduction. Objective-C
PayFortController *payFort = [[PayFortController alloc]initWithEnviroment: PayFortEnviromentSandBox];
Swift
let payFort = PayFortController.init(enviroment: .sandBox)

2014-2021 Amazon Payment Services ©. All rights reserved.

14

Amazon Payment Services
3. Preparing Request Parameters Set a dictionary that contains all keys and values for the SDK Objective-C

iOS Integration Guide

NSMutableDictionary *request = [[NSMutableDictionary alloc]init]; [request setValue:@"10000" forKey:@"amount"]; [request setValue:@"AUTHORIZATION" forKey:@"command"]; [request setValue:@"USD" forKey:@"currency"]; [request setValue:@ "email@domain.com" forKey:@"customer_email"] [request setValue:@"en" forKey:@"language"]; [request setValue:@"112233682686" forKey:@"merchant_reference"] [request setValue:@"SDK TOKEN GOES HERE" forKey:@"sdk_token"]; [request setValue:@"" forKey:@"payment_option"]; [request setValue:@"gr66zzwW9" forKey:@"token_name"];
Swift

let request = ["amount" : "1000", "command" : "AUTHORIZATION", "currency" : "AED", "customer_email" : "rzghebrah@payfort.com", "installments" : "", "language" : "en", "sdk_token" : "token"]

4 . Response callback function
Amazon Payment Services allows you retrieve and receive the response parameters after processing a transaction once the transaction is completed. It only happens during the installation process. This is the code you need to use: Objective-C

[payFort callPayFortWithRequest:request currentViewController:self success:^(NSDictionary *requestDic, NSDictionary
*responeDic) { NSLog(@"Success"); NSLog(@"responeDic=%@",responeDic);
} canceled:^(NSDictionary *requestDic, NSDictionary
*responeDic) { NSLog(@"Canceled"); NSLog(@"responeDic=%@",responeDic);
} faild:^(NSDictionary *requestDic, NSDictionary
*responeDic, NSString *message) { NSLog(@"Faild"); NSLog(@"responeDic=%@",responeDic);
}];

2014-2021 Amazon Payment Services ©. All rights reserved.

15

Amazon Payment Services Swift

iOS Integration Guide

payFort.callPayFort(withRequest: request, currentViewController: self, success: { (requestDic, responeDic) in print("success")
}, canceled: { (requestDic, responeDic) in
print("canceled") }, faild: { (requestDic, responeDic, message) in print("faild") })

2014-2021 Amazon Payment Services ©. All rights reserved.

16

Amazon Payment Services

iOS Integration Guide

6.3 iOS mobile SDK operations 6.3.1 Request parameters
This is a list of the parameters you need to send when you send a request to the iOS SDK.
Request Parameters

Parameter Name Type Mandatory Description Length Allowed special characters Possible or Expected Values Example

command

Alpha

Yes Command 20

merchant_reference Alphanumeric Yes Your unique 40 - _ order ID

amount
currency language customer_email sdk_token

Numeric

Yes *Each

10

currency has

predefined

allowed

decimal

points that

should be

taken into

consideration

when

sending

the amount.

Alpha

Yes The currency 3 of the
transaction's amount in ISO code 3.

Alpha

Yes Language

2

used on the

checkout

page and for

messages

Alphanumeric Yes

Your
customer's email
address

254 _ - . @ +

Alphanumeric Yes The SDK

100

token you

generate for

AUTHORIZATION -PURCHASE
XYZ9239y u898 10000
AED
en ar
customer @domain. com Dwp78q3

2014-2021 Amazon Payment Services ©. All rights reserved.

17

Amazon Payment Services

iOS Integration Guide

token_name

Alphanumeric No

payment_option

Alpha

No

eci

Alpha

No

order_description

Alphan

No

umeric

customer_ip

Alphan

No

umeric

customer_ name

Alpha

No

phone_number

Alphan

No

umeric

settlement_reference Alphan

No

umeric

every SDK transaction

The token received from the tokenization process

100 . @ _

Op9Vmp

Payment

10

option

VISA MASTERCARD AMEX MADA (for Purchase operations and eci Ecommerce only).

E-commerce 16 indicator

ECOMMERCE

It holds the 150 description of the order

# ' / . _ - : $ Space

iPhone 12 Pro

It holds the 45 customer 's IP address. *It's Mandatory, if the fraud service is active.

192.178.1. 10

The
customer's name

40 _ \ / . '

John Smith

The
customer's phone number

19 + ( ) Space

00962797 219966

The

34 -

Merchant

_

submits this

.

value to

Amazon

Payment

Services.

The value is

then passed

to the

Acquiring

bank and

displayed to

the merchant

XYZ9239 yu898

2014-2021 Amazon Payment Services ©. All rights reserved.

18

Amazon Payment Services

merchant_ extra

Alphan umeric

merchant_ extra1

Alphan umeric

merchant_ extra2

Alphan umeric

merchant_ extra3

Alphan umeric

merchant_ extra4

Alphan umeric

merchant_ extra5

Alphan umeric

in the Acquirer settlement file.

No Extra data

999 ;

sent by

/

merchant

_

. Will be

-

received and

,

sent back as

'

received. Will

@

not be

displayed in

any report.

No Extra data

250 ;

sent by

/

merchant.

_

Will be

-

received and

,

sent back as

'

received. Will

@

not be

displayed in

any report.

No Extra data

250 ;

sent by

/

merchant.

_

Will be

-

received and

,

sent back as

'

received. Will

@

not be

displayed in

any report.

No Extra data

250 ;

sent by

/

merchant.

_

Will be

-

received and

,

sent back as

'

received. Will

@

not be

displayed in

any report.

No Extra data

250 ;

sent by

/

merchant.

_

Will be

-

received and

,

sent back as

'

received. Will

@

not be

displayed in

any report.

No Extra data

250 ;

sent by

/

merchant.

_

Will be

-

received and

,

2014-2021 Amazon Payment Services ©. All rights reserved.

iOS Integration Guide
JohnSmith JohnSmith JohnSmith JohnSmith JohnSmith JohnSmith
19

Amazon Payment Services

iOS Integration Guide

sent back as

'

received. Will

@

not be

displayed in

any report.

NOTE: Before sending the transaction value you must multiply the value by a factor that matches the ISO 4217 specification for that currency. Multiplication is necessary to accommodate decimal values. Each currency's 3-digit ISO code will have a specification for the number of digits after the decimal separator.
For example: If the transaction value is 500 AED; according to ISO 4217, you should multiply the value with 100 (to accommodate 2 decimal points). You will therefore send an AED 500 purchase amount as a value of 50000.
Another example: If the amount value was 100 JOD; according to ISO 4217, you should multiply the value with 1000 (to accommodate 3 decimal points). You therefore send a JOD 100 purchase amount as a value of 100000.

2014-2021 Amazon Payment Services ©. All rights reserved.

20

Amazon Payment Services

6.3.2 Response parameters

Request Parameters

iOS Integration Guide

Parameter Nam e Type Description Length Possible or Expecte d Values Example

command

Alpha

Command 20

merchant_reference Alphanumeric Your unique 40 order ID

amount
currency language customer_email fort_id sdk_token

Numeric

*Each

10

currency has

predefined

allowed

decimal

points that

should be

taken into

consideration

when

sending

the amount.

Alpha

The currency 3 of the
transaction's amount in ISO code 3.

Alpha

Language

2

used on the

checkout

page and for

messages

Alphanumeric Your

254

customer's

email

address

Numeric

The order's 20 unique reference returned by our system.

Alphanumeric The SDK

100

token you

generate for

every SDK

transaction

AUTHORIZATION -PURCHASE
XYZ9239y u898 10000
AED
en ar
customer @domain. com 14437968668 48
Dwp78q3

2014-2021 Amazon Payment Services ©. All rights reserved.

21

Amazon Payment Services

iOS Integration Guide

token_name payment_option

Alphanumeric The token

100

received

from the

tokenization

process

Alpha

Payment

10

option

eci

Alpha

authorization_code Alphanu meric

order_description

Alphan umeric

response_message Alphanu meric

response_code

Numeric

status

Numeric

customer_ip

Alphan umeric

E-commerce 16 indicator

The

100

authorization

code

returned

from the 3rd

party.

It holds the 150 description of the order

Message

150

description of

the response

code. It

returns

according to

the request

language.

Response

5

Code carries

the value of

our system's

response.

The code is

made up of

five digits.

A two-digit 2 numeric value that indicates the status of the transaction.

It holds the 45 customer 's IP address. *It's Mandatory, if the fraud service is active.

Op9Vmp

VISA MASTERCARD AMEX MADA (for Purchase operations and eci Ecommerce only).
ECOMMERCE

-

P100000000

0000372136

iPhone 12 Pro

-

Insufficient

funds

192.178.1. 10

2014-2021 Amazon Payment Services ©. All rights reserved.

22

Amazon Payment Services

expiry_date card_number

Numeric Numeric

customer_ name

Alpha

phone_number

Alphan umeric

settlement_refe rence

Alphan umeric

merchant_ extra

Alphan umeric

merchant_ extra1

Alphan umeric

The card's expiry date.

The masked 16 credit card number. Only the MEEZA payment option takes 19 digits card number. *AMEX payment option takes 15 digits card number. *Otherwise, they take 16 digits card number.

The

40

customer's

name

The

19

customer's

phone

number

The

34

Merchant

submits this

value to

Amazon

Payment

Services.

The value is

then passed

to the

Acquiring

bank and

displayed to

the merchant

in the

Acquirer

settlement

file.

Extra data

999

sent by

merchant

. Will be

received and

sent back as

received. Will

not be

displayed in

any report.

Extra data

250

sent by

merchant.

Will be

2014-2021 Amazon Payment Services ©. All rights reserved.

iOS Integration Guide
400555****** 0001
John Smith 00962797 219966 XYZ9239 yu898
JohnSmith
JohnSmith
23

Amazon Payment Services

iOS Integration Guide

merchant_ extra2

Alphan umeric

merchant_ extra3

Alphan umeric

merchant_ extra4

Alphan umeric

merchant_ extra5

Alphan umeric

received and sent back as received. Will not be displayed in any report.

Extra data

250

sent by

merchant.

Will be

received and

sent back as

received. Will

not be

displayed in

any report.

Extra data

250

sent by

merchant.

Will be

received and

sent back as

received. Will

not be

displayed in

any report.

Extra data

250

sent by

merchant.

Will be

received and

sent back as

received. Will

not be

displayed in

any report.

Extra data

250

sent by

merchant.

Will be

received and

sent back as

received. Will

not be

displayed in

any report.

JohnSmith JohnSmith JohnSmith JohnSmith

NOTE: Every parameter the Merchant sends in the Request should be received by the Merchant in the Response - even the optional ones.

2014-2021 Amazon Payment Services ©. All rights reserved.

24

Amazon Payment Services

iOS Integration Guide

7 Complete sample code for standard UI checkout:
The following sample code shows you how to process a payment using the standard view. The code sample illustrates how you send a request operation in the mobile SDK.

Objective-C
- (void)viewDidLoad { [super viewDidLoad]; payfort = [[PayFortController alloc]
initWithEnviroment:PayFortEnviromentSandBox]; }
NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc]init]; [requestDictionary setValue:@"10000" forKey:@"amount"]; [requestDictionary setValue:@"AUTHORIZATION" forKey:@"command"]; [requestDictionary setValue:@"USD" forKey:@"currency"]; [requestDictionary setValue:@"email@domain.com" forKey:@"customer_email"]; [requestDictionary setValue:@"en" forKey:@"language"]; [requestDictionary setValue:@"112233682686" forKey:@"merchant_reference"]; [requestDictionary setValue:@"" forKey:@"payment_option"]; [requestDictionary setValue:@"gr66zzwW9" forKey:@"token_name"];
[payFort callPayFortWithRequest:requestDictionary currentViewController:self success:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} canceled:^(NSDictionary *requestDic, NSDictionary *responeDic) { } faild:^(NSDictionary *requestDic, NSDictionary *responeDic, NSString *message) {
}];

2014-2021 Amazon Payment Services ©. All rights reserved.

25

Amazon Payment Services

iOS Integration Guide

Swift
let request = ["amount" : "1000", "command" : "AUTHORIZATION", "currency" : "AED", "customer_email" : "rzghebrah@payfort.com", "installments" : "", "language" : "en", "sdk_token" : "token"]
payFort.callPayFort(withRequest: request, currentViewController: self, success: { (requestDic, responeDic) in print("success") print("responeDic=\(responeDic)") print("responeDic=\(responeDic)")
}, canceled: { (requestDic, responeDic) in
print("canceled") print("responeDic=\(responeDic)") print("responeDic=\(responeDic)")
}, faild: { (requestDic, responeDic, message) in
print("faild") print("responeDic=\(responeDic)") print("responeDic=\(responeDic)") })

2014-2021 Amazon Payment Services ©. All rights reserved.

26

Amazon Payment Services

iOS Integration Guide

8 Customizing the standard payment UI
When you use the standard payment UI you can customize the payment UI presented by our iOS SDK in a number of ways to better reflect your business. We outline your options below.

8.1 Customizing the standard payment UI
You can customize the standard payment user interface in your iOS app. This is an example of a customized payment UI:

Standard vs. Customized Mobile SDK Payment Page
Follow these steps to configure a customized payment UI: 1. Create your nibFile .xib and set the name of Arabic xib same name with English one with suffix -ar.
2. Link the xib with PayFortView and bind all the IBOutlets in interface section IBOutlet UILabel *titleLbl;

IBOutlet UIButton *BackBtn; IBOutlet UILabel *PriceLbl; IBOutlet JVFloatLabeledTextField *CardNameTxt; IBOutlet JVFloatLabeledTextField *CardNumberTxt; IBOutlet JVFloatLabeledTextField *CVCNumberTxt; IBOutlet JVFloatLabeledTextField *ExpDateTxt; IBOutlet UILabel *cardNumberErrorlbl;

2014-2021 Amazon Payment Services ©. All rights reserved.

27

Amazon Payment Services

iOS Integration Guide

IBOutlet UILabel *cVCNumberErrorlbl; IBOutlet UILabel *expDateErrorlbl; IBOutlet UISwitch *savedCardSwitch; IBOutlet UIButton *paymentBtn; IBOutlet UILabel *saveCardLbl; IBOutlet UIImageView *imageCard;
3. Assign new created xib file to Amazon Payment Services controller.
[payFort setPayFortCustomViewNib:@"PayFortView2"];

NOTE. If you call Arabic view and the Arabic view not existed the application will crash. Don't forget to set the custom view field in the identity inspector
8.2 Hiding the Amazon Payment Service loading prompt There is an option to hide the loading prompt when the iOS SDK initializes the connection request. You can disable the loading prompt by using following option: Objective-C
payFort.hideLoading = YES;

Swift
payFort.hideLoading = true

2014-2021 Amazon Payment Services ©. All rights reserved.

28

Amazon Payment Services

iOS Integration Guide

8.3 Changing the presentation style

It's easy to change the presentation style from full screen to default by using the following property:
Objective-C
payFort.presentAsDefault = YES;

Swift
payFort.presentAsDefault = true
NOTE: The default type is full screen when you set the value to false, when set to true it will appear according to the OS default.
8.4 iOS SDK response There is an option to show the response view more directly in an elegant view that shows the response results either as success or failed. You do so by activating the following option: Objective-C
payFort.isShowResponsePage = YES;
Swift
payFort.isShowResponsePage= true

2014-2021 Amazon Payment Services ©. All rights reserved.

29

Amazon Payment Services

iOS Integration Guide

9 Using a custom payment processing UI
In this section we outline the key information you need to create your own payment processing screen using the tools in the iOS SDK.
9.1 Stage 1: Generate an SDK token You need to generate an SDK token before you can start processing payments using your custom payment processing UI. Refer to the SDK token section earlier in this document for instructions on creating an SDK token.
9.2 Stage 2: Create the card components You create your custom payment screen by using the following five components included in the Amazon Payment Services iOS SDK:
· CardNumberView · CVCNumberView · ExpiryDateView · CardHolderNameView · PayButton

Attributes textColor fontStyle backgroundColor
errorText errorFontStyle errorTextColor titleText titleTextColor titleErrorTextColor titleFontStyle

Attributes for custom payment UI

Type

Description

UIColor

The input text filed text color

UIFont

The input text filed font style

UIColor

The input text filed background color

String

The Error Label text

UIFont

The Error Label text Font Style

UIColor

The Error Label text Text Color

String

The Title Label text

UIColor

The Title Label text Color

UIColor

The Error Title Label text Color

UIFont

The Title Label Font style

2014-2021 Amazon Payment Services ©. All rights reserved.

30

Amazon Payment Services

iOS Integration Guide

Components Views Item property, all these properties are available for each component. Swift

let property = Property() property.textColor property.fontStyle property.backgroundColor property.errorFontStyle property.errorTextColor property.titleTextColor property.titleErrorTextColor property.titleFontStyle
Objective-c
Property *property = [[Property alloc] init] property.textColor property.fontStyle property.backgroundColor property.errorFontStyle property.errorTextColor property.titleTextColor property.titleErrorTextColor property.titleFontStyle
1. CardNumberView:
The CardNumberView inheritance from UIView, CardNumberView is used to validate the card number, card brand and card number length. Swift
@IBOutlet private weak var cardNumberView: CardNumberView! cardNumberView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet CardNumberView *cardNumberView; cardNumberView.property = property

2014-2021 Amazon Payment Services ©. All rights reserved.

31

Amazon Payment Services

iOS Integration Guide

2. ExpiryDateView:
The ExpiryDateView inheritance from UIView, ExpiryDateView is used to check the expiry date for the credit card. Swift
@IBOutlet private weak var expiryDateView: ExpiryDateView! expiryDateView.property = property

Objective-c

@property (nonatomic, weak) IBOutlet ExpiryDateView *expiryDateView; expiryDateView.property = property

3. CVCNumberView The CVCNumberView inheritance from UIView, CVCNumberView used to check if cvc matches cardBrad.
Swift
@IBOutlet private weak var cvcNumberView: CVCNumberView! cvcNumberView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet CVCNumberView *cvcNumberView; cvcNumberView.property = property

2014-2021 Amazon Payment Services ©. All rights reserved.

32

Amazon Payment Services

iOS Integration Guide

4. HolderNameView
The HolderNameView inheritance from UIView, HolderNameView is used to fill the card holder name.
Swift

@IBOutlet private weak var holderNameView: HolderNameView! holderNameView.property = property
Objective-c

@property (nonatomic, weak) IBOutlet holderNameView *holderNameView; holderNameView.property = property

5. ErrorLabel
It will show any error message for owner card view, you can set your custom UILabel, Example:
Swift

@IBOutlet private weak var cardNumberErrorLabel: ErrorLabel! cardNumberView.errorLabel = cardNumberErrorLabel
Objective-c

@property (nonatomic, weak) IBOutlet ErrorLabel *cardNumberErrorLabel; cardNumberView.errorLabel = cardNumberErrorLabel

2014-2021 Amazon Payment Services ©. All rights reserved.

33

Amazon Payment Services
Example of components views in Objective-C and Swift This is one example of how to customize the component: Swift
let property = Property() property.textColor = .yellow property.backgroundColor = .green property.errorTextColor = .green property.titleTextColor = .red cardNumberView.property = property
Objective-c
Property * property = [[Property alloc] init]; property.textColor = UIColor.yellowColor; property.backgroundColor = UIColor.greenColor; property.errorTextColor = UIColor.greenColor; property.titleTextColor = UIColor.redColor; cardNumberView.property = property;

iOS Integration Guide

2014-2021 Amazon Payment Services ©. All rights reserved.

34

Amazon Payment Services

iOS Integration Guide

9.3 Stage 3: Initiate the payment
PayButton
Used to collect the card data from card components above and to submit successful payment. With a few simple steps it also has the capability to perform Direct Pay without the need for the card component, see the next section.
PayfortPayButton methods
/** Update Request After doing Setup - Parameter request: a new request dictionary */
public func updateRequest(request: [String: String])
/** Responsible for Save token or not - Parameter enabled: a new bool value */
public func isRememberEnabled(_ enabled: Bool)

9.4 Sample code In this section we illustrate how you use the PayButton using sample code for Swift and Objective-C.
Swift

@IBOutlet weak var payButton: PayButton!
let builder = PayComponents(cardNumberView: cardNumberView, expiryDateView: expiryDateView, cvcNumberView: cvcNumberView, holderNameView: holderNameView, rememberMe: saveCardSwitch.isOn)
payButton.setup(with: request, enviroment: enviroment, payComponents: builder, viewController: self) {
// Process started } success: { (requestDic, responeDic) in // Process success } faild: { (requestDic, responeDic, message) in // Process faild }

2014-2021 Amazon Payment Services ©. All rights reserved.

35

Amazon Payment Services Objective-C

iOS Integration Guide

@property (nonatomic, weak) IBOutlet PayButton *payButton;
PayComponents *builder = [[PayComponents alloc] initWithCardNumberView:cardNumberView expiryDateView: expiryDateView cvcNumberView: cvcNumberView, holderNameView: holderNameView rememberMe: saveCardSwitch.on];
[payButton setupWithRequest: request enviroment: enviroment
payComponents: builder currentViewController: self
Success:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} Canceled:^(NSDictionary *requestDic, NSDictionary *responeDic) { } Faild:^(NSDictionary *requestDic, NSDictionary *responeDic, NSString *message) { }];

2014-2021 Amazon Payment Services ©. All rights reserved.

36

Amazon Payment Services

iOS Integration Guide

10 Using Direct Pay

The Direct Pay feature enables Amazon Payment Services merchants to securely process ecommerce transactions using tokenized payment card details.
For customers that already supplied their payment card details in a previous transaction and where a card token was generated, customers need to just provide the card_security_code to complete their purchase.
The card token and provided card security code can be sent to the Amazon Payment Services iOS mobile SDK to complete the customer purchase through Direct Pay operation to complete the order placement using eCommerce channel.
Note you can use Direct Pay both with the standard payment UI or with a customized payment UI.

10.1 Direct Pay sample code Swift

@IBOutlet weak var directPayButton: PayButton!
// request should has all mandatory params and also you need to send card_security_code, token_name
let request = ["amount" : "1000", "command" : "AUTHORIZATION", "currency" : "AED", "customer_email" : "test@payfort.com", "language" : "en", "card_security_code" : "123", "token_name" : "payfort", "merchant_reference" : "merchant reference", "sdk_token" : "token"]
directPayButton.setup(with: request, enviroment: enviroment, viewController: self) {
// Process started } success: { (requestDic, responeDic) in // Process success } faild: { (requestDic, responeDic, message) in // Process faild }

2014-2021 Amazon Payment Services ©. All rights reserved.

37

Amazon Payment Services Objective-c

iOS Integration Guide

@property (nonatomic, weak) IBOutlet PayButton *directPayButton;
NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc]init]; [requestDictionary setValue:@"10000" forKey:@"amount"]; [requestDictionary setValue:@"AUTHORIZATION" forKey:@"command"]; [requestDictionary setValue:@"USD" forKey:@"currency"]; [requestDictionary setValue:@"email@domain.com" forKey:@"customer_email"]; [requestDictionary setValue:@"en" forKey:@"language"]; [requestDictionary setValue:@"112233682686" forKey:@"merchant_reference"]; [requestDictionary setValue:@"payfort" forKey:@"token_name"]; [requestDictionary setValue:@"123" forKey:@"card_security_code"]; [requestDictionary setValue:@"token" forKey:@"sdk_token"];
[directPayButton setupWithRequest: request enviroment: enviroment
currentViewController: self Success:^(NSDictionary *requestDic, NSDictionary
*responeDic) { } Canceled:^(NSDictionary *requestDic, NSDictionary *responeDic) { } Faild:^(NSDictionary *requestDic, NSDictionary *responeDic, NSString
*message) { }];

2014-2021 Amazon Payment Services ©. All rights reserved.

38

Amazon Payment Services

iOS Integration Guide

11 Amazon Payment Services iOS SDK transaction feedback
While a transaction is processed, we will send a response directly to your direct transaction feedback URL. In theory, direct response feedback cannot be interrupted unless the URL you provided for responses is not functional at the time of the response.
We do this so that your server receives a response even if your customer does not successfully redirect to the return URL on your website, which may happen if your customer's browser or connection fails during the transaction.
11.1 Receiving transaction feedback
There are two ways in which you receive transaction feedback:
Direct transaction feedback. Amazon Payment Services sends an immediate payment processing response whenever a transaction is completed.
You can rely on this response for transaction feedback even where your user closed the browser before getting redirected successfully to the redirection URL or where your user was not redirected due to a drop in the internet connection.
Notification feedback. Were we need to provide you with the status of a transaction once it is received. In other words, we send notification feedback to alert you to any changes in the status of a transaction.
For example, if the transaction was pending due to the unavailability of any party to the transaction, the final update will be pushed to your notification feedback endpoint.
Notification feedback deals with a wide range of scenarios and it is critical that your website is configured to receive notification feedback correctly. For example, transaction feedback can alert you to any transactions that were stuck in "uncertain" status, but which have recovered to final status.
Direct feedback allows you to subscribe to transaction updates for uncertain transactions whenever you process a payment. It is a method for receiving the transaction response automatically once the transaction had completed or if there was an update.

11.2 Registering Transaction Feedback URLs To receive transaction feedback, you must register with Amazon Payment Services the transaction feedback URLs you set up on your server. Follow these steps: 1. Log in to your back-office account.
2. Select the active channel under Integration Settings > Technical Settings.
3. Enter your Direct Transaction Feedback URL and Notification Transaction Feedback URL.
4. Click the "Save Changes" button.

2014-2021 Amazon Payment Services ©. All rights reserved.

39

Amazon Payment Services

iOS Integration Guide

11.3 Transaction Feedback Implementation
We will send the response via HTTP POST request in POST form format to your webhook URL. The submission type can be changed from POST form to JSON or XML in your APS account settings. We only permit configuring URLs in HTTPS for direct feedback and for notification feedback.
To acknowledge receiving the direct feedback and notification successfully, the webhook URL must return a 2xx or 302 HTTP status. In case the URL returns different HTTP responses, our server will keep retrying up to 10 times until we receive a success response. We wait ten seconds between retries.
You can change and configure the retry mechanism attributes to increase or decrease the number of retries, time between retries and the grace period before we send the notifications.
You must create endpoints that accept direct transaction feedback and notification feedback from us via a webhook. You can customize how transaction feedback works -- for example, by including the grace period before a direct feedback notification is sent, and the time elapsed between retrying feedback submission.
To customize transaction feedback, email integration-ps@amazon.com. You can request to change the submission type to JSON or XML. You can also change the grace period or the time interval between the retries ­ please contact us.
NOTE: You can check the direct and notification feedback logs in your back office account to check the details related to the submission like the Transaction Feedback URL which was triggered, The response which our system pushed, the response Code and Status retuned from your Transaction Feedback URL.
NOTE: The specifics of the data will differ based upon the financial operation that has been processed. Your code must be able to accommodate different data.

2014-2021 Amazon Payment Services ©. All rights reserved.

40

Amazon Payment Services

iOS Integration Guide

12 Validate API
Amazon Payment Services offers an API to request validation of the payment card details without performing an actual transaction.
ValidateAPI can help you to initiate an API request in order to validate the input parameters values, this will reduce the possibility of encountered API errors due to wrong user inputs before processing the actual payment card transaction.

Swift
let request = ["amount" : "1000", "command" : "AUTHORIZATION", "currency" : "AED", "customer_email" : "test@payfort.com", "language" : "en", "sdk_token" : "token"]
payFortController.callValidateAPI(with: request) { // Process started
} success: { // Process success
} faild: { (requestDic, responeDic, message) in // Process faild
})

Objective-c

NSMutableDictionary *request = [[NSMutableDictionary alloc]init]; [requestDictionary setValue:@"10000" forKey:@"amount"]; [requestDictionary setValue:@"AUTHORIZATION" forKey:@"command"]; [requestDictionary setValue:@"USD" forKey:@"currency"]; [requestDictionary setValue:@"email@domain.com" forKey:@"customer_email"]; [requestDictionary setValue:@"en" forKey:@"language"]; [requestDictionary setValue:@"112233682686" forKey:@"merchant_reference"]; [requestDictionary setValue:@"token" forKey:@"sdk_token"];
[payFortController callValidateAPIWithRequest: request ShowLoader:^() {
} Success:^(NSDictionary *requestDic, NSDictionary *responeDic) { } Faild:^(NSDictionary *requestDic, NSDictionary *responeDic, NSString *message) { }];

NOTE: When you make use of the Validate API call you still need to generate a mobile SDK token even though you are not processing a transaction.

2014-2021 Amazon Payment Services ©. All rights reserved.

41

Amazon Payment Services

iOS Integration Guide

13 Migrating from version 2.3 of the SDK
In this section we outline the steps you need to take to migrate from version 2.3 of the Amazon Payment Services iOS SDK to the latest release. To complete the migration follow these steps:
1. Remove PayFortSDK.framework and PayFortSDK.bundle
2. Use CocoaPods or manual integration ­ by dragging the PayFortSDK.xcframework into your project
3. Import PayFortSDK.xcframework: Objective-C The replace import is shown below
//From #import <PayFortSDK/PayFortSDK> //To #import <PayFortSDK/PayFortSDK-Swift.h>

Swift import If you're using Swift you can import PayFortSDK directly on your controller, there is no need to use Bridging-Header any more
import PayFortSDK

2014-2021 Amazon Payment Services ©. All rights reserved.

42

Amazon Payment Services

iOS Integration Guide

4. Change callPayFortWithRequest method as below:
Objective-C
//From [payFort callPayFortWithRequest:myRequest currentViewController:self
Success:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} Canceled:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} Faild:^(NSDictionary *requestDic, NSDictionary *responeDic, }];
//TO [payFort callPayFortWithRequest:myRequest currentViewController:self
success:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} canceled:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} faild:^(NSDictionary *requestDic, NSDictionary *responeDic, }];

Swift
Chane the callPayFortWithRequest request param from NSMutableDictionary to
Dictionary

2014-2021 Amazon Payment Services ©. All rights reserved.

43

Amazon Payment Services

iOS Integration Guide

5. Change callPayFortForApplePayWithRequest method as below:
Objective-C
//From [payFort callPayFortForApplePayWithRequest:myRequest
applePayPayment:payment currentViewController:self
Success:^(NSDictionary *requestDic, NSDictionary *responeDic) {
} Faild:^(NSDictionary *requestDic, NSDictionary
*responeDic, NSString *message) {
completion(PKPaymentAuthorizationStatusFailure);
}];
//To
[payFort callPayFortForApplePayWithRequest:myRequest applePayPayment:payment
currentViewController:self success:^(NSDictionary *requestDic, NSDictionary
*responeDic) {
} faild:^(NSDictionary *requestDic, NSDictionary
*responeDic, NSString *message) {
completion(PKPaymentAuthorizationStatusFailure);
}];

Swift
Change callPayFortForApplePay request param from NSMutableDictionary to Dictionary

2014-2021 Amazon Payment Services ©. All rights reserved.

44

Amazon Payment Services

iOS Integration Guide

6. Change callPayFortForApplePay method as below
Objective-C
//From paycontroller.callPayFortForApplePay(withRequest: ["":""],
applePay: payment, currentViewController: self) { (requestDic, responeDic) in } faild: { (requestDic, responeDic, message) in }
//To paycontroller.callPayFortForApplePay(withRequest: ["":""],
applePayPayment: payment, currentViewController: self) { (requestDic, responeDic) in } faild: { (requestDic, responeDic, message) in }

Swift No changes necessary

7. Change environment as follows: Objective-C From KPayFortEnviromentSandBox to PayFortEnviromentSandBox From KPayFortEnviromentProduction to PayFortEnviromentProduction
Swift From KPayFortEnviromentSandBox to .sandbox From KPayFortEnviromentProduction to .production

2014-2021 Amazon Payment Services ©. All rights reserved.

45

Amazon Payment Services
8. Modify the IsShowResponsePage property: Objective-C: From IsShowResponsePage to isShowResponsePage Swift No changes needed
9. HideLoading property: Objective-C: From HideLoading to hideLoading Swift No changes needed.

iOS Integration Guide

2014-2021 Amazon Payment Services ©. All rights reserved.

46

Amazon Payment Services

iOS Integration Guide

14 Appendix: About the Software
14.1 About this software The Amazon Payment Services iOS mobile SDK allows merchants to securely integrate payment functionality into a native iOS app. It allows merchants to easily accept in-app payments.
Instead of the traditional, time-consuming, and complex way of being redirected to the mobile browser to complete the payment, in-app payments can easily be offered thanks to the iOS Mobile SDK.
In turn, this gives the merchants' customers a smooth, pleasing user experience thanks to inapp payment functions through the native applications.
14.2 Supported Platforms The Amazon Payment Services iOS SDK supports IOS 12.2+ and Xcode 11.0 and above.

14.3 Localization You can use both English and Arabic when you implement the iOS SDK.
14.4 Screen Orientation Currently, portrait is the only orientation supported within the Amazon Payment Services mobile SDK ­ unless you build a customized payment integration.

14.5 Supported Payment Methods Using the iOS SDK the merchant can process debit or credit card transactions only.

14.6 Supported Payment Options
The supported credit card payment options are VISA, MASTERCARD, American Express (AMEX), MADA and MEEZA.

2014-2021 Amazon Payment Services ©. All rights reserved.

47



References