Mobile SDK Payment

Този SDK не само показва потребителския интерфейс за данни на картата, но също така взаимодейства с API на платежния шлюз. Освен това той обработва всички пренасочвания на 3DS и може да използва 3DS SDK като вграден. На търговеца му е по-лесно да интегрира плащания по този начин, но този SDK не е толкова гъвкав, колкото SDK Forms или SDK Core (няма възможност да се използват всички функции на платежния API).

Имайте предвид, че SDK Payment използва Mobile SDK 3DS2, а ACS на много издатели не работят правилно с Mobile SDK 3DS2.

Методи за плащане, поддържани от този SDK:

Метод за плащане Поддръжка
Банкова карта Да
Запазени идентификационни данни/карта Да
Apple Pay Да
Google Pay Да

Повече за SDK Payment

Процес на плащане SDK Payment

Web View за 3DS

На диаграмата по-долу е показан процесът на плащане SDK Payment с пренасочване на 3DS чрез Web View.

sequenceDiagram participant MA as Мобилно приложение participant MS as Мобилен сървър participant SDK as SDK participant PG as Платежен шлюз MA ->> MS: 1. клиент създава поръчка MS ->> PG: 2. регистрация на поръчка чрез API PG -->> MS: 3. уникален номер на поръчка (mdOrder) MA ->> SDK: 4. инициализация на SDK Payment SDK ->> SDK: 5. клиент въвежда данни SDK -->> PG: 6. изпращане на seToken PG ->> PG: 7. плащане (включва 3DS) opt Callback-уведомления са конфигурирани PG -->> MS: 8. callback-уведомление end MS ->> PG: 9. проверка на статуса на плащането MS ->> MA: 10. показване на резултата от плащането на клиента
  1. Клиентът създава поръчка
  2. Мобилният сървър регистрира тази поръчка в платежния шлюз чрез register.do. Използвайте параметъра returnUrl като маркер за затваряне на Web View след пренасочване от ACS.
  3. Мобилният сървър получава в отговор уникалния номер на поръчката mdOrder.
  4. Мобилното приложение инициира SDK Payment за събиране на платежните данни на клиента.
  5. Клиентът попълва платежните данни.
  6. SDK изпраща криптираните платежни данни (seToken) в платежния шлюз.
  7. Платежният шлюз осъществява плащането.
    • Ако се изисква, платежният шлюз осигурява връзка с 3D Secure.
    • За обработка на плащания с 3DS 2 препоръчваме да използвате пренасочване чрез web view (use3ds2sdk=false).
  8. Платежният шлюз изпраща уведомление за обратно повикване на сървъра на търговеца, ако е конфигурирано за търговеца.
  9. Мобилният сървър проверява окончателния статус на плащането чрез getOrderStatusExtended.do.
  10. Мобилното приложение показва резултата от плащането на клиента.

iOS

По-долу е описана настройката на проекта. Framework-ът може да се инсталира ръчно.

SDKPayment се базира на framework-ите ThreeDSSDK, SDKForms. Затова те са необходими за импорт.

За да инсталирате framework-ите ръчно, изтеглете и добавете ги в проекта.

iOS-интеграция

Интеграция на SDKForms.framework

Можете да интегрирате SDKForms.framework по следния начин:

SDKForms.framework

Фигура 1. Добавяне на файла SDKForms.framework


Фигура 2. Промяна на свойствата на SDKForms.framework


След това импортирайте framework-а във файла ViewController.swift.

Интеграция на SDKPayment.framework

SDKPayment.framework

Фигура 3. Добавяне на файла SDKPayment.framework


Фигура 4. Промяна на свойствата на SDKPayment.framework


След това импортирайте framework-а във файла ViewController.swift.

//ViewController.swift
...
import SDKPayment
...

Работа с API V1

Конфигурация на SDK

За инициализация е необходимо да зададете адреса на сървъра на платежния шлюз.

final class MainViewController: UIViewController {

    private func checkout() {
      SdkPayment.initialize(
        sdkPaymentConfig: SDKPaymentConfig(
          baseURL: "\(baseApiUrl)",
          use3DSConfig: .noUse3ds2sdk,
          keyProviderUrl: "\(baseApiUrl)/se/keys.do"
        )
      )
      ...
    }
  }

При използване на API V1 трябва да регистрирате нов обект order. При регистрация на order заявката трябва да съдържа параметър returnUrl равен на "sdk://done".

За използване на метода checkoutWithBottomSheet() е необходимо да създадете CheckoutConfig с mdOrder.

final class MainViewController: UIViewController {

    private func checkout() {
      ...
      // Creating `CheckoutConfig`
      let checkoutConfig = CheckoutConfig(id: .mdOrder(id: mdOrder))

      SdkPayment.shared.checkoutWithBottomSheet(
          controller: navigationController!,
          checkoutConfig: checkoutConfig,
          callbackHandler: self
      )
    }
  }

Обработка на резултата от плащането

За MainViewController е необходимо да реализирате изискванията на ResultPaymentCallback.

extension MainViewController: ResultPaymentCallback {

    typealias T = PaymentResult

    func onResult(result: PaymentResult) {
      print("\(result.isSuccess) \(result.paymentId)")
    }
  }

