Төлем SDK
SDK алу
iOS үшін төлемді SDK Github бетінде қолжетімді.
SDK жиынтығында екі класс пен бір делегат болады.
Жобаны iOS үшін реттеу
1. Жоба конфигурациясы
1.1 Жобаны жасау
1.2. Target ішіндегі Main interface өрісін тазалау.
1.3 AppDelegate.swift бөлімінде ViewController басты бет ретінде көрсету.
//AppDelegate.swift
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window!.rootViewController = UINavigationController(rootViewController: ViewController())
window!.makeKeyAndVisible()
return true
}
...1.4 AppDegate.swift бөлімінде функцияларды орындау:
...
func applicationWillResignActive(_ application: UIApplication) {}
func applicationDidEnterBackground(_ application: UIApplication) {}
func applicationWillEnterForeground(_ application: UIApplication) {}
func applicationDidBecomeActive(_ application: UIApplication) {}
func applicationWillTerminate(_ application: UIApplication) {}
}
Нәтиже
2. CardKit.framework интеграциясы
CardKit.framework төмендегі үші әдістің біреуімен интеграциялауға болады.
- CardKit.framework қолмен қосу.
- Carthage арқылы орнату.
- Pod арқылы орнату.
2.1 CardKit.framework файлын алып, жоба қалтасына тасымалдау
2.2. Targets -> General -> Frameworks, Libraries, and Embedded Content ашу. CardKit.framework құрылымындағы embeded бағанында Do not Embed мәнін Embed & Sign мәніне ауыстыру.
2.3. ViewController.swift файлындағы фрэймворкты импорттау.
Carthage
1) Cartfile жасау.
2)github "Radarpayments/CardKit" жолын файлға импорттау.
Pod
1) Pod іске қосу.
2) pod 'CardKit', :git => 'https://github.com/Radarpayments/ios-sdk.git' Podfile файлына қосу.
//ViewController.swift
...
import CardKit
...3. SDK пайдалану
3.1 cardKitViewController функциясын орындау:
//SampleCardKPaymentView.swift
extension SampleCardKPaymentView: CardKDelegate {
func cardKitViewController(_ controller: CardKViewController, didCreateSeToken seToken: String, allowSaveBinding: Bool, isNewCard: Bool) {
debugPrint(seToken)
let alert = UIAlertController(title: "SeToken", message: seToken, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
controller.present(alert, animated: true)
}
...
}3.2 Функцияны орындау: didLoad(\_ controller: CardKViewController)
didLoad(\_ controller: CardKViewController) назнaчаются атрибуты CardKViewController.
//ViewController.swift
extension ViewController: CardKDelegate {
...
func didLoad(_ controller: CardKViewController) {
controller.allowedCardScaner = CardIOUtilities.canReadCardWithCamera();
controller.purchaseButtonTitle = "Custom purchase button";
controller.allowSaveBinding = true;
controller.isSaveBinding = true;
controller.displayCardHolderField = true;
}
...
}3.3 Функцияны орындау: willShow(_ paymentView: CardKPaymentView)
//
extension ViewController: CardKDelegate {
...
func willShow(_ paymentView: CardKPaymentView) {
let paymentNetworks = [PKPaymentNetwork.amex, .discover, .masterCard, .visa]
let paymentItem = PKPaymentSummaryItem.init(label: "Test", amount: NSDecimalNumber(value: 10))
let merchandId = "t";
paymentView.merchantId = merchandId
paymentView.paymentRequest.currencyCode = "USD"
paymentView.paymentRequest.countryCode = "US"
paymentView.paymentRequest.merchantIdentifier = merchandId
paymentView.paymentRequest.merchantCapabilities = PKMerchantCapability.capability3DS
paymentView.paymentRequest.supportedNetworks = paymentNetworks
paymentView.paymentRequest.paymentSummaryItems = [paymentItem]
paymentView.paymentButtonStyle = .black;
paymentView.paymentButtonType = .buy;
paymentView.cardPaybutton.backgroundColor = .white;
paymentView.cardPaybutton.setTitleColor(.black, for: .normal);
paymentView.cardPaybutton.setTitle("Custom title", for: .normal);
}
...
}3.4 CardKPaymentView көрсету
//ViewController.swift
...
@objc func _openController() {
CardKConfig.shared.theme = CardKTheme.light();
CardKConfig.shared.language = "";
CardKConfig.shared.bindingCVCRequired = true;
CardKConfig.shared.bindings = [];
CardKConfig.shared.isTestMod = true;
CardKConfig.shared.mdOrder = "mdOrder";
let cardKPaymentView = CardKPaymentView.init(delegate: self);
cardKPaymentView.controller = self;
cardKPaymentView.frame = CGRect(x: width * 0.5 - 50, y: height * 0.5 - 300, width: 100, height: 100);
self.view.addSubview(cardKPaymentView);
}
...Нәтиже
CardKConfig нысан сипаттары
| Атау | Деректер түрі | Әдепкі мәні | Міндетті емес | Сипаттама |
|---|---|---|---|---|
theme |
CardKTheme | CardKTheme.defaultTheme() |
Иә | Пайдаланушы интерфейсінің түс тақырыбы. |
language |
String | nil | Иә | Пайдаланушы интерфейсінің тілі. |
bindingCVCRequired |
Boolean | false |
Иә | Осыдан бұрын сақталған картамен төлеу үшін CVC талап етіледі. |
isTestMod |
Boolean | false |
Иә | Сынақ кілттерді таңдау үшін сынақ режимде іске қосу. |
mdOrder |
String | - | Жоқ | Криптограмма арқылы төлеуге болатын тапсырыс идентификаторы. |
bindings |
[CardKBinding] | - | Жоқ | Байламдар массиві. |
cardKProdKey |
String | <Public key> |
Иә | Белсенді ортаға арналған ашық кілт. |
cardKTestKey |
String | <Public key> |
Иә | Сынақ ортаға арналған ашық кілт. |
testURL |
String | <URL> |
Иә | Сынақ кілтті сұрауға арналған URL. |
prodURL |
String | <URL> |
Иә | Белсенді кілтті сұрауға арналған URL. |
mrBinURL |
String | nil | Жоқ | Кескіндерді көрсетуге арналған түбірлік URL, мысалы: https://mrbin.io/bins/
|
mrBinApiURL |
String | nil | Жоқ | Банк идентификациясына арналған URL. |
bindingsSectionTitle |
String | nil | Иә | Байламдар тізімі бар бөлімнің тақырыбы. |
Мысал
...
CardKConfig.shared.theme = CardKTheme.dark();
CardKConfig.shared.language = "";
CardKConfig.shared.bindingCVCRequired = true;
CardKConfig.shared.bindings = [];
CardKConfig.shared.isTestMod = true;
CardKConfig.shared.mdOrder = "mdOrder";
...Тақырыпты таңдау
Қараңғы және ашық тақырыптарға қолдау көрсетіледі. iOS 13.0 және одан кейінгі нұсқалар жүйелік параметрлерге байланысты тақырыптардың автоматты ауысуына қолдау көрсетеді.
// Light theme
CardKConfig.shared.theme = CardKTheme.light();
// Dark theme
CardKConfig.shared.theme = CardKTheme.dark();
// iOS system theme - ONLY FOR IOS 13.0+ (supports auto switching)
CardKConfig.shared.theme = CardKTheme.system();Тақырып сипаттарын қайта анықтау
Тақырып сипаттары:
| Нөмір | Сипат атауы |
|---|---|
| 1 | colorLabel |
| 2 | colorPlaceholder |
| 3 | colorErrorLabel |
| 4 | colorCellBackground |
| 5 | colorTableBackground |
| 6 | colorSeparatar |
| 7 | colorButtonText |
Тақырыпты қайта анықтау мысалы:
func _openCustomTheme() {
...
theme.colorLabel = UIColor.black;
theme.colorPlaceholder = UIColor.gray;
theme.colorErrorLabel = UIColor.red;
theme.colorTableBackground = UIColor.lightGray;
theme.colorCellBackground = UIColor.white;
theme.colorSeparatar = UIColor.darkGray;
theme.colorButtonText = UIColor.orange;
...
}Локализация
Қазіргі уақытта 5 тіл қолжетімді:
-
de- неміс -
en- ағылшын -
es- испан -
fr- француз -
ru- орыс -
uk- украин
// language = "de" | "en" | "es" | "fr" | "ru" | "uk";
CardKConfig.shared.language = language;CardKViewController инициализациясы
mdOrder- тапсырыс идентификаторы бар жол
CardKViewController(mdOrder: mdOrder);CardKViewController нысан сипаттары
| Сипат атауы | Деректер түрі | Әдепкі мәні | Міндетті емес | Сипаттама |
|---|---|---|---|---|
cKitDelegate |
id<CardKViewControllerDelegate> |
nil |
Жоқ | - |
allowedCardScaner |
Boolean | false |
Иә | Карталар сканерін пайдалануға рұқсат беру. |
purchaseButtonTitle |
String | Purchase |
Иә | Түйме мәтінін қайта анықтау. |
isTestMod |
Boolean | false |
Иә | Сынақ кілттерді таңдау үшін сынақ режимде іске қосу. |
allowSaveBinding |
Boolean | false |
Иә | «Картаны сақтау» тумблерін көрсету. |
isSaveBinding |
Boolean | false |
Тумблердің әдепкі мәні. | |
displayCardHolderField |
Boolean | false |
Карта иесін енгізу өрісін көрсету. |
СardKViewControler атрибуттарына жаңа параметрлерді қосу үшін мына функцияны іске асыру керек: didLoad(\_ controller: CardKViewController). didLoad(\_ controller: CardKViewController) назначаются атрибуты CardKViewController.
//ViewController.swift
func didLoad(_ controller: CardKViewController) {
controller.allowedCardScaner = CardIOUtilities.canReadCardWithCamera();
controller.purchaseButtonTitle = "Custom purchase button";
controller.allowSaveBinding = true;
controller.isSaveBinding = true;
controller.displayCardHolderField = true;
}Аргументтер сипаттамасы
Sdk жиынтығын көрсету үшін create статикалық әдісін, CardKViewController класында шақыру қажет.
create функция аргументтері:
| Атау | Деректер түрі | Әдепкі мәні | Міндетті емес | Сипаттама |
|---|---|---|---|---|
self |
UIViewController | nil |
Жоқ | басты контроллер сілтемесі |
navigationController |
UINavigationController | nil |
Иә | навигациялық контроллер |
controller |
CardKViewController | nil |
Жоқ |
CardKViewController іске қосылған нысан |
create функциясының нәтижесі – UIViewController класындағы нысан
let controller = CardKViewController();
controller.cKitDelegate = self;
CardKViewController.create(self, controller: controller);
iPad қолдауы. Пішінді Popover түрінде көрсету
Тақырыпты таңдау және
CardKViewControllerіске қосу.
// ViewController.swift
CardKConfig.shared.theme = CardKTheme.dark();
let controller = CardKViewController(mdOrder:"mdOrder");
controller.cKitDelegate = self
controller.allowedCardScaner = false;
...Ағымдағы құрылғының IOS нұсқасын тексеру. 13.0+ нұсқасы болса, пішінді көрсету.
...
if #available(iOS 13.0, *) {
self.present(controller, animated: true)
return;
}
...
< 13.0нұсқасы болса,UINavigationControllerіске қосып,modalPresentationStyleатрибутына.formSheetмәнін беру.
...
let navController = UINavigationController(rootViewController: controller)
navController.modalPresentationStyle = .formSheet
...
leftBarButtonItemатрибутынаCardKViewControllerконтроллеріндеUIBarButtonItemкласындағы нысанды беру.
...
let closeBarButtonItem = UIBarButtonItem(
title: "Close",
style: .done,
target: self,
action: #selector(_close(sender:)) //_close function is implemented below.
)
controller.navigationItem.leftBarButtonItem = closeBarButtonItem
...Пішінді көрсету:
...
self.present(navController, animated: true)
_closeфункциясы
@objc func _close(sender:UIButton){
self.navigationController?.dismiss(animated: true, completion: nil)
}
Төлем пішінін жеке бетте көрсету
1) Тақырыпты таңдау және CardKViewController іске қосу.
// ViewController.swift
CardKConfig.shared.theme = CardKTheme.light();
let controller = CardKViewController(mdOrder:"mdOrder");
controller.cKitDelegate = self
controller.allowedCardScaner = true
controller.purchaseButtonTitle = "Custom purchase button";
...2) CardKViewController NavigationController файлына қосу.
...
self.navigationController?.pushViewController(controller, animated: true)
SeToken алу
SeToken алу үшін cardKitViewController функциясын орындау қажет.
-
controller-CardKViewControllerкласындағы нысан -
didCreateSeToken- дайынSeToken
// ViewController.swift
func cardKitViewController(_ controller: CardKViewController, didCreateSeToken seToken: String) {
debugPrint(seToken)
...
controller.present(alert, animated: true)
}Card.io құралымен жұмыс
Card.io құралымен жұмыс істеу үшін:
1) SampleAppCardIO класын cardIOView функциясымен орындау;
-
cardIOView-CardIOViewкласындағы нысан -
didScanCard- сканерлеуден кейінгі карта деректері.
Карта деректері бар болса, setCardNumber функциясын шақырып, карта деректерін береміз.
// ViewController.swift
class SampleAppCardIO: NSObject, CardIOViewDelegate {
weak var cardKController: CardKViewController? = nil
func cardIOView(_ cardIOView: CardIOView!, didScanCard cardInfo: CardIOCreditCardInfo!) {
if let info = cardInfo {
cardKController?.setCardNumber(info.cardNumber, holderName: info.cardholderName, expirationDate: nil, cvc: nil)
}
cardIOView?.removeFromSuperview()
}
}Класты орындау мысалы осында көрсетілген.
2 cardKitViewControllerScanCardRequest() функциясын орындау.
-
cotroller-CardKViewControllerкласындағы нысан
// ViewController.swift
func cardKitViewControllerScanCardRequest(_ controller: CardKViewController) {
let cardIO = CardIOView(frame: controller.view.bounds)
cardIO.hideCardIOLogo = true
cardIO.scanExpiry = false
cardIO.autoresizingMask = [.flexibleWidth, .flexibleHeight]
sampleAppCardIO = SampleAppCardIO()
sampleAppCardIO?.cardKController = controller
cardIO.delegate = sampleAppCardIO
controller.showScanCardView(cardIO, animated: true)
}3) allowedCardScaner атрибутына True мәнін беру. CardIOUtilities.canReadCardWithCamera() Функциясын пайдалану ұсынылады.
4) CardIOUtilities.preloadCardIO() функциясын шақыру.
// ViewController.swift
func _openController() {
...
controller.allowedCardScaner = CardIOUtilities.canReadCardWithCamera();
...
CardIOUtilities.preloadCardIO()
}Apple pay түймесін реттеу
-
CardKPaymentViewіске қосу.
let cardKPaymentView = CardKPaymentView.init(delegate: self);
cardKPaymentView.controller = self;
cardKPaymentView.frame = CGReact(x: 0, y: 0, width: 100, height: 100);-
PKPaymentViewреттеу.
| Атау | Деректер түрі | Әдепкі мәні | Міндетті емес | Сипаттама |
|---|---|---|---|---|
merchantId |
String | nil |
Жоқ | Apple pay жүйесінде төлеу үшін merchantId
|
paymentRequest |
PKPaymentRequest | nil |
Жоқ | Төлем деректерін сипаттау нысаны. |
paymentButtonType |
PKPaymentButtonType | nil |
Жоқ | ApplePay түймесінің түрі |
paymentButtonStyle |
PKPaymentButtonStyle | nil |
Жоқ | ApplePay түйме көрінісі. |
cardPaybutton |
UIButton | nil |
Иә | «Картамен төлеу» түймесін реттеу. |
func willShow(_ paymentView: CardKPaymentView) {
let paymentNetworks = [PKPaymentNetwork.amex, .discover, .masterCard, .visa]
let paymentItem = PKPaymentSummaryItem.init(label: "Test", amount: NSDecimalNumber(value: 10))
let merchandId = "t";
paymentView.merchantId = merchandId
paymentView.paymentRequest.currencyCode = "USD"
paymentView.paymentRequest.countryCode = "US"
paymentView.paymentRequest.merchantIdentifier = merchandId
paymentView.paymentRequest.merchantCapabilities = PKMerchantCapability.capability3DS
paymentView.paymentRequest.supportedNetworks = paymentNetworks
paymentView.paymentRequest.paymentSummaryItems = [paymentItem]
paymentView.paymentButtonStyle = .black;
paymentView.paymentButtonType = .buy;
paymentView.cardPaybutton.backgroundColor = .white;
paymentView.cardPaybutton.setTitleColor(.black, for: .normal);
paymentView.cardPaybutton.setTitle("Custom title", for: .normal);
}Мысалдар
- Төлем нәтижелерін алу
PKPayment алу үшін cardKPaymentView функциясын орындау қажет.
-
paymentView-CardKPaymentViewкласындағы нысан -
PKPayment- төлем нәтижесі,PKPaymentкласына жататын нысан.
func cardKPaymentView(_ paymentView: CardKPaymentView, didAuthorizePayment pKPayment: PKPayment) {
...
}Байламдармен жұмыс істеу
Байламдардың көрінісі
CardKConfing ішіндегі bindings массиві бос болмаса, байламдар тізімі бар контроллер көрсетіледі. Массив бос болса, жаңа картаны жасау пішіні көрсетіледі.
CardKBinding нысан сипаттары:
| Атау | Деректер түрі | Әдепкі мәні | Міндетті емес | Сипаттама |
|---|---|---|---|---|
bindingId |
Нөмір | - | Жоқ | Байлам идентификаторы. |
paymentSystem |
String | - | Жоқ | Төлем жүйесі. |
cardNumber |
String | - | Жоқ | Карта нөмірі. |
expireDate |
String | - | Жоқ | Картаның қолданылу мерзімі. |
Cardholder өрісінің көрсетілуі
Өріс көрсетілуі үшін true мәнін displayCardHolderField өрісінде CardKViewController контроллерінде көрсету керек.
controller.displayCardHolderField = true;displayCardHolderField = true немесе false болған кездегі пішіннің көрсетілу мысалы.
«Картаны сақтау» тумблерінің көрсетілуі
Пішінде тумблер көрсетілуі үшін true мәнін allowSaveBinding өрісінде CardKViewController контроллерінде көрсету керек. Әдепкі бойынша тумблер мәнін басқару үшін isSaveBinding мәнін CardKViewController контроллерінде орнату керек.
controller.allowSaveBinding = true;allowSaveBinding = true немесе false болған кезде пішіннің көрсетілу мысалы.
CVC өрісінің көрсетілуі
Таңдалған байламның төлем нысанындағы CVC өрісі көрсетілуі үшін true мәнін bindingCVCRequired өрісінде CardKConfing контроллерінде орнату керек.
CardKConfig.shared.bindingCVCRequired = true;bindingCVCRequired = true немесе false болған кездегі пішіннің көрсетілу мысалы.
SeToken
SeToken алу үшін cardKitViewController функциясын орындау қажет.
-
allowSaveBinding- пайдаланушыға жаңа карталарды сақтауға рұқсат беру; -
isNewCard- жаңа картамен немесе байламмен төлем жасау. Жаңа карта -true, байлам -false.
3DS2 бітеуіші
SDK3DS2 жиынтығында бітеуішті пайдалануға болады. SDK экрандары тапсырыс сомасына байланысты болады.
| Сома | Экран | Сурет |
|---|---|---|
| 111 | Радио-топ | ![]() |
| 222 | Көптеген таңдау | ![]() |
| 333 | Веб (кірістірілген HTML) | ![]() |
| Кез келген басқа | Бір реттік құпиясөз | ![]() |



