pscbonline-java/README.md

193 lines
6.0 KiB
Markdown
Raw Normal View History

2024-04-01 13:12:41 +03:00
# ПСКБ Платежи 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()
}
```