ããã«ã¡ã¯ïŒå€ã®åãã«ãTinkoff Acquiring SDKãæŽæ°ããAndroidããã³iOSçšã®2çªç®ã®ããŒãžã§ã³ããªãªãŒã¹ããŸãããTinkoff Acquiring SDKã¯ãã¢ãã€ã«ãã©ãããã©ãŒã çšã®ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªã§ããããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã§æ¯æããåãå ¥ãããšäŸ¿å©ã§ãããã®èšäºã§ã¯ãã€ã³ã¿ãŒãããããžãã¹ã®ææè ãšãã®è³Œå ¥è ã«ãšã£ãŠäœãã¯ãŒã«ãããäŒãããããšæããŸãã
æ¹åãããç¹
以åã®ããŒãžã§ã³ã«ãã£ãåé¡ïŒ
- è€éãªã©ã€ãã©ãªã¢ãŒããã¯ãã£ããã®ãããéçºè ã¯ãã°ã®æ€çŽ¢ãšä¿®æ£ã«å€ãã®æéãè²»ãããŸããã
- åé·ã©ã€ãã©ãªAPIãéçºè ã¯ãSDKãçµ±åãããšãã«ãã°ãã°ééããç¯ããŸããã
- ãããã®æ¯æãæ¹æ³ãèšå®ããããã®ApplePayããã³GooglePayã®èŠä»¶ã¯å®ãããŠããŸããã
ãããä¿®æ£ããããã«äœããããããããŠä»ã«äœãæ°ãããïŒ
- äž¡æ¹ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãŒããå®å šã«æžãçŽããŸãããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããå€ãã®äŸ¿å©ãªé¢æ°ã远å ããŸãããã©ã€ãã©ãªã¯çŸåšãKotlinãšSwiftã§æ©èœããŸãã
- é«éæ¯æãã·ã¹ãã ã远å ããŸãããæ¯æãç»é¢ã®ãã¿ã³ãã¯ãªãã¯ãããšãQRã³ãŒããŸãã¯ãã€ã³ã¹ã¿ã³ãã¢ã«ãŠã³ããã䜿çšããŠSBPçµç±ã§æ¯æãããšãã§ããŸãã
- ãªãŒã«ã€ã³ã¯ã³ãœãªã¥ãŒã·ã§ã³ããµããŒãããŸãããã¹ãŠã1ãæã§ïŒãªã³ã¯ã«ãŒããéæ¥è§Šæ¯æããQRã³ãŒãã䜿çšããé«éæ¯æãã
- ãã¶ã€ã³ãæŽæ°ããŸãããæãããŒãã远å ããŸããããããã以åã®ããŒãžã§ã³ã«ãã£ãAndroidã§ããŒããã«ã¹ã¿ãã€ãºããããšãå¿ããŸããã§ããã
- 以åã®ããŒãžã§ã³ã¯åŒãç¶ããµããŒããããŸããç§ãã¡ã¯ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«ã€ããŠèããå€ããã®ãšæ°ãããã®ãã ãŸããŸããã§ãã-SDKã¯æåãš2çªç®ã®ããŒãžã§ã³ã§åãããã«æ©èœããŸãããã ããæ°æ©èœãå©çšããã«ã¯ã¢ããã°ã¬ãŒãããããšããå§ãããŸãã
ãããŠä»ããã¹ãŠãé çªã«ã
Tinkoff Acquiring SDKãšã¯äœã§ããïŒ
SDKã¯ãã€ã³ã¿ãŒãããååŸãããããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«çµ±åãããªã³ã©ã€ã³ã¹ãã¢ãããŒã±ãããã¬ã€ã¹ãæ è¡äŒç€Ÿãã¯ãªãŒãã³ã°ãã¹ããªãŒãã³ã°ãµã€ããããªãŒã©ã³ã¹ååŒæãªã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ãªã³ã©ã€ã³æ¯æããåãå ¥ããããžãã¹ã«é©ããŠããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ã顧客ãã¢ããªã±ãŒã·ã§ã³ã§ã«ãŒãããªã³ã¯ããŠæ°åã¯ãªãã¯ããã ãã§è³Œå ¥ä»£éãæ¯æãã®ã«åœ¹ç«ã¡ã売ãæã¯ã¢ããªã±ãŒã·ã§ã³ãããæ©èœçã«ããŠããã§ãã¯ã¢ãŠã段éã§é¡§å®¢ã倱ãããšããªãããã«ããŸãã
SDKã§ã§ããããšã¯æ¬¡ã®ãšãã
ã§ããã«ã¡ã©ãšNFCã䜿çšããŠéè¡ã«ãŒããã¹ãã£ã³ããŠèªèããä¿åããŸããè³Œå ¥è ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ã«ãŒãã1åãªã³ã¯ããCVCã³ãŒãã®ã¿ãå ¥åããŠè³Œå ¥ã®æ¯æããè¡ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã§ãã¹ãŠã®çš®é¡ã®æ¯æããåãå ¥ããŸããéè¡ã«ãŒããå人ã¢ã«ãŠã³ãtinkoff.ruãApple PayãGooglePayã䜿çšããŸãã宿çãªæ¯æããå«ã¿ãŸã-ã€ãŸãã詳现ãåå ¥åããã«ããµãã¹ã¯ãªãã·ã§ã³ã«ãã£ãŠèªåçã«è¡ãããŸãã

