Думаю, нет необходимости говорить о 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 г.