Думаю, нет необходимости говорить о PayPal и о том, насколько он стал полезным. В этой статье мы напишем небольшой веб-сервер на моем любимом языке Go, который обрабатывает веб-перехватчики PayPal. Я покажу вам, как легко начать получать веб-перехватчики, разрабатывать свое приложение и отлаживать его с помощью Webhook Relay.
Согласно документам веб-перехватчика PayPal:
Веб-перехватчики - это обратные вызовы HTTP, которые получают уведомления о событиях. Чтобы создать веб-перехватчик в PayPal, пользователи настраивают прослушиватель веб-перехватчика и подписывают его на события. Слушатель веб-перехватчика - это сервер, который прослушивает по определенному URL-адресу входящие уведомления HTTP POST, которые запускаются при возникновении событий. PayPal подписывает каждое уведомление, которое он доставляет вашему слушателю веб-перехватчика.
Так что ничего необычного или нового. Веб-перехватчики важны - они используются практически в любом приложении SaaS, имеющем модель подписки. С помощью веб-перехватчиков вы можете:
- Включение / отключение функций, когда клиент платит за план.
- Отправьте клиенту подтверждение об изменении тарифного плана по электронной почте.
Наша цель - сделать такую настройку:
Это позволит нам получать веб-перехватчики на локальном хосте так же, как если бы наш сервер был доступен в общедоступном Интернете.
Нет времени объяснять, давайте перейдем к делу
- Загрузите CLI и зарегистрируйтесь, чтобы получить ключ и секрет. Инструкцию можно найти здесь. Если вы уже сделали это (я думаю, большая часть планеты уже зарегистрировалась), можно переходить к следующему шагу!
- Скачайте и установите Go, инструкция здесь. В отличие от других языков, которые устанавливают астрономическое количество пакетов, с помощью Go вы обычно можете обойтись всего несколькими вспомогательными пакетами.
- PayPal (здесь, наверное, неудивительно) - мы будем использовать личный кабинет разработчика.
Перво-наперво создайте веб-перехватчик. Перейдите в Панель управления PayPal и создайте приложение, затем выберите приложение, в котором вы хотите включить веб-перехватчики:
Теперь давайте получим нашу общедоступную конечную точку Webhook Relay. Предполагая, что наше будущее приложение будет принимать веб-перехватчики на http: // localhost: 8080 / v1 / paypal-webhooks, начните пересылать их туда:
relay forward -b paypal http://localhost:8080/v1/paypal-webhooks
Вы должны увидеть что-то вроде этого:
$ relay forward -b paypal http://localhost:8080/v1/paypal-webhooks Forwarding: https://my.webhookrelay.com/v1/webhooks/672d0c8f-b742-4a99-96c1-af4de65bc02a -> http://localhost:8080/v1/paypal-webhooks Starting webhook relay agent... 1.5345938246082163e+09 info webhook relay ready... {"host": "my.webhookrelay.com:8080"}
Здесь мы видим https://my.webhookrelay.com/v1/webhooks/672d0c8f-b742-4a99-96c1-af4de65bc02a
(у вас будет другой идентификатор :), это наша общедоступная конечная точка, которую мы можем предоставить PayPal:
Давайте отметим «Все события», поскольку сейчас нас это особо не волнует, мы всегда можем снять галочки. Прокрутите вниз и нажмите «Сохранить».
Погнали
Пора написать Go. Я начал эту статью, думая, что она будет о IPN PayPal, но оказалось, что она о веб-перехватчиках, позже я напишу еще одну о IPN.
Мы создадим пакет, который будет обрабатывать наши веб-перехватчики (полный исходный код находится здесь https://github.com/webhookrelay/paypal-ipn, просто клонируйте его).
а затем код для размещения логики нашего приложения выглядит так:
Код можно найти здесь: https://github.com/webhookrelay/paypal-ipn. Чтобы запустить наше приложение, мы просто:
$ go run example/main.go 2018/08/18 20:01:53 server starting on :8080
В реальной жизни вы, вероятно, захотите использовать go install
(значительно ускоряет сборку).
Войдите в симуляцию
Перейдите в Симулятор Webhooks в разделе MOCK. Теперь снова введите нашу общедоступную конечную точку Webhook Relay и выберите «Сбор платежей завершен»:
Щелкните «Отправить тест».
Через несколько секунд мы должны увидеть в нашем приложении полученный веб-перехватчик:
$ go run example/main.go 2018/08/18 20:01:53 server starting on :8080 2018/08/18 20:02:10 event type: PAYMENT.CAPTURE.COMPLETED 2018/08/18 20:02:10 event resource type: capture 2018/08/18 20:02:10 summary: Payment completed for $ 7.47 USD
Поздравляем, мы только что заработали 7,47 мнимых долларов!
P.S. Не уверен, почему, но иногда им требуется больше времени, чтобы отправить этот фиктивный веб-перехватчик, поэтому, если после нажатия этой кнопки ничего не происходит, просто подождите немного. Или, если у вас уже есть веб-перехватчик в Webhook Relay, вы можете повторить попытку оттуда, они будут немедленно перенаправлены.
Отладка веб-перехватчиков
Мы также можем увидеть все веб-перехватчики, которые отправляются через Wehboook Relay, на нашей странице корзин:
Отсюда вы можете проверить и повторно отправить веб-перехватчики. Это также хорошее место, чтобы получить исходную структуру JSON и преобразовать ее в структуру Go с помощью этого замечательного веб-сайта: https://mholt.github.io/json-to-go/.
Подведение итогов
Webhook Relay упрощает получение веб-перехватчиков в локальных или частных сетях. Его можно использовать не только в разработке, но и в производственной среде, если вы не хотите или не можете предоставлять доступ к своему серверу обработки webhooks в Интернет.
Если вы работаете с Stripe, ознакомьтесь с моей предыдущей записью в блоге здесь.
Первоначально опубликовано на сайте webhookrelay.com 21 августа 2018 г.