Fast Pay SystemïŒFPSïŒã䜿çšããŠæ¯æããŸããSDKã¯ãUBSãä»ããæ¯æãã®åãå ¥ãã«åœ¹ç«ã¡ãŸããè³Œå ¥è ã¯ã泚æã«é¢ãããã¹ãŠã®æ å ±ãå«ãQRã³ãŒãã䜿çšããŠååã®æ¯æããè¡ããŸããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã§ã®æ¯æããšè«æ±ã®2ã€ã®ã·ããªãªãå®è£ ããŸãããã
ãªã³ã©ã€ã³ãã£ãã·ã£ãŒãšè²¡æ¿åãç¶æããŸãããã¹ãŠãFZ-54ã«æºæ ããŠããŸãã
ã¢ããªã±ãŒã·ã§ã³èšèšã®æ¯æããŠã£ã³ããŠãã«ã¹ã¿ãã€ãºããŸããAndroidã¢ããªã§å©çšã§ããŸãã
ã¢ãŒããã¯ãã£ã®æ¹å
åé¡ã SDKã³ãŒãã®ã¢ãŒããã¯ãã£ã¯ãæ°ããæ©èœãç¶æããã³å®è£ ããããšãå°é£ã§æéããããããã«èšèšãããŠããŸãã
決å®ã SDKéçºè ã¯ãã©ã€ãã©ãªã®å€ãã³ãŒãã®å®å šãªãªãã¡ã¯ã¿ãªã³ã°ãå®è¡ããŸããïŒ
-ã³ãŒãã¯ææ°ã®èšèªã§ããKotlinãšSwiftã§æžãããŠããŸããããã«ãããéçºããã»ã¹ãå éãããä¿å®ãšæ¡åŒµã容æãªäŸ¿å©ãªã¢ãŒããã¯ãã£ã®æ§ç¯ã«åœ¹ç«ã¡ãŸãããæ°ããæ©èœã®å°å ¥ãè¿ éã«ãªããé¡§å®¢ã¯æŽæ°ãããè¿ éã«åãåãããšãã§ããŸããæåã®ããŒãžã§ã³ã§ã¯ãã³ãŒãã¯JavaãšObjective-Cã§èšè¿°ãããŠããŸãã
-Androidã§ã¯ãç»é¢èšå®ã¯KotlinDSLã§äœæãããŸãããŸãããã¹ãŠã®ãã«ãã¹ã¬ããäœæ¥ã¯ã³ã«ãŒãã³äžã«æ§ç¯ãããŠããŸãããããã¯ãããã¯ãŒã¯ãžã®èŠæ±ã®åŠçã«åœ¹ç«ã¡ãŸãããã©ã€ãã©ãªã®ãµã€ãºã¯1MBæªæºããå¢å ããŸããã
-ãããžã§ã¯ãã§ã³ãŒãã®éãåæžãããŸãããGeneric enumãããã€ãã®åºæ¬ã¯ã©ã¹ã®ã¹ããŒãšæ¡åŒµã«ãããšã©ãŒåŠçã䜿çšããŸãããããžã§ã¯ãã®ä¿å®ã容æã«ãªããŸããã
-æŽæ°ãããAPIã©ã€ãã©ãªãç»é¢ã®åŒã³åºãæ¹æ³ã𿝿ãã®åºæ¬æ©èœã¯å¥ã®ã¯ã©ã¹ã«ç§»ãããŸãããããã¯ãã©ã€ãã©ãªã®åäžã®ãšã³ããªãã€ã³ãã§ããã³ãŒãå šäœã«æ£åšãããããã1ã€ã®å ŽæããAPIã¡ãœãããåŒã³åºãæ¹ãã¯ããã«ç°¡åã§ãã
ã¡ãœããã®æ§é ã¯ãAPIã®æäœã䟿å©ã§çè§£ããããããã«èšèšãããŠããŸããã¡ãœããã¯ååã«ææžåãããŠãããJavaãKotlinãSwiftã³ãŒãã®éåžžã®æšæºã«å¯Ÿå¿ããŠããŸãã
ããšãã°ãAndroid SDKã§æ¯æãç»é¢ã®èšå®ãçæãããèµ·åãããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
val tinkoffAcquiring = TinkoffAcquiring("terminalKey", "password", "publicKey")
val paymentOptions = PaymentOptions()
.setOptions {
orderOptions {
orderId = "777"
amount = Money.ofCoins(1000)
title = "Order Title"
description = "Order Description"
}
customerOptions {
customerKey = "user-key"
checkType = CheckType.HOLD.toString()
email = "useremail@gmail.com"
}
featuresOptions {
localizationSource = AsdkSource(Language.RU)
useSecureKeyboard = true
}
}
tinkoffAcquiring.openPaymentScreen(this, paymentOptions, PAYMENT_REQUEST_CODE)
IOS SDKã®äŸïŒ
let credentional = AcquiringSdkCredential(terminalKey: "terminalKey", password: "terminalPassword", publicKey: "testPublicKey")
let acquiringSDKConfiguration = AcquiringSdkConfiguration(credential: credentional)
if let sdk = try? AcquiringUISDK.init(configuration: acquiringSDKConfiguration) {
sdk.presentPaymentView(on: self, paymentData: createPaymentData(), configuration: acquiringViewConfiguration()) { [weak self] (response) in
self?.responseReviewing(response)
}
}
SDKã¯é¡§å®¢ã®ã¢ããªã±ãŒã·ã§ã³ãå¶éããŸãããããšãã°ãã©ã€ãã©ãªç»é¢ã ãã§ãªãæ¯æããåãå ¥ããããšãã§ããŸããããžãã¹ãªãŒããŒãšãã®éçºè ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ããå€ãã®æ©èœãå¿ èŠãšããå ŽåããããŸãã
ããšãã°ããã§ãã¯ã¢ãŠãç»é¢ã§ã¯ããµãŒããŒã«å¯ŸããŠ2ã€ã®èŠæ±ãè¡ããã売ãæã¯ã¢ããªã±ãŒã·ã§ã³ã§è¿œå ã®æ³šæåŠçãå¿ èŠãšããŸãããããã£ãŠãSDKç»é¢ãéãåã«ãèŠæ±ã®1ã€ãå®è¡ããå¿ èŠãããã2çªç®ã®èŠæ±ã¯ãã§ã«ç»é¢ã«è¡šç€ºãããŠããå¿ èŠããããŸããæã ã¯ãããè¡ãããšãã§ããŸãã
SDKã«ã¯ããã®ããã®åå¥ã®ã³ã¢ã¢ãžã¥ãŒã«ããããŸããããã¯ãã©ãããã©ãŒã ã«äŸåãããTinkoff AcquiringAPIã¡ãœãããåŒã³åºãããã«äœ¿çšã§ããŸãããŸããUIéšåãåããã¢ãžã¥ãŒã«ã¯ãSDKç»é¢ãªãã§ä»ã®ãœãªã¥ãŒã·ã§ã³ãæäŸããŸããããã¯ãç¹å®ã®æ®µéããæ¯æãç»é¢ãèµ·åãã远å ã®æ¹æ³ã§ãã
GooglePayãšApplePay
åé¡ãGoogleãšAppleã¯ãSDKæ¯æãç»é¢ã®ã«ãŒãã®æšªã§ã¯ãªããã¢ããªå ã®åå¥ã®ãã¿ã³ãšããŠèªåã§è¡ãå¿ èŠã®ããæ¯æãæ¹æ³ã衚瀺ããå¿ èŠããããŸããã¯ã©ã€ã¢ã³ãéçºè ã¯ãGooglePayãšApplePayã®èšå®ã«ããã«å€ãã®äœæ¥ãè¡ãå¿ èŠããããŸãã
決å®ãæŽæ°ãããSDKã«ãããGooglePayããã³ApplePayãä»ããæ¯æãã®åãå ¥ãã®ãµããŒããæ¹åãããŸããã
GoogleãšAppleã®èŠä»¶ãèæ ®ããŸãããåæã«éçºè ã®ã¿ã¹ã¯ãç°¡çŽ åããŸããã»ãšãã©ã®æ¯æãèšå®ã¯SDKã«ãã£ãŠåŠçãããã¯ã©ã€ã¢ã³ãã®éçºè ã¯ããã€ãã®ã¡ãœãããåŒã³åºãã ãã§æžã¿ãŸãã
ãããã®æ¹æ³ã¯æ¬¡ã®ããšãè¡ããŸãã
- GooglePayããã³ApplePayæ¯æããµãŒãã¹ã®èšå®ã
- ããã€ã¹äžã®ãµãŒãã¹ã®å¯çšæ§ãåŠçããŸãã
- æ¯æãã®ããã®ãµãŒãã¹ã³ãŒã«;
- æ¯æãçµæã®åŠçã
éçºè ãè¡ãå¿ èŠãããã®ã¯ããµãŒãã¹ã¬ã€ãã©ã€ã³ã«åŸã£ãŠãã¿ã³ãäœæããæ¯æãèšå®ãèšå®ããããŒã¯ã³ãSDKã«è»¢éããŠãTinkoffã®ã€ã³ã¿ãŒãããååŸãéããŠæ¯æããå®äºããããšã ãã§ãã
é«éæ¯æãã·ã¹ãã
ããã¯ãã£ã³ããã¯åžå Žã®æ°æ©èœã§ãããæ°æè¡ã§ãããããéçºè ã¯æåããSDKã«å®è£ ããå¿ èŠããããŸãããSBPã¯ãQRã³ãŒãã«ããæ¯æããåãå ¥ãã売ãæã®ã¢ã«ãŠã³ãã«å³åº§ã«ã¯ã¬ãžãããä»äžããã®ã«åœ¹ç«ã¡ãŸãã鱿«ãäŒæ¥ã§ããããã«å±ããŸãã
äœ¿ãæ¹ïŒ
- 泚æã®æ¯æãæã«ãè³Œå ¥è ã¯[SBPçµç±ã§æ¯æã]ãã¯ãªãã¯ããŸãã
- è²·ãæã¯éè¡ã®ç³ã蟌ã¿ãå ¥åããããã§ãéã®åŒãåºãã確èªããŸããéé¡ã¯ãæ¯æããã©ãŒã ã«èšèŒãããŸãã
- æ¯æãåŸããéã¯ããã«å£²ãæã®å£åº§ã«éãããŸãã

