Перейти к содержимому

Как автоматически выставлять инвойсы в Paypal через Integromat

Сценарий Integromat для выставления инвойсов. Paypal + Stripe

Обновлено: 04.06.2021

Инвойсы — это удобно для всех. Клиенту не нужно вводить сумму и email получателя. Все, что ему нужно сделать для это оплаты — это залогиниться в Paypal и нажать на пару кнопок.

В данном посте расскажу, как выставлять инвойсы в Paypal и принимать деньги через Integromat. В моем случае каждый заказ клиента имеет плавающую, а не фиксированную стоимость, поэтому нужно динамически подгружать стоимость в инвойс. Расскажу опять же на примере с Trello.

Регистрируем аккаунт Paypal

Сначала нужно зарегистрировать аккаунт Paypal на который вы можете принимать деньги (не для всех стран это доступно).

Дальше нам нужно пойти по адресу https://developer.paypal.com/ и создать новое приложение в Sandbox или сразу Live режиме. После создания для вашего приложения будут сгенерированы Client ID и Consumer secret Key.

Создание приложения в Paypal
Создание приложения в Paypal

Далее регистрируемся в Integromat, если еще не зарегистрированы. В этой статье небольшой обзор сервиса Integromat — https://codelessman.com/chto-takoe-integromat-i-dlja-chego-on-nuzhen/

Создаем сценарий в Integromat для выставления инвойсов в Paypal

Рассмотрим, как выглядит сценарий для выставления инвойсов на примере интеграции с Trello.

Первым делом нужно придумать, по какому триггеру будет происходить выставление инвойса. В моем случае — это перемещение карточки в определенный столбец.

У меня может быть 3 типа оплаты:

  1. Предоплата
  2. Промежуточная оплата
  3. Полная оплата

Для каждого из этих типов оплат — разные столбцы. Но смысл у них один и тот же и сценарии практически одинаковые. Рассмотрим процесс работы сценария для предоплаты заказа.

Сценарий Integromat для выставления инвойсов. Paypal + Stripe
Сценарий Integromat для выставления инвойсов. Paypal + Stripe. В данной статье мы рассматриваем только работу Paypal (эта часть сценария проходит вверху)

Создаем триггер в Трелло

Триггером будет вебхук в модуле Trello -> Watch activities (Instant). Выбираем доску, столбец и действие updateCard.

Создание вебхука в Trello модуле
Создание вебхука в Trello модуле

Можно запустить только один этот модуль и проверить, срабатывает ли он при перемещении карточки в этот список или из этого списка. Если срабатывает, продолжаем.

Т.к. этот вебхук может срабатывать тогда, когда нам не нужно, ставим фильтр на переменную listAfter, чтобы сценарий продолжал работать только тогда, когда конечный список, в который перемещенна карточка, именно тот, который нам нужен.

Узнаем ID списка через тестовый прогон модуля или исходный код страницы Trello и добавляем ID списка в фильтр сразу после первого модуля.

Фильтр по ID списка после перемещения карточки
Фильтр по ID списка после перемещения карточки

Забираем данные из Custom fields в Trello

Далее, если мы используем кастомные поля в карточке, нужно забрать данные из них. Для этого сначала добавляем модуль Trello -> Get a Card  чтобы получить всю информацию по карточке.

Данные кастомных полей находятся в массиве. Нужно их достать и создать из них переменные, которые дальше будут использоваться в сценарии. Чтобы достать из массива данные, нужно использовать функцию map().

  • Добавляем модуль Tools -> Set multiple variables для задания переменных. Рекомендую сразу создавать модуль именно Set multiple variables со множеством переменных внутри т.к. со временем легче будет в него добавлять новые переменные, когда сценарий будет разрастаться и усложняться.
  • Узнаем ID всех своих кастомных полей через исходный код Trello или смотрим из модуля Get a Card когда он срабатывает.
  • Задаем переменную для каждого поля, которое нужно использовать в сценарии через функцию map()
Так выглядят мои поля в трелло
Так выглядят Custom Fields в Trello

Вот так выглядит модуль Set multiple variables чтобы достать некоторые поля из этой карточки.

Set multiple variables Integromat
Set multiple variables Integromat

Описание как работает эта функция и другие можно посмотреть здесь — https://support.integromat.com/hc/en-us/articles/360001986513-Mapping

Если вкратце, то мы:

  1. Задаем массив, в котором искать ключ (Custom Fields)
  2. Задаем ключ и его тип в raw формате
  3. Задаем ключ для фильтра
  4. Задаем значение фильтра
Функция map() в Integromat
Функция map() в Integromat

После того, как мы получили все поля, можно продолжать сценарий.

Создаем и настраиваем модуль Paypal -> Create a payment (step 1)

Дальше создаем модуль Paypal -> Create a payment (step 1). Добавляем подключение нашего аккаунта Paypal, используя Client ID и Consumer secret Key из личного кабинета.

Настройка модуля Paypal -> Create payment
Настройка модуля Paypal -> Create payment

