Проект с открытым исходным кодом, направленный на то, чтобы максимально упростить интеграцию веб-службы Java Spring в сеть Lightning.
LightningJ Paywall — это фреймворк, который просто позволяет вам аннотировать сервис API, за который вы хотите взимать плату, и фреймворк справится с большинством сложностей потока платежей за вас.
Как это работает
Что вам в основном нужно сделать для поддержки платежей за ваши услуги, так это подключиться к узлу LND Lightning и выполнить следующие три шага.
Шаг 1 Аннотируйте свой сервис
Сначала аннотируйте службы, которые вы хотите использовать с платным доступом, с помощью аннотации @PaymentRequired. Это автоматически обнаружит, что требуется оплата, прежде чем данные будут отправлены в службу, и инициируется поток платежей.
@RestController public class MyServiceController { @PaymentRequired(articleId = "myservice1") @RequestMapping("/myservice") public MyServiceResult myservice() { .... } }
Аннотация довольно гибкая, и можно создавать потоки платежей для разных сценариев, таких как оплата за каждый запрос, несколько запросов за заданное время и один платеж за доступ к нескольким услугам внутри приложения.
Шаг 2. Обработчик платежей
Чтобы потоки платежей работали, вам также необходимо реализовать класс PaymentHandler, который управляет сохранением сгенерированных платежей. Он содержит три метода для создания, поиска и обновления платежей. Обработчик платежей также отвечает за динамическое преобразование идентификатора статьи, указанного для услуги, в цену.
protected PaymentData newPaymentData(byte[] preImageHash, OrderRequest orderRequest) throws IOException, InternalErrorException { // Here create a new PaymentData for a given articleId } protected PaymentData findPaymentData(byte[] preImageHash) throws InternalErrorException { // Look up given PaymentData } protected void updatePaymentData(PaymentEventType type, PaymentData paymentData, LightningHandlerContext context) throws InternalErrorException { // Persist given PaymentData }
PaymentHandler можно реализовать с помощью нескольких строк кода с использованием Spring Data или интегрировать в существующую базу данных платежей в зависимости от требований вашего приложения.
Шаг 5. Добавьте обработчики событий JavaScript
При вызове REST API из веб-приложения вы, вероятно, используете код, аналогичный приведенному ниже примеру, для вызова службы. (Если вы используете обычный JavaScript). Пример кода использует XMLHttpRequest для вызова службы и содержит один обработчик событий, onload, который срабатывает после обработки запроса сервером.
var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.onload = function(){ if(xmlHttpRequest.status === 200) { // Process the service response var response = JSON.parse(xmlHttpRequest.responseText); ... }else{ // Error calling the underlying service. } }; xmlHttpRequest.open("GET","/myservice"); xmlHttpRequest.send();
Но при создании платного доступа к вашей услуге вы, вероятно, захотите отобразить счет для клиента, подобный изображенному ниже, и фактический запрос не должен обрабатываться до тех пор, пока счет не будет оплачен.
Для этого в платформе есть библиотека JavaScript, которая расширяет стандартный класс XMLHttpRequest с функциональностью платного доступа, которая называется PaywallHttpRequest. Новый класс поддерживает добавление новых обработчиков событий для этих конкретных событий, связанных с платным доступом. В противном случае он ведет себя так же, как XMLHttpRequest, и REST API будет вызываться автоматически, как только будет оплачен счет.
В приведенном ниже примере мы обновили вызов REST API, чтобы вместо него использовать PaywallHttpRequest, и добавили три обработчика событий. Один для отображения счета-фактуры, один для сокрытия счета-фактуры при расчете и один обработчик специального случая для сообщения о том, что срок действия счета-фактуры истек.
var paywallHttpRequest = new PaywallHttpRequest(); // The Invoice event handler adds invoice information to the modal and then displays it. paywallHttpRequest.paywall.addEventListener("InvoiceListener", PaywallEventType.INVOICE, function (type, invoice) { // Populate a window and display information from the provided // invoice object. }); // Event listener hides the modal upon settlement. paywallHttpRequest.paywall.addEventListener("SettledListener", PaywallEventType.SETTLED, function (type, settlement) { // Hide invoice window. }); // Event listener updates the modal with invoice expired information. paywallHttpRequest.paywall.addEventListener("InvoiceExpiredListener", PaywallEventType.INVOICE_EXPIRED, function (type, invoice) { // Update invoice window with invoice expire information. }); // The same onload handler that should have been used without paywall to call the service. paywallHttpRequest.onload = function(){ if(xmlHttpRequest.status === 200) { // Process the service response var response = JSON.parse(xmlHttpRequest.responseText); ... }else{ // Error calling the underlying service. } }; paywallHttpRequest.open("GET","/tademo"); paywallHttpRequest.send();
И это все, что вам нужно сделать, чтобы добавить функциональность микроплатежей в ваше приложение Spring Framework с помощью Lightning Network.
Библиотека JavaScript также содержит справочные методы для упрощения управления счетами, такие как генерация QR-кодов, преобразование денежных единиц и отображение счетчиков истечения срока действия.
Более подробное знакомство с фреймворком можно найти по адресу https://paywall.lightningj.org#gettingstarted.
Дорожная карта будущего
В настоящее время проект поддерживает только автономное приложение, но в будущем проект будет расширен для поддержки более распределенной настройки, в которой платежи можно будет контролировать централизованно для нескольких распределенных веб-сервисов более удобным для предприятия способом.
Дополнительная информация
Дополнительную информацию можно найти на:
- Сайт проекта: https://paywall.lightningj.org
- Гитхаб: https://github.com/lightningj-org/paywall
Также за проектом можно следить в твиттере @LightningJ_org.