pscbonline-java/README.md

6.0 KiB
Raw Blame History

ПСКБ Платежи Java/Kotlin

Библиотека является дополнением к API системы интернет-эквайринга ПСКБ "Платежи" и позволяет подключить приём платежей по картам в приложениях на JVM (Java/Kotlin/Groovy) с минимальными усилиями.

Возможности

На текущий момент библиотека поддерживает:

  • Оплата картами
  • Google Pay

Подключение зависимостей

Gradle

maven {
    name "pscb"
    url "https://nxs.pscb.ru/repository/pscb-releases/"
}

dependencies {
    implementation "ru.pscb:online-java:1.0.0"
}

Maven

Прописать репозиторий:

<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <name>pscb</name>
        <url>https://nxs.pscb.ru/repository/pscb-releases/</url>
    </repository>
</repositories>

Добавить зависимость:

<dependencies>
    <dependency>
        <groupId>ru.pscb</groupId>
        <artifactId>online-java</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

Интеграция

Оплата картами

  • Создайте экземпляр PSCBOnlineClient с вашими настройками:
    val apiClient = DefaultPSCBOnlineClient(
    environment = BackendEnvironment.SANDBOX, // или PRODUCTION
    marketPlaceId = 123456, /* <-- Your MarketPlace ID */
    signingKey = "Your Signing Key"
)

// или
val sandboxApi = PSCBOnlineClient.sandbox(/* Your MarketPlace ID */, "Your Signing Key")
val productionApi = PSCBOnlineClient.production(/* Your MarketPlace ID */, "Your Signing Key")

environment - окружение, в рамках которого библиотека взаимодействует с сервисом. SANDBOX - тестовое окружение; PRODUCTION - продуктовое. Your MarketPlace ID - ваш идентификатор в системе ПСКБ-Онлайн. Your Signing Key - ваш ключ подписи запросов к системе.

  • Создайте экземпляр Payment
val payment = Payment(amount = BigDecimal(1000.00), orderId = "Order-ID")

amount - сумма в рублях. (На текущий момент другая валюта не поддерживается.) orderId - уникальный идентификатор заказа в рамках магазина.

Для детальной информации, какие параметры присутствуют, смотрите документацию Payment.

  • Для приёма оплаты картами создайте экземпляр класса CardData.
val card = CardData(
    "4761349750010326",
    expiryDate = YearMonth.of(2022, 12),
    cvCode = "851"
)
  • Создайте токен запроса, используя экземпляр PSCBOnlineClient, созданный ранее.
val request = client.makeRequestWithCardData(card, payment)
  • Отправьте токен запроса на сервер ПСКБ-Онлайн.
// Send request to backend
client.send(request) { response ->
    println("Error ${response.error}")
    println("Status ${response.status}")
    println("Response ${response.response}")
}

В случае успешного выполнения запроса, response будет содержать информацию о принятом платеже, его ID, состояние и прочие данные.

Полный пример на Kotlin
object App {

    private val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss")

    @JvmStatic
    fun main(vararg args: String) {
        val client = PSCBOnlineClient.sandbox(marketPlaceId = 1234567890, signingKey = "111111")
        val card = CardData("4761120010000491", YearMonth.of(2022, 2), "500")
        val payment = Payment(BigDecimal(100), "APP-" + LocalDateTime.now().format(formatter))
        val request = client.makeRequestWithCardData(card, payment)

        val future = client.send(request) { error, response ->
            println("Error $error")
            println("Response $response")
        }

        future.join()
    }

}

Google Pay

  1. Получите свой Google Merchant ID

  2. В своём Activity создайте экземпляр com.google.android.gms.wallet.PaymentsClient

    paymentsClient = PSCBAPI.createPaymentClient(this, WalletConstants.ENVIRONMENT_TEST)
    
  3. Также там создайте экземпляр ru.pscb.library.client.PSCBOnlineClient

apiClient = DefaultPSCBOnlineClient(
    environment = BackendEnvironment.SANDBOX, // или PRODUCTION
    marketPlaceId = 123456, /* <-- Your MarketPlace ID */
    signingKey = "Your Signing Key"
)
  1. Обработайте намерие оплаты пользователя
val request = PSCBAPI.makePaymentRequest("<Your Google Merchant ID>", price)

AutoResolveHelper.resolveTask(
    paymentsClient.loadPaymentData(request), this, LOAD_PAYMENT_DATA_REQUEST_CODE
)
  1. Обработайте авторизацию пользователя и отправьте данные на бэкенд сервер
val payment = Payment(price, Date().toString())
val request = apiClient.makeRequestWithTokenData(paymentData, payment)
val toast = Toast(this)

apiClient.send(request) { throwable, response ->
    if (throwable != null) {
        toast.setText("Rawr")
        Log.d("HandlePaymentSuccess", "Failed to init a payment", throwable)
    }

    if (response != null) {
        toast.setText("Meow")
        Log.d("HandlePaymentSuccess", "Backend response $response")
    }

    toast.show()
}