193 lines
6.0 KiB
Markdown
193 lines
6.0 KiB
Markdown
# ПСКБ Платежи Java/Kotlin
|
||
|
||
Библиотека является дополнением к API системы интернет-эквайринга [ПСКБ "Платежи"](https://online.pscb.ru)
|
||
и позволяет подключить приём платежей по картам в приложениях на JVM (Java/Kotlin/Groovy) с минимальными усилиями.
|
||
|
||
## Возможности
|
||
|
||
На текущий момент библиотека поддерживает:
|
||
|
||
- Оплата картами
|
||
- Google Pay
|
||
|
||
## Подключение зависимостей
|
||
|
||
#### Gradle
|
||
|
||
```groovy
|
||
maven {
|
||
name "pscb"
|
||
url "https://nxs.pscb.ru/repository/pscb-releases/"
|
||
}
|
||
|
||
dependencies {
|
||
implementation "ru.pscb:online-java:1.0.0"
|
||
}
|
||
```
|
||
|
||
#### Maven
|
||
|
||
Прописать репозиторий:
|
||
```xml
|
||
<repositories>
|
||
<repository>
|
||
<snapshots>
|
||
<enabled>false</enabled>
|
||
</snapshots>
|
||
<name>pscb</name>
|
||
<url>https://nxs.pscb.ru/repository/pscb-releases/</url>
|
||
</repository>
|
||
</repositories>
|
||
```
|
||
|
||
Добавить зависимость:
|
||
```xml
|
||
<dependencies>
|
||
<dependency>
|
||
<groupId>ru.pscb</groupId>
|
||
<artifactId>online-java</artifactId>
|
||
<version>1.0.0</version>
|
||
</dependency>
|
||
</dependencies>
|
||
```
|
||
|
||
## Интеграция
|
||
|
||
#### Оплата картами
|
||
|
||
* Создайте экземпляр `PSCBOnlineClient` с вашими настройками:
|
||
|
||
```kotlin
|
||
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`
|
||
|
||
```kotlin
|
||
val payment = Payment(amount = BigDecimal(1000.00), orderId = "Order-ID")
|
||
```
|
||
|
||
> `amount` - сумма в рублях. (_На текущий момент другая валюта не поддерживается._)
|
||
> `orderId` - уникальный идентификатор заказа в рамках магазина.
|
||
|
||
_Для детальной информации, какие параметры присутствуют, смотрите документацию `Payment`._
|
||
|
||
* Для приёма оплаты картами создайте экземпляр класса `CardData`.
|
||
|
||
```kotlin
|
||
val card = CardData(
|
||
"4761349750010326",
|
||
expiryDate = YearMonth.of(2022, 12),
|
||
cvCode = "851"
|
||
)
|
||
```
|
||
|
||
* Создайте токен запроса, используя экземпляр `PSCBOnlineClient`, созданный ранее.
|
||
|
||
```kotlin
|
||
val request = client.makeRequestWithCardData(card, payment)
|
||
```
|
||
|
||
* Отправьте токен запроса на сервер ПСКБ-Онлайн.
|
||
|
||
```kotlin
|
||
// Send request to backend
|
||
client.send(request) { response ->
|
||
println("Error ${response.error}")
|
||
println("Status ${response.status}")
|
||
println("Response ${response.response}")
|
||
}
|
||
```
|
||
|
||
> В случае успешного выполнения запроса, `response` будет содержать информацию о принятом платеже, его ID, состояние и
|
||
> прочие данные.
|
||
|
||
##### Полный пример на Kotlin
|
||
|
||
```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`
|
||
|
||
```kotlin
|
||
paymentsClient = PSCBAPI.createPaymentClient(this, WalletConstants.ENVIRONMENT_TEST)
|
||
```
|
||
|
||
3. Также там создайте экземпляр `ru.pscb.library.client.PSCBOnlineClient`
|
||
|
||
```kotlin
|
||
apiClient = DefaultPSCBOnlineClient(
|
||
environment = BackendEnvironment.SANDBOX, // или PRODUCTION
|
||
marketPlaceId = 123456, /* <-- Your MarketPlace ID */
|
||
signingKey = "Your Signing Key"
|
||
)
|
||
```
|
||
|
||
4. Обработайте намерие оплаты пользователя
|
||
|
||
```kotlin
|
||
val request = PSCBAPI.makePaymentRequest("<Your Google Merchant ID>", price)
|
||
|
||
AutoResolveHelper.resolveTask(
|
||
paymentsClient.loadPaymentData(request), this, LOAD_PAYMENT_DATA_REQUEST_CODE
|
||
)
|
||
```
|
||
|
||
5. Обработайте авторизацию пользователя и отправьте данные на бэкенд сервер
|
||
|
||
```kotlin
|
||
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()
|
||
}
|
||
``` |