pscbonline-java/README.md

193 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ПСКБ Платежи 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()
}
```