Описание полей в данном модуле:

  • Cancel url — здесь вводим урл, по которому средиректит клиента, если он отказался или была ошибка платежа. Рекомендую создать такую страницу на сайте и указать её URL здесь.
  • Transaction — здесь создаем тело транзакции: задаем цену, валюту и описание, если нужно. В описание рекомендую вставлять ID карточки Trello, чтобы после оплаты можно было идентифицировать, по какой карточке прошла оплата. Также можно добавить шаблон, как маркер вашего проекта (например если на аккаунт идут платежи с разных проектов, и вам нужно идентифицировать именно платежи на свой проект).
  • Return URL — это URL, на который будет проходить отправка данных, когда клиент согласится оплатить (нажмет на кнопку «Оплатить»). Это вебхук. Здесь мы подбираемся к модулю Paypal -> Execute payment (step 2).

Создаем и настраиваем модуль Paypal -> Execute payment (step 2)

Чтобы платеж прошел, пейпалу нужно послать данные, что клиент нажал на кнопку оплаты и согласился на списание средств.

Для этого нам понадобится создать новый сценарий. Вот как он примерно будет выглядеть:

Сценарий Paypal -> Execute payment (step 2)
Сценарий Paypal -> Execute payment (step 2)
  1. Создаем сценарий, создаем вебхук, копируем его URL.
  2. Вставляем скопированный URL в модуль Paypal -> Create a payment (step 1) в первом сценарии. Если нужно, можно добавить туда доп. параметры через амперсанд &.
  3. Теперь, после подтверждения клиентом намерения оплатить, на наш вебхук будет прилетать ответ с Payment ID и Payer ID
  4. После вебхука создаем модуль Paypal -> Execute payment (step 2), вставляем в него Payment ID и Payer ID из модуля вебхука.
  5. Дальше, опционально, после успешной оплаты, можно добавить редирект на страницу «Спасибо за оплату». Создаете страницу, добавляете модуль Webhook response и настраиваете его.
Редирект после оплаты Paypal
Редирект после оплаты Paypal

Где:

  • Status: 302 — код редиректа
  • Key: ключ (Location)
  • Value: URL, на который редиректить.

Дальше, можно добавить модуль отправки писем Email, чтобы уведомить клиента об успешной оплате и поблагодарить.


Теперь возвращаемся в первый сценарий. После того, как мы создали инвойс (Paypal -> Create Payment) его результатом будет уникальная ссылка Approval URL, по которой клиенту нужно будет перейти и оплатить. Эту переменную со ссылкой можно отправлять на почту, Telegram или куда угодно через соответствующие модули в сценарии. Я отправляю в теле письма вместе с кнопкой «Оплатить«.

Избегаем ошибок менеджера

Менеджер, который будет отправять карточку на инвойс, будет ошибаться и иногда не заполнять определенные поля. Поэтому нужно определить, какие поля обязательные и добавить в сценарий фильтр, который будет проверять, все ли поля заполнены.

Вот как это выглядит:

Проверка полей на заполненность в Integromat
Проверка полей на заполненность в Integromat

После вытягивания всех полей из карточки Trello через модуль Set multiple variables,  создаете роутер, и далее от него одна ветка идет в Telegram сообщение (как уведомление). В этой ветке должен стоять фильтр. В данном случае он проверяет обязательные поля, есть ли в их переменных данные или нет. Если хотя бы одно поле соответствует emptyarray, т.е. пустое, то сценарий пройдет по этому фильтру и отправится сообщение в Telegram. По другой ветке (в создание инвойса в Paypal) сценарий не пойдет.

При такой реализации в фильтре ветки, которая идет в создание инвойса в Paypal, нужно поставить галку, что это запасной путь (Fallback route), по которому сценарий продолжит выполнятся, если не сможет пройти по другим веткам (в нашем случае по ветке, которая проверяет, есть ли ошибки).

Таким образом, если есть хоть 1 незаполненное обязательное поле, то сценарий идет в уведомление в Telegram об ошибке. Если же все поля заполнены, то сценарий идет в создание ссылки инвойса.

Примеры уведомлений в Telegram

Выставление инвойса
Сообщение в Telegram с инвойсом
Комментарий в карточке Trello с инвойсом
Комментарий в карточке Trello с инвойсом
Оплата получена
Оплата получена
Необходимые поля не заполнены
Необходимые поля не заполнены

На скриншоте выше при ошибке выводятся все обязательные поля и их содержимое. Менеджер должен сам увидеть, где пустое поле.

Чтобы выводить только пустые ошибочные поля, нужно немного усложнить разметку сообщения:

  1. Создаем модуль Set Multiple Variables и с помощью функции if() определяем, какие из полей пустые.
  2. Пустые поля объеденяем в одну строку функцией split().
  3. Выводим результат модуля в разметку сообщения Telegram.
Вывод только ошибочных полей в сообщении
Вывод только ошибочных полей в сообщении

В телеграме удобно, что можно добавлять упоминание менеджера через @. Для этого можно использовать функцию switch(). Или заранее в модуле Set Multiple Variables определять никнейм каждого менеджера, и вставлять в сообщение переменную. Такой подход я подробнее описал здесь.

Функция switch() простая:

  • указываем переменную, которую следует проверить:
  • Если значение A
  • То ответ B
  • Если значение A1
  • То ответ B1
  • и так далее.
Упоминание менеджера через @ в сообщении Телеграм
Упоминание менеджера через @ в сообщении Телеграм

Вот такой сценарий выставления инвойсов. Если есть вопросы — задавайте в комментариях. Такая схема отлично работает, можно даже сказать, безотказно. В следующей статье расскажу, как получать уведомления об успешной оплате через Paypal и что дальше с этим данными можно делать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *