Tinkoff Acquiring SDK for iOS
AcquiringSdk_iOS 仓库中
注意!Acquiring SDK 的 2.0 版本已出现,现在位于我们建议您升级到新版本的库。
版本 2.0 提供了新功能
- 支持通过 快速支付系统 进行支付
- 全新的现代屏幕设计
- 现在库是用 Swift 编写的,并且 API 也得到了改进和重构。
当前的 1.5.х 版本仍将继续运行
Acquiring SDK 允许将 Tinkoff Интернет-Эквайринг 集成到 iOS 平台的移动应用程序中。
SDK 功能
- 接收支付(包括 recurring payments)
- 保存客户的银行卡信息
- 通过相机扫描和识别卡片
- 获取客户及其保存的卡片信息
- 管理保存的卡片
- 支持英语和本地化
- 支持使用 ApplePay 进行支付
要求
为了运行 Tinkoff Acquiring SDK,需要 iOS 8.0 或以上版本。
连接
建议使用 Cocoa Pods 来连接 SDK。请在 Podfile 中添加依赖
pod 'CardIO'
pod 'ASDKCore', :podspec => "https://raw.githubusercontent.com/TinkoffCreditSystems/tinkoff-asdk-ios/master/ASDKCore.podspec"
pod 'ASDKUI', :podspec => "https://raw.githubusercontent.com/TinkoffCreditSystems/tinkoff-asdk-ios/master/ASDKUI.podspec"
如果没有使用 Cocoa Pods,可以将 ASDKUI.xcodeproj 添加到您的项目中。
准备工作
开始使用 SDK 需要以下信息
- 终端密钥
- 密码
- 公钥
这些信息通常在连接到 Tinkoff Internet acquiring 后获得。
工作示例
测试应用程序 ASDKSampleApp 通过卡号/已保存卡支付商品
BookItem *item;
[PayController buyItemWithName:self.item.title
description:self.item.bookDescription
amount:self.item.cost
additionalPaymentData:@{@"Email":@"[email protected]", @"Phone":@"+71234567890"}
receiptData:@{@"Email":@"[email protected]", @"Taxation":@"osn",
@"Items":@[@{@"Name":@"Название товара 1",@"Price":@100,@"Quantity":@1, @"Amount":@100, @"Tax":@"vat10"},
@{@"Name":@"Название товара 2",@"Price":@100,@"Quantity":@1,@"Amount":@100, @"Tax":@"vat118"}]}
fromViewController:self
success:^(NSString *paymentId) { NSLog(@"%@",paymentId); }
cancelled:^ { NSLog(@"Canceled"); }
error:^(ASDKAcquringSdkError *error) { NSLog(@"%@",error); }];
通过 Apple Pay 支付商品
BookItem *item;
if ([PayController isPayWithAppleAvailable])
{
PKContact *shippingContact = [[PKContact alloc] init];
shippingContact.emailAddress = @"[email protected]";
shippingContact.phoneNumber = [CNPhoneNumber phoneNumberWithStringValue:@"+74956481000"];
CNMutablePostalAddress *postalAddress = [[CNMutablePostalAddress alloc] init];
[postalAddress setStreet:@"Головинское шоссе, дом 5, корп. 1,"];
[postalAddress setCountry:@"Россия"];
[postalAddress setCity:@"Москва"];
[postalAddress setPostalCode:@"125212"];
[postalAddress setISOCountryCode:@"643"];
shippingContact.postalAddress = [postalAddress copy];
[PayController buyWithApplePayAmount:self.item.cost
description:self.item.title
email:shippingContact.emailAddress
appleMerchantId:@"merchant.tcsbank.ApplePayTestMerchantId"
shippingMethods:nil //example @[[PKShippingMethod summaryItemWithLabel:@"Доставка" amount:[NSDecimalNumber decimalNumberWithString:@"300"]]]
shippingContact:shippingContact
shippingEditableFields:PKAddressFieldPostalAddress|PKAddressFieldName|PKAddressFieldEmail|PKAddressFieldPhone //PKAddressFieldNone
additionalPaymentData:nil
receiptData:@{@"Email":@"[email protected]", @"Taxation":@"osn",
@"Items":@[@{@"Name":@"Название товара 1",@"Price":@100,@"Quantity":@1, @"Amount":@100, @"Tax":@"vat10"},
@{@"Name":@"Название товара 2",@"Price":@100,@"Quantity":@1,@"Amount":@100, @"Tax":@"vat118"}]}
fromViewController:self
success:^(NSString *paymentId) { NSLog(@"%@", paymentId); }
cancelled:^{ NSLog(@"Canceled"); }
error:^(ASDKAcquringSdkError *error) { NSLog(@"%@", error); }];
}
绑定新卡进行支付
[PayController attachCard:self.addNewCardCheckType // тип проверки ASDKCardCheckType
additionalData:@{@"Email":@"[email protected]"}
fromViewController:self
success:^(ASDKResponseAddCardInit *response) {
//
} cancelled:^{
//
} error:^(ASDKAcquringSdkError *error) {
//
}];
[1] 可循环支付可以从已保存的卡中扣除资金,无需输入卡号。此功能可用于订阅支付。
指定自己的本地化文件
ASDKLocalized *loc = [ASDKLocalized sharedInstance];
[loc setLocalizedBundle:[NSBundle mainBundle]];
[loc setLocalizedTable:@"ASDKlocalizableRu"];
结构
SDK 由以下模块组成
ASDKCore
是用于与 Tinkoff Acquiring API 交互的基础模块。模块实现与服务器交互的协议,允许避免直接与 ASDKAcquiringApi 交互。
模块的主要类 - AcquiringSdk - 为与 Tinkoff Acquiring API 交互提供了界面。为了工作,需要销售者的密钥和密码(参看 准备工作)。
ASDKUI
包含接收通过移动应用程序进行的支付的界面。
主要类 - ASDKPaymentFormViewController - 是一个带有支付表单的屏幕,允许
- 查看支付信息
- 输入或扫描卡的信息以支付
- 通过 3DS 确认
- 管理权限保存在之前的卡
支付屏幕的设置
为了设置支付屏幕元素,请使用 ASDKDesignConfiguration。
- 在导航面板中设置按钮和标题的颜色。
- 设置“支付”按钮。
- 设置屏幕元素的显示。
- 设置自己的支付系统标志或所需内容。
- 为iPad屏幕以FormSheet模式显示SDK屏幕。
例如,可以指定在屏幕上显示哪些元素以及它们的顺序,为此需要创建一个包含元素的数组。
typedef NS_ENUM(NSInteger, TableViewCellType)
{
CellProductTitle, // Заголовок, занвание товара
CellProductDescription, // Описание товара
CellAmount, // сумма
CellPyamentCardRequisites,// поле для ввода реквизитов карты
CellEmail, // поле для ввода email
CellPayButton, // кнопка оплатить
CellAttachButton, // кнопка привязать карту
CellSecureLogos, // логотипы платежных систем
CellEmpty20px, // пустое поле цвета фона таблицы высотой в 20 px
CellEmpty5px, // пустое поле цвета фона таблицы высотой в 5 px
CellEmptyFlexibleSpace // пустая строка высота которой занимает всё доступное пространство
};
// установить элементы экрана оплаты и их последовательность:
[ASDKDesignConfiguration setPayFormItems:@[@(CellProductTitle),
@(CellProductDescription),
@(CellAmount),
@(CellPyamentCardRequisites),
@(CellEmail),
@(CellEmpty20px),
@(CellPayButton),
@(CellSecureLogos)
]];
// изменить на кнопке оплатить надпись:
[ASDKDesignConfiguration setPayButtonTitle:[NSString stringWithFormat:@"Оплатить %.2f руб", [amount doubleValue]]];
// показывать окно модально для iPad
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
[designConfiguration setModalPresentationStyle:UIModalPresentationFormSheet];
}
示例
包含在移动销售书籍应用中集成Tinkoff Acquiring SDK的示例。主要的类和文件 *ASDKTestKeys 包含 终端密钥, 密码, 公钥。 PayController 是用于 ASDKAcquiringSdk 的门面,它创建 ASDKAcquiringSdk 的实例并(门面)提供支付功能。
支持
- 请将有关问题发送至 [email protected]
- 错误和功能请求可以发送到问题部分。
- 网站上的文档,API方法的描述https://oplata.tinkoff.ru/develop/api/payments/