Обновлено: 04.06.2021
Инвойсы — это удобно для всех. Клиенту не нужно вводить сумму и email получателя. Все, что ему нужно сделать для это оплаты — это залогиниться в Paypal и нажать на пару кнопок.
В данном посте расскажу, как выставлять инвойсы в Paypal и принимать деньги через Integromat. В моем случае каждый заказ клиента имеет плавающую, а не фиксированную стоимость, поэтому нужно динамически подгружать стоимость в инвойс. Расскажу опять же на примере с Trello.
Регистрируем аккаунт Paypal
Сначала нужно зарегистрировать аккаунт Paypal на который вы можете принимать деньги (не для всех стран это доступно).
Дальше нам нужно пойти по адресу https://developer.paypal.com/ и создать новое приложение в Sandbox или сразу Live режиме. После создания для вашего приложения будут сгенерированы Client ID и Consumer secret Key.
Далее регистрируемся в Integromat, если еще не зарегистрированы. В этой статье небольшой обзор сервиса Integromat — https://codelessman.com/chto-takoe-integromat-i-dlja-chego-on-nuzhen/
Создаем сценарий в Integromat для выставления инвойсов в Paypal
Рассмотрим, как выглядит сценарий для выставления инвойсов на примере интеграции с Trello.
Первым делом нужно придумать, по какому триггеру будет происходить выставление инвойса. В моем случае — это перемещение карточки в определенный столбец.
У меня может быть 3 типа оплаты:
- Предоплата
- Промежуточная оплата
- Полная оплата
Для каждого из этих типов оплат — разные столбцы. Но смысл у них один и тот же и сценарии практически одинаковые. Рассмотрим процесс работы сценария для предоплаты заказа.
Создаем триггер в Трелло
Триггером будет вебхук в модуле Trello -> Watch activities (Instant). Выбираем доску, столбец и действие updateCard.
Можно запустить только один этот модуль и проверить, срабатывает ли он при перемещении карточки в этот список или из этого списка. Если срабатывает, продолжаем.
Т.к. этот вебхук может срабатывать тогда, когда нам не нужно, ставим фильтр на переменную listAfter, чтобы сценарий продолжал работать только тогда, когда конечный список, в который перемещенна карточка, именно тот, который нам нужен.
Узнаем ID списка через тестовый прогон модуля или исходный код страницы Trello и добавляем ID списка в фильтр сразу после первого модуля.
Забираем данные из Custom fields в Trello
Далее, если мы используем кастомные поля в карточке, нужно забрать данные из них. Для этого сначала добавляем модуль Trello -> Get a Card чтобы получить всю информацию по карточке.
Данные кастомных полей находятся в массиве. Нужно их достать и создать из них переменные, которые дальше будут использоваться в сценарии. Чтобы достать из массива данные, нужно использовать функцию map().
- Добавляем модуль Tools -> Set multiple variables для задания переменных. Рекомендую сразу создавать модуль именно Set multiple variables со множеством переменных внутри т.к. со временем легче будет в него добавлять новые переменные, когда сценарий будет разрастаться и усложняться.
- Узнаем ID всех своих кастомных полей через исходный код Trello или смотрим из модуля Get a Card когда он срабатывает.
- Задаем переменную для каждого поля, которое нужно использовать в сценарии через функцию map()
Вот так выглядит модуль Set multiple variables чтобы достать некоторые поля из этой карточки.
Описание как работает эта функция и другие можно посмотреть здесь — https://support.integromat.com/hc/en-us/articles/360001986513-Mapping
Если вкратце, то мы:
- Задаем массив, в котором искать ключ (Custom Fields)
- Задаем ключ и его тип в raw формате
- Задаем ключ для фильтра
- Задаем значение фильтра
После того, как мы получили все поля, можно продолжать сценарий.
Создаем и настраиваем модуль Paypal -> Create a payment (step 1)
Дальше создаем модуль Paypal -> Create a payment (step 1). Добавляем подключение нашего аккаунта Paypal, используя Client ID и Consumer secret Key из личного кабинета.
Описание полей в данном модуле:
- Cancel url — здесь вводим урл, по которому средиректит клиента, если он отказался или была ошибка платежа. Рекомендую создать такую страницу на сайте и указать её URL здесь.
- Transaction — здесь создаем тело транзакции: задаем цену, валюту и описание, если нужно. В описание рекомендую вставлять ID карточки Trello, чтобы после оплаты можно было идентифицировать, по какой карточке прошла оплата. Также можно добавить шаблон, как маркер вашего проекта (например если на аккаунт идут платежи с разных проектов, и вам нужно идентифицировать именно платежи на свой проект).
- Return URL — это URL, на который будет проходить отправка данных, когда клиент согласится оплатить (нажмет на кнопку «Оплатить»). Это вебхук. Здесь мы подбираемся к модулю Paypal -> Execute payment (step 2).
Создаем и настраиваем модуль Paypal -> Execute payment (step 2)
Чтобы платеж прошел, пейпалу нужно послать данные, что клиент нажал на кнопку оплаты и согласился на списание средств.
Для этого нам понадобится создать новый сценарий. Вот как он примерно будет выглядеть:
- Создаем сценарий, создаем вебхук, копируем его URL.
- Вставляем скопированный URL в модуль Paypal -> Create a payment (step 1) в первом сценарии. Если нужно, можно добавить туда доп. параметры через амперсанд &.
- Теперь, после подтверждения клиентом намерения оплатить, на наш вебхук будет прилетать ответ с Payment ID и Payer ID
- После вебхука создаем модуль Paypal -> Execute payment (step 2), вставляем в него Payment ID и Payer ID из модуля вебхука.
- Дальше, опционально, после успешной оплаты, можно добавить редирект на страницу «Спасибо за оплату». Создаете страницу, добавляете модуль Webhook response и настраиваете его.
Где:
- Status: 302 — код редиректа
- Key: ключ (Location)
- Value: URL, на который редиректить.
Дальше, можно добавить модуль отправки писем Email, чтобы уведомить клиента об успешной оплате и поблагодарить.
Теперь возвращаемся в первый сценарий. После того, как мы создали инвойс (Paypal -> Create Payment) его результатом будет уникальная ссылка Approval URL, по которой клиенту нужно будет перейти и оплатить. Эту переменную со ссылкой можно отправлять на почту, Telegram или куда угодно через соответствующие модули в сценарии. Я отправляю в теле письма вместе с кнопкой «Оплатить«.
Избегаем ошибок менеджера
Менеджер, который будет отправять карточку на инвойс, будет ошибаться и иногда не заполнять определенные поля. Поэтому нужно определить, какие поля обязательные и добавить в сценарий фильтр, который будет проверять, все ли поля заполнены.
Вот как это выглядит:
После вытягивания всех полей из карточки Trello через модуль Set multiple variables, создаете роутер, и далее от него одна ветка идет в Telegram сообщение (как уведомление). В этой ветке должен стоять фильтр. В данном случае он проверяет обязательные поля, есть ли в их переменных данные или нет. Если хотя бы одно поле соответствует emptyarray, т.е. пустое, то сценарий пройдет по этому фильтру и отправится сообщение в Telegram. По другой ветке (в создание инвойса в Paypal) сценарий не пойдет.
При такой реализации в фильтре ветки, которая идет в создание инвойса в Paypal, нужно поставить галку, что это запасной путь (Fallback route), по которому сценарий продолжит выполнятся, если не сможет пройти по другим веткам (в нашем случае по ветке, которая проверяет, есть ли ошибки).
Таким образом, если есть хоть 1 незаполненное обязательное поле, то сценарий идет в уведомление в Telegram об ошибке. Если же все поля заполнены, то сценарий идет в создание ссылки инвойса.
Примеры уведомлений в Telegram
На скриншоте выше при ошибке выводятся все обязательные поля и их содержимое. Менеджер должен сам увидеть, где пустое поле.
Чтобы выводить только пустые ошибочные поля, нужно немного усложнить разметку сообщения:
- Создаем модуль Set Multiple Variables и с помощью функции if() определяем, какие из полей пустые.
- Пустые поля объеденяем в одну строку функцией split().
- Выводим результат модуля в разметку сообщения Telegram.
В телеграме удобно, что можно добавлять упоминание менеджера через @. Для этого можно использовать функцию switch(). Или заранее в модуле Set Multiple Variables определять никнейм каждого менеджера, и вставлять в сообщение переменную. Такой подход я подробнее описал здесь.
Функция switch() простая:
- указываем переменную, которую следует проверить:
- Если значение A
- То ответ B
- Если значение A1
- То ответ B1
- и так далее.
Вот такой сценарий выставления инвойсов. Если есть вопросы — задавайте в комментариях. Такая схема отлично работает, можно даже сказать, безотказно. В следующей статье расскажу, как получать уведомления об успешной оплате через Paypal и что дальше с этим данными можно делать.
SEO-менеджер.
Люблю SEO, маркетинг, увлекаюсь автоматизацией и терпеть не могу ручную работу, которую можно делегировать роботу.