Интеграция платежной системы 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 дня. Стоимость рассчитывается индивидуально.