ã客æ§ã¯ãTinkoffPaymentsã®å人ã¢ã«ãŠã³ãã§æ°ããæ¯æãæ¹æ³ãæ¥ç¶ã§ããŸãããã®åŸãã¢ãã€ã«SDKã§ã顧客ã¯SBPãä»ããŠãã¿ã³ãšQRã³ãŒãã§æ¯æããåãå ¥ããããšãã§ããããã«ãªããŸãã
ãã€ã³ã¹ã¿ã³ãã¢ã«ãŠã³ãããæ¯æãç»é¢ã«SBPããŽã®ãã¿ã³ã衚瀺ãããŸãã
fpsEnabledç»é¢èšå®ã«ã¯ãAndroidSDKã®ã¯ã€ãã¯ãã§ãã¯ã¢ãŠããã¿ã³ãå«ãŸããŠããŸãã
var paymentOptions = PaymentOptions().setOptions {
orderOptions { /*options*/ }
customerOptions { /*options*/ }
featuresOptions {
fpsEnabled = true
}
}
iOS SDKã§ã¯ãbuttonPaySPBãæž¡ãå¿ èŠããããŸãã
let viewConfigration = AcquiringViewConfigration.init()
viewConfigration.fields = []
viewConfigration.fields.append(AcquiringViewConfigration.InfoFields.buttonPaySPB)
éçQRã³ãŒãã«ããã売ãæã¯èªåã®ããã€ã¹ã§æ¯æãç»é¢ãéãå¿ èŠããããè²·ãæã¯ç»é¢ããQRã³ãŒããã¹ãã£ã³ããå¿ èŠããããŸããããã¯ããã³ãã³ã°ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ä»»æã®QRãªãŒããŒã§å®è¡ã§ããŸããéè¡ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãéããè³Œå ¥è ã¯æ³šæéé¡ãå ¥åããŠååã®ä»£éãæ¯æããŸãã
SDKã®QRã³ãŒãæ¯æãç»é¢ã«å¯Ÿå¿ããæ¹æ³ããããŸããã¢ããªã±ãŒã·ã§ã³éçºè ã¯ãããŒã¯ã¢ããã§ãã¿ã³ãäœæããã¡ãœãããåŒã³åºãå¿ èŠããããŸãã
Androidã®å ŽåïŒ
tinkoffAcquiring.openStaticQrScreen(context, screenOptions, STATIC_QR_REQUEST_CODE)
iOSã§ã®æ¹æ³ïŒ
sdk.presentPaymentSbpQrImage(on: self, paymentData: createPaymentData(), configuration: acquiringViewConfiguration()) { [weak self] (response) in
self?.responseReviewing(response)
}
æŽæ°ããããã¶ã€ã³ãšæãããŒã
以åïŒ

