Інтеграція платіжної системи Samsung Pay в мобільний додаток

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція платіжної системи Samsung Pay в мобільний додаток
Складний
~2-3 дні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція платіжної системи Samsung Pay в мобільному додатку

Samsung Pay має власний SDK, окремий від Google Pay, і працює лише на пристроях Samsung з підтримкою Samsung Wallet (раніше Samsung Pay). Основна особливість — підтримка як NFC, так і MST (Magnetic Secure Transmission), що дозволяє платити навіть на терміналах без безконтактного читача. Інтеграція вимагає реєстрації в Samsung Pay Developers Portal та отримання Service ID.

Реєстрація та отримання Service ID

Перед написанням коду:

  1. Реєструємося на pay.samsung.com/developers
  2. Створюємо Service Profile — вказуємо тип сервісу (In-App Payment), країну та назву
  3. Отримуємо Service ID для sandbox та production середовищ
  4. Завантажуємо CSR для генерування сертифіката (аналогічно Apple Pay)

Samsung Pay API підтримує дві моделі токенізації: через Payment Gateway (ваш еквайєр підтримує Samsung Pay) або через пряму інтеграцію з Samsung Pay Server.

Підключення SDK

// build.gradle (app)
dependencies {
    implementation files('libs/SamsungPaySDK-2.x.x.jar')
    // або через Maven, якщо доступно
}

Дозволи в AndroidManifest:

<uses-permission android:name="com.samsung.android.spay.permission.ACCESS_SERVICE" />

Перевірка доступності Samsung Pay

import com.samsung.android.sdk.samsungpay.v2.SamsungPay
import com.samsung.android.sdk.samsungpay.v2.SpaySdk
import com.samsung.android.sdk.samsungpay.v2.StatusListener

val bundle = Bundle().apply {
    putString(SamsungPay.PARTNER_SERVICE_TYPE, SpaySdk.ServiceType.INAPP_PAYMENT.toString())
}

val samsungPay = SamsungPay(context, bundle)

samsungPay.getSamsungPayStatus(object : StatusListener {
    override fun onSuccess(status: Int, bundle: Bundle) {
        when (status) {
            SpaySdk.SPAY_READY -> showSamsungPayButton()
            SpaySdk.SPAY_NOT_READY -> {
                // Samsung Pay встановлен, але не налаштований (немає карт)
                samsungPay.goToUpdatePage() // пропонуємо додати карту
            }
            SpaySdk.SPAY_NOT_SUPPORTED -> hideSamsungPayButton()
            SpaySdk.SPAY_NOT_ALLOWED_TEMPORALLY -> {
                // Тимчасово заблокований (MDM, захист пристрою)
                hideSamsungPayButton()
            }
        }
    }

    override fun onFail(errorCode: Int, bundle: Bundle) {
        hideSamsungPayButton()
    }
})

Створення та запуск платіжного запиту

import com.samsung.android.sdk.samsungpay.v2.payment.CustomSheetPaymentInfo
import com.samsung.android.sdk.samsungpay.v2.payment.PaymentManager
import com.samsung.android.sdk.samsungpay.v2.payment.sheet.*

val paymentInfo = CustomSheetPaymentInfo.Builder()
    .setMerchantId("YOUR_MERCHANT_ID")
    .setMerchantName("Your Company")
    .setOrderNumber("ORDER-1234")
    .setAddressInPaymentSheet(CustomSheetPaymentInfo.AddressInPaymentSheet.DO_NOT_SHOW)
    .setAllowedCardBrands(listOf(
        SpaySdk.Brand.VISA,
        SpaySdk.Brand.MASTERCARD,
        SpaySdk.Brand.MIR
    ))
    .setCardHolderNameEnabled(false)
    .setRecurringEnabled(false)
    .build()

val customSheet = CustomSheet()
val amountControl = AmountBoxControl("amountId", "RUB")
amountControl.addItem("subtotal", "Товари", 1250.0, "")
amountControl.addItem("shipping", "Доставка", 250.0, "")
amountControl.setAmountTotal(1500.0, AmountConstants.FORMAT_TOTAL_PRICE_ONLY)
customSheet.addControl(amountControl)

val paymentManager = PaymentManager(context, partnerInfo)

paymentManager.startInAppPayWithCustomSheet(
    paymentInfo,
    customSheet,
    object : PaymentManager.CustomSheetTransactionInfoListener {
        override fun onCardInfoUpdated(cardInfo: CardInfo, customSheet: CustomSheet) {
            // Викликається при зміні карти — оновлюємо загальну суму, якщо необхідно
            paymentManager.updateSheet(customSheet)
        }

        override fun onSuccess(response: CustomSheetPaymentInfo, paymentCredential: String, extraPaymentData: Bundle) {
            // paymentCredential — зашифрований токен для передачі на бекенд
            sendCredentialToBackend(paymentCredential)
        }

        override fun onFailure(errorCode: Int, bundle: Bundle) {
            handleError(errorCode)
        }
    }
)

Типові проблеми інтеграції

SPAY_NOT_SUPPORTED на пристрої Samsung. Трапляється, якщо: Samsung Pay не встановлений (на деяких ринках — Samsung Wallet), версія Android < 5.0, або пристрій зі старої лінійки без підтримки MST/NFC-платежів.

Помилка ERROR_NOT_SUPPORTED_ENVIRONMENT. Sandbox Service ID використовується з production-середовищем або навпаки. Samsung забезпечує суворий розділ — sandbox-додаток не працює з production Service ID.

onCardInfoUpdated викликається, але updateSheet не викликається. Samsung Pay чекає виклику updateSheet після кожного onCardInfoUpdated — інакше інтерфейс зависає. Це не баг, це обов'язковий паттерн.

Тестування

Samsung Pay вимагає фізичного пристрою Samsung. Емулятор не підтримується. Для sandbox-тестування додаємо тестову карту через розділ Samsung Pay Developer у налаштуваннях Samsung Pay.

Обсяг робіт

  • Реєстрація Service Profile в Samsung Pay Developers Portal
  • Інтеграція Samsung Pay SDK в Android-проект
  • Реалізація перевірки статусу та показу кнопки
  • Налаштування CustomSheet з позиціями замовлення
  • Обробка paymentCredential та передача постачальнику
  • Тестування на фізичному пристрої Samsung

Терміни

2–3 дні. Вартість розраховується індивідуально.