FORT iOS SDK
介绍
FORT 移动 SDK 允许商家安全地集成支付功能,并允许商家轻松接受应用内支付。商家不再需要引导用户跳转到移动浏览器完成支付,而是可以通过我们的 FORT 移动 SDK 在应用内直接完成支付。这样就为消费者提供了流畅、愉悦的用户体验。
开始使用
要开始使用 FORT iOS SDK,您需要在 FORT 上有一个账户,请点击此处,使用下面提供链接的安装说明。
开始集成之前
首先阅读以下步骤,了解集成过程是如何工作的,这将帮助您理解为什么需要这些步骤,以及为什么需要遵循特定的顺序。步骤 1:访问您的测试账户
您需要确保您有权访问亚马逊支付服务的测试账户。这是一个完整的测试环境,允许您全面模拟交易。
步骤 2:选择标准化或自定义支付 UI
亚马逊支付服务 iOS SDK 为您提供标准支付 UI,您可以使用它快速集成应用内支付。标准 UI 的可定制性有限。
或者,您可以选择使用亚马逊支付服务 iOS SDK 构建块创建自己的支付 UI,我们在“自定义支付处理 UI”部分描述了这种方法。请参阅下文自定义编码支付处理 UI 的部分。
步骤 3:确保您正在使用正确的集成类型
在构建集成之前,您需要确保根据所需的集成类型选择并正确使用 API 调用中的参数。所有强制参数在每个部分的 API 文档中都有说明。
步骤 4:在您的开发环境中安装亚马逊支付服务 iOS SDK
您需要从提供的链接下载我们的 iOS SDK。接下来,您需要按照下一节中的步骤将 iOS SDK 包含到您的 Xcode 项目中。您还需要安装库并将 iOS SDK 集成到您的应用程序中。
步骤 5:创建测试交易请求
您需要创建一个测试交易请求。处理有效的 API 请求取决于包含的交易参数,您需要检查文档并审阅每个参数,以减少交易处理中的错误。
步骤 6:处理交易响应
每次支付后,亚马逊支付服务都会将交易响应返回到您在账户下配置的技术设置中的 URL,在“渠道配置”部分。
有关更多详情,请参阅本节中的交易反馈说明。您需要验证返回到该 URL 的响应参数,通过在安全设置中配置的 SHA 响应短语计算响应参数的签名。
步骤 7:测试并上线
您可以使用我们的测试卡号来测试您的集成并模拟测试用例。亚马逊支付服务团队可能需要在上线前测试您的集成以确保您的应用程序集成。
安装移动 SDK
-
通过从亚马逊支付服务网站下载获取亚马逊支付服务 iOS 移动 SDK。
-
提取您在上一步中下载的文件夹。
-
将 PayFortSDK.xcframework 拖放到您的目标的 框架、库 和 嵌入式内容 部分。
创建移动 SDK 认证令牌
为了对发送到 SDK 的每个请求进行身份验证,需要移动 SDK 认证令牌。使用我们的 iOS 移动 SDK 通过亚马逊支付服务处理支付操作也对令牌非常重要。
要开始使用我们的 iOS 移动 SDK,您必须首先建立生成移动 SDK 令牌的能力。
[注意]:创建和初始化移动 SDK 令牌发生在您的服务器上——您的服务器必须通过向亚马逊支付服务 API 发送请求来生成令牌。
[注意]:必须为每次交易创建一个唯一的身份验证令牌。如果同一设备未发送新的请求,每个身份验证令牌的有效期为仅一小时。
移动 SDK 令牌 URL
当您为您的 iOS 应用请求移动 SDK 令牌时,需要使用以下 URL
测试环境 URL
https://sbpaymentservices.payfort.com/FortAPI/paymentApi
生产环境 URL
https://paymentservices.payfort.com/FortAPI/paymentApi
curl -H "Content-Type: application/json" -d
'{"command":"SDK_TOKEN","language":"en","access_code":"xxxxx","merchant_identifier":"xxxx",,"language":"en","device_id":"ffffffff-a9fa-0b44-7b27-29e70033c587",
"signature":"7cad05f0212ed933c9a5d5dffa31661acf2c827a"}'
https://sbpaymentservices.payfort.com/FortAPI/paymentApi
有关 SDK 令牌的更多信息,请参阅此处
使用 iOS SDK 处理交易
作为商家,您有两种方式可以使用亚马逊支付服务的 iOS 移动 SDK 处理支付。
-
标准支付界面。您可以使用标准亚马逊支付服务 iOS SDK 接口显示标准支付界面。
此标准支付视图可以通过三种方式自定义。您可以隐藏加载界面,并将展示样式从全屏更改为 OS 默认。您还可以自定义一些 UI 元素。我们将在本节中阐述如何自定义标准支付界面。(见此处)
-
自定义集成。您可以选择通过编写自己的支付处理页面来构建自己的支付处理屏幕。借助这一移动SDK功能,我们允许商家在不显示我们标准支付屏幕的情况下集成原生应用结账体验——同时仍可使用SDK功能快速上线。
标准结账步骤
以下是使用我们标准UI进行结账需要遵循的步骤。请参考下一节了解如何构建自己的定制化支付UI。关于标准结账实现的详细实现,请参阅此处
将框架导入到您的应用中
首先,导入Amazon Payment Service iOS SDK库。您可以通过以下代码来完成此操作Objective-C
#import < PayFortSDK/PayFortSDK-Swift.h>
Swift
import PayFortSDK
初始化控制器
在目标环境中初始化 **PayFortController**。您通过设置以下两个ENUM之一来设置目标环境,即 **PayFortEnviromentSandBox** 或 **PayFortEnviromentProduction**Objective-C
PayFortController *payFort = [[PayFortController alloc]initWithEnviroment: PayFortEnviromentSandBox];
Swift
let payFort = PayFortController.init(enviroment: .sandBox)
准备请求数据
设置一个包含SDK所有键和值的字典Objective-C
NSMutableDictionary *request = [[NSMutableDictionary alloc]init];
[request setValue:@"10000" forKey:@"amount"];
[request setValue:@"AUTHORIZATION" forKey:@"command"];
[request setValue:@"USD" forKey:@"currency"];
[request setValue:@ "[email protected]" 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" : "[email protected]",
"installments" : "",
"language" : "en",
"sdk_token" : "token"]
响应回调函数
Amazon Payment Services 允许您在交易完成后检索和接收处理交易后的一次响应参数。这仅发生在安装过程中。这是您需要使用的代码:**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);
}];
Swift
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")
})
标准UI结账完整示例代码
以下示例代码显示了如何使用标准视图处理支付。代码样本说明了如何在移动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 protected]" 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) {
}];
Swift
let request = ["amount" : "1000",
"command" : "AUTHORIZATION",
"currency" : "AED",
"customer_email" : "[email protected]",
"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)")
})
定制标准支付UI
当您使用标准支付UI时,可以通过多种方式定制我们的iOS SDK提供的支付UI,以更好地反映您的业务。我们将在下面说明您的选项。
自定义标准支付UI
您可以在iOS应用程序中自定义标准支付用户界面。
标准与自定义移动SDK支付页面
按照以下步骤配置自定义支付UI
-
创建您的 nibFile .xib,并设置阿拉伯语xib的名称与英语相同,加上后缀-ar。
-
将xib链接到PayFortView,并将接口部分的所有IBOutlets绑定到IBOutlet UILabel *titleLbl;
IBOutlet UIButton *BackBtn;
IBOutlet UILabel *PriceLbl;
IBOutlet JVFloatLabeledTextField *CardNameTxt;
IBOutlet JVFloatLabeledTextField *CardNumberTxt;
IBOutlet JVFloatLabeledTextField *CVCNumberTxt;
IBOutlet JVFloatLabeledTextField *ExpDateTxt;
IBOutlet UILabel *cardNumberErrorlbl;
IBOutlet UILabel *cVCNumberErrorlbl;
IBOutlet UILabel *expDateErrorlbl;
IBOutlet UISwitch *savedCardSwitch;
IBOutlet UIButton *paymentBtn;
IBOutlet UILabel *saveCardLbl;
IBOutlet UIImageView *imageCard;
- 将新创建的xib文件指定给Amazon Payment Services控制器。
[payFort setPayFortCustomViewNib:@\"PayFortView2\"\];
【注意】如果您调用阿拉伯视图,而阿拉伯视图不存在,则应用程序将崩溃。
别忘了在身份检查器中设置自定义视图字段
使用自定义支付处理UI
在本节中,我们概述了您需要创建自己的支付处理屏幕时使用iOS SDK中的工具的关键信息。
阶段1:生成SDK令牌
在您开始使用自定义支付处理UI处理支付之前,您需要生成一个SDK令牌。请参阅本文件中较早的SDK令牌部分以获取创建SDK令牌的说明。
阶段 2:创建卡片组件
您可以使用包含在亚马逊支付服务iOS SDK中的以下五个组件来创建自定义支付屏幕:
-
CardNumberView
-
CVCNumberView
-
ExpiryDateView
-
CardHolderNameView
-
PayButton
组件视图
Item属性,所有这些属性都适用于每个组件。
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
CardNumberView
CardNumberView 继承自 UIView,CardNumberView 用于验证卡号、卡品牌和卡号长度。
Swift
@IBOutlet private weak var cardNumberView: CardNumberView!
cardNumberView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet CardNumberView *cardNumberView;
cardNumberView.property = property
ExpiryDateView
ExpiryDateView 继承自 UIView,**ExpiryDateView** 用于检查信用卡的有效期。Swift
@IBOutlet private weak var expiryDateView: ExpiryDateView!
expiryDateView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet ExpiryDateView *expiryDateView;
expiryDateView.property = property
CVCNumberView
CVCNumberView 继承自 UIView,**CVCNumberView** 用于检查 cvc 是否匹配卡品牌。Swift
@IBOutlet private weak var cvcNumberView: CVCNumberView!
cvcNumberView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet CVCNumberView *cvcNumberView;
cvcNumberView.property = property
HolderNameView
HolderNameView 继承自 UIView,**HolderNameView** 用于填写持卡人姓名。Swift
@IBOutlet private weak var holderNameView: HolderNameView!
holderNameView.property = property
Objective-c
@property (nonatomic, weak) IBOutlet holderNameView *holderNameView;
holderNameView.property = property
ErrorLabel
它将显示任何指向卡片视图的所有错误消息,您可以设置自己的自定义 UILabel,例如Swift
@IBOutlet private weak var cardNumberErrorLabel: ErrorLabel!
cardNumberView.errorLabel = cardNumberErrorLabel
Objective-c
@property (nonatomic, weak) IBOutlet ErrorLabel *cardNumberErrorLabel;
cardNumberView.errorLabel = cardNumberErrorLabel
Objective-C和Swift中组件视图的示例
这是自定义组件的一个示例
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;
阶段 3:开始支付
PayButton
用于从上面的卡片组件中收集卡数据,并提交成功支付。通过几个简单的步骤,它还具有直接支付的能力,无需使用卡片组件,请参阅下一节。PayfortPayButton方法
/**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)
示例代码
在本文档中,我们通过Swift和Objective-C的示例代码说明如何使用PayButton。
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
}
Objective-C
@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) {
}];
有关自定义结账实施的更多信息,请参阅此处