çŸåšïŒ

ç»é¢ã®èšèšã«åãçµãã§ããŸãããèŠèŠèŠçŽ ãæŽæ°ãããŸãããçŸåšããããã¯ã¢ãã³ã«èŠããTinkoffã®äŒæ¥ã¢ã€ãã³ãã£ãã£ãšäžèŽããŠããŸãã以åã®ããŒãžã§ã³ãšåæ§ã«ãã¹ã¿ã€ã«å±æ§ã䜿çšããŠããŒãã®ã«ã¹ã¿ãã€ãºãAndroidã«æ®ããŸããããŠã£ã³ããŠã¯ã«ãŒãã®ããã«èŠããããå šç»é¢ã§éãããšãã§ããŸããããã屿§ã§ç°¡åã«èšå®ã§ããŸãã
ãŸããSDKç»é¢ã§ãããã€ã¹ã®æ°Žå¹³æ¹åãšæãããŒãããµããŒããããããã«ãªããŸãããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®èšå®ãç¶æããããã«ãAndroid SDKã§ã¯ã衚瀺èšå®ã§ããŒã¯ããŒãã¢ãŒããæå®ã§ããŸããå¯èœãªå€ïŒãåžžã«ãªã³ãããåžžã«ãªããããããã€ã¹ã®èšå®ãŸãã¯ããããªãŒç¯çŽã¢ãŒãã«å¿ããŠåãæ¿ããããiOS SDKã§ã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®èšå®ã«å¿ããŠããŒã¯ããŒããåãæ¿ãããŸãã
ç»é¢ã®ããŒã«ãªãŒãŒã·ã§ã³
åé¡ãããã€ã¹ã«ã€ã³ã¹ããŒã«ãããŠããèšèªã«å¿ããŠãSDKã®æšæºããŒã«ãªãŒãŒã·ã§ã³ã䜿çšããŸãããäžéšã®ã¯ã©ã€ã¢ã³ãã¯ãé«åºŠãªç»é¢ããŒã«ãªãŒãŒã·ã§ã³èšå®ãå¿ èŠãšããŠããŸããã
決å®ãAndroidSDKã®ç»é¢ããŒã«ãªãŒãŒã·ã§ã³ã®æ¡åŒµãµããŒããéå§ããŸãããããã§ãããã€ã¹ã®ãã±ãŒã«ã«äŸåããªããªããŸãããä»»æã®èšèªã§ç¬èªã®ããŒã«ãªãŒãŒã·ã§ã³ãäœæããããšããæšæºã®SDKããŒã«ãªãŒãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããããšãã§ããŸãããã·ã¢èªãšè±èªã®ããŒã«ãªãŒãŒã·ã§ã³ã¯ãåŒãç¶ãäž¡æ¹ã®ãã©ãããã©ãŒã ã§ãµããŒããããŠããŸãã
䜿ãå§ããæ¹æ³
SDKãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããã«ã¯ãæåã«TinkoffPaymentsã€ã³ã¿ãŒãããååŸã«æ¥ç¶ããå¿ èŠããããŸããè¿ éã§ããäºæ¥äž»ã¯ç³è«æžãæåºãã質åã«èšå ¥ããŸããããŒã¿ããã§ãã¯ãããã¹ãŠãæ£åžžã§ããããšã確èªããããSDKã®äœ¿çšãéå§ã§ããŸããéåžžãããã«ã¯2æ¥ä»¥å ããããŸãã
æ¥ç¶æ¹æ³ã©ã€ãã©ãªãããã¥ã¡ã³ãããœãŒã¹ã³ãŒããç§ãã¡ã®GitHubãåç §ããŠãã ããã
âãã¹ãŠã®Android SDK
â iOSã®SDK
ããªããä»»æã®ã©ã€ãã©ãªã«ã€ããŠã®è³ªåããããã¯æ°ããããŒãžã§ã³ãžã®ç§»è¡ã«å¿ èŠãªå©ããæã£ãŠããå Žåã¯ããé£çµ¡ãã ãããæã ã¯ããªããçè§£ããã®ã«åœ¹ç«ã€ïŒoplata@tinkoff.ruãããŸãã¯ãGitHubã®é©åãªã»ã¯ã·ã§ã³ã§åé¡ãäœæããŸãã