6. Поддержка внешней платежной системы
МодульКасса позволяет проводить платежи через другие приложения. После их установки на экране подитога появляется соответствующий пункт оплаты.
Чтобы реализовать приложение платежной системы, необходимо объявить сервис в манифесте:
<service
android:name=".DemoPaymentService"
android:enabled="true"
android:exported="true"
android:icon="@drawable/ic_big_logo"
android:label="С демо счета">
<intent-filter>
<action android:name="ru.modulkassa.PAYMENT_SERVICE"/>
</intent-filter>
</service>
-
icon
- изображение/иконка приложения, которое будет отображаться в приложении МодульКасса -
label
- название вида оплаты в МодульКассе
От МодульКассы может приходить несколько типов запросов:
- оплата (
PayRequest
) - возврат (
RefundRequest
) - отмена возврата/оплаты (
CancelRequest
)
Запросы будут приходить в объявленный сервис DemoPaymentService
. Его следует унаследовать от PluginService
:
class DemoPaymentService : PluginService() {
override fun createHandlers(): List<OperationHandler> {
// handlers
}
}
Каждому запросу соответствует свой обработчик: для оплаты - PayOperationHandler
,
для возврата - RefundOperationHandler
, для отмены - CancelOperationHandler
.
Результат обработки запроса должен быть сообщен через callback (см. IPluginServiceCallback.aidl
).
В случае, если для обработки запроса необходим UI, то callback можно сериализовать и положить в Intent
:
override fun createHandlers(): List<OperationHandler> {
return listOf(
object : PayOperationHandler() {
override fun handlePay(payRequest: PayRequest, callback: PluginServiceCallbackHolder) {
val payIntent = Intent(applicationContext, PayActivity::class.java)
callback.putToIntent(payIntent)
payIntent.putExtra(KEY_DATA, payRequest.toBundle())
payIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(payIntent)
}
}
)
}
И вернуть результат:
fun paySucceeded(result: PayResult) {
PluginServiceCallbackHolder.getFromIntent(activity.intent)?.get()?.succeeded(
result.toBundle())
activity.finish()
}
После успешной оплаты требуется вернуть соответствующий объект:
- для оплаты -
PayResult
, - для возврата -
RefundResult
, - для отмены -
CancelResult
.
Демонстрационный пример представлен в модуле integration-demo-payments.