Төлем 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) | |
Кез келген басқа | Бір реттік құпиясөз |