Android

SDKPayment се основава на фреймуърците ThreeDSSDK, SDKForms. Поради това те са необходими за импортиране.

Android-интеграция

Свързване към Gradle проект чрез добавяне на файлове .aar на библиотеката

Необходимо е да добавите файла на библиотеката sdk_forms-release.aar в папката libs, а след това да укажете зависимостта на добавената библиотека.

build.gradle.kts

allprojects {
  repositories {
    // ...
    flatDir {
      dirs("libs")
    }
  }
}

dependencies {
  // dependency is mandatory to add
  implementation(group = "", name = "sdk_forms-release", ext = "aar")

  implementation("androidx.cardview:cardview:1.0.0")
  implementation("com.github.devnied.emvnfccard:library:3.0.1")
  implementation("com.caverock:androidsvg-aar:1.4")
  implementation("io.card:android-sdk:5.5.1")
  implementation("com.google.android.gms:play-services-wallet:18.0.0")
}

build.gradle

allprojects {
  repositories {
    // ...
    flatDir {
      dirs 'libs'
    }
  }
}

dependencies {
  // dependency is mandatory to add
  implementation(group = "", name = "sdk_forms-release", ext = "aar")
  implementation("androidx.cardview:cardview:1.0.0")
  implementation("com.github.devnied.emvnfccard:library:3.0.1")
  implementation("com.caverock:androidsvg-aar:1.4")
  implementation("io.card:android-sdk:5.5.1")
  implementation("com.google.android.gms:play-services-wallet:18.0.0")
}

Свързване към Gradle проект чрез добавяне на .aar библиотечни файлове

Необходимо е да добавите библиотечния файл sdk_payment-release.aar в папката libs, а след това да укажете зависимостта на добавената библиотека.

build.gradle.kts

allprojects {
    repositories {
        // ...
        flatDir {
            dirs("libs")
        }
    }
}

dependencies {
    // dependency is mandatory to add
    implementation(group = "", name = "sdk_payment-release", ext = "aar")
}

build.gradle

allprojects {
    repositories {
        // ...
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    // dependency is mandatory to add
    implementation(group = "", name = "sdk_payment-release", ext = "aar")
}

Работа с API V1

Конфигурация на SDK

За инициализацията е необходимо да се зададе адресът на сървъра на платежния шлюз.

SDKPayment.init(
  SDKPaymentConfig(
    baseURL = "https://uat.dskbank.bg/payment/rest",
  )
)

При използване на API V1 трябва да регистрирате нов обект order. При регистрация на order заявката трябва да съдържа параметъра returnUrl и да не съдържа никакви други параметри с Url, като например failUrl. returnUrl трябва да има стойност "sdk://done".

// A link to an activity or a fragment is required. Checkout config is required.
  val checkoutConfig = CheckoutConfig.MdOrder("eecbbe96-973e-422e-a220-e9fa8d6cb124")
  SDKPayment.checkout(activity = this, checkoutConfig = checkoutConfig)

Основният URL-адрес за достъп до методите на платежната шлюза и корневият сертификат за проверка на подписа се указват чрез обект от клас SDKPaymentConfig.

Методът за плащане е достъпен в два варианта, извиквани от Activity и Fragment:

Обработка на резултата от плащането

За Activity и Fragment е необходимо да се предефинира методът onActivityResult.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    // Processing the result of the payment cycle.
    SDKPayment.handleCheckoutResult(requestCode, data, object :
        ResultPaymentCallback<PaymentData> {
          override fun onResult(result: PaymentResult) {
            // check payment result
          }
    })
}

При успешно плащане се връща обект PaymentResult, съдържащ текстово поле isSuccess с формат boolean, съдържащо резултата от плащането, както и незадължително поле exception.

Примери екрани

Плащане с карта Потвърждение 3DSecure
Фигура 7. Плащане с нова карта



Запазени карти Потвърждение CVC Потвърждение 3DSecure
Фигура 8. Плащане с привързана карта

Плащане чрез Google Pay модул SDK Payment

За извършване на плащане чрез Google Pay модул SDK е необходимо да се извика способът за плащане checkout(), предавайки стойност true на флага gPayClicked. Стойността по подразбиране е false.

fun checkout(activity: Activity, checkoutConfig: CheckoutConfig, gPayClicked: Boolean = false) {
}

Екрани с платежни бутони на портфейли

Фигура 9. Дизайн на бутона Google Pay

Логване

Вътрешните процеси се логват с таг SDK-Core. Можете също да логвате своите процеси.

Логването е достъпно чрез обект Logger.

...
    Logger.addLogInterface(object : LogInterface {
        override fun log(classMethod: Class<Any>, tag: String, message: String, exception: Exception?) {
                Log.i(tag, "$classMethod: $message", exception)
            }
        })
...

По подразбиране се използва таг SDK-Core. Можете да зададете свой собствен, ако желаете.

Пример: ... Logger.log(this.javaClass, "MyTag", "My process...", null) ...

Често задавани въпроси

Q: Какво е CardIOUtilities?
A: CardIOUtilities - това е интерфейс на библиотеката CardIO. Можете да прочетете ръководството тук: https://github.com/card-io/card.io-iOS-source.

:
eCommerce SDK