Статьи

Обработка платежей с помощью гравитационных форм

Из этого туториала вы узнаете, как использовать плагин Gravity Forms в сочетании с плагином Gravity Forms — PayPal Payments Standard для создания пользовательских форм для обработки платежей на вашем веб-сайте WordPress.

Мы кратко рассмотрим, как работает Gravity Forms, и как использование его дополнительного надбавки к оплате позволяет вам принимать платежи и получать информацию одновременно. Мы не будем фокусироваться на дизайне форм или их функциональности. Я собираюсь продемонстрировать, как использовать этот плагин для создания быстрых и простых форм для сбора данных для манипуляций (оставляя плагин для выполнения тяжелой обработки платежей).

Предупреждение — это не бесплатные плагины

Обратите внимание, что Gravity Forms (и связанный с ним плагин PayPal, который будет использоваться) не являются бесплатными плагинами.

Gravity Forms имеет модель на основе подписки, в которой вы являетесь либо «Личным» , либо «бизнесом», либо «разработчиком» , и вы покупаете доступ к плагину. Для использования функции платежей PayPal вам необходимо иметь лицензию «Разработчик» для загрузки необходимого дополнения. Этот учебник потребует использования этих плагинов.

Что такое гравитационные формы?

Gravity Forms — это плагин для создания форм, который позволяет быстро и легко создавать настраиваемые формы с помощью интерфейса «нажми и перетащи». Используя этот плагин, вы можете создавать разнообразные формы, начиная от простых контактных запросов и заканчивая сложными, условно построенными формами.

Гравитационные Формы

С Gravity Forms вы можете создавать формы со всеми ожидаемыми стандартными элементами формы; текстовые поля, списки выбора, флажки и переключатели. Кроме того, он также поставляется с несколькими полезными элементами, такими как селекторы даты, номера телефонов, CAPTURE и списки.

Используя этот плагин, вы можете легко собрать форму, которую затем сможете вывести на выбранную вами страницу или пост (используя их шорткод).

Образец гравитационной формы

Gravity Forms дополнения и платежи

Хотя Gravity Forms отлично справляется с созданием форм, иногда ваши формы требуют дополнительной обработки или логики, или связи со сторонними сервисами. Именно здесь в игру вступают дополнения для Gravity Forms.

Эти дополнительные дополнения / плагины можно просматривать и загружать из их онлайн-хранилища , а после загрузки они могут быть загружены на ваш сайт и активированы как обычный плагин.

Поскольку в этом руководстве обсуждаются платежи с PayPal, мы будем использовать стандартное дополнение PayPal Payments Standard. Это позволит нам подключить наши пользовательские формы к учетной записи PayPal и принимать платежи.

Существует ряд других дополнений PayPal для Gravity Forms; однако они обычно предлагаются для устаревших учетных записей PayPal (или учетных записей, которые требуют специальных функций). Почти для всех текущих учетных записей (и новых учетных записей PayPal) этот плагин будет правильным выбором.

Гравитационные формы PayPal Payments Standard

Сценарий — форма членства

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

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

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

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

Начиная

Перво-наперво, у вас должны быть следующие элементы, чтобы вы могли продолжить этот урок:

  • Плагин Gravity Forms
  • Gravity Forms PayPal Payments Стандартное дополнение
  • Экземпляр WordPress, настроенный с использованием последней версии (я протестировал это для работы с WP 3.7+)
  • FTP-доступ (мы будем использовать хуки / фильтры Gravity Form, поэтому вам нужно иметь доступ к своим functions.php или аналогичным)

Как указывалось ранее, Gravity Forms не является бесплатным плагином, и вы должны приобрести подписку, чтобы использовать его. Получив подписку, вы можете загрузить необходимые плагины (для интеграции с PayPal вам потребуется лицензия уровня разработчика).

Как только все эти элементы будут отсортированы, мы сразу приступим к созданию форм для приема платежей.

Шаг 1 — Подключение гравитационных форм к PayPal

Поскольку Gravity Forms обрабатывает платежи и переходы вместе с PayPal, PayPal необходимо настроить таким образом, чтобы при обработке платежей он уведомлял Gravity Forms (которые он будет использовать для обновления информации о своей транзакции; например, пометив заказ как выполненный).

Перейдите на серверную часть вашего веб-сайта, перейдите в меню «Формы» и найдите вкладку «Настройки». На вкладке «Настройки» вам нужно найти подменю «PayPal». После того, как вы нажали на подменю «PayPal», вы должны увидеть следующий экран.

Настройки PayPal

Вам нужно скопировать URL, указанный на этой странице, и перейти в свою учетную запись PayPal. Вам нужно будет войти в учетную запись, с которой вы собираетесь принимать платежи, и включить обработку IPN. Вы увидите экран, аналогичный приведенному ниже.

Уведомление о мгновенном платеже

После того, как вы обновите свои настройки IPN в PayPal, вернитесь на страницу настроек на своем веб-сайте и включите флажок, подтверждающий, что ваш IPN был правильно настроен.

Примечание: если вы не сделаете этот шаг, различные хуки и фильтры никогда не сработают, и вам будет интересно, почему ничего не работает.

Шаг 2 — Создание вашей формы членства

Перейдите к фону WordPress и найдите меню «Формы». Вы можете нажать эту кнопку, чтобы перейти к списку всех ваших форм, или вы можете нажать кнопку «Новая форма».

Как только вы нажмете кнопку «Новая форма», появится окно. Просто введите название формы и краткое описание, и после перенаправления вы увидите следующий экран.

Бланк гравитационная форма

Гравитационные формы разделены на две части. Левый раздел покажет вам текущие элементы в вашей форме; в то время как на правой стороне есть список всех элементов формы, которые вы можете добавить (удобно сгруппированы по функциям).

Если вам требуется более глубокое понимание того, как работают Gravity Forms, я бы посоветовал прочитать их документацию на их веб-сайте.

Добавление полей формы

Теперь вам нужно создать саму форму. Для этого примера я буду добавлять эти поля в форму. Не стесняйтесь следовать или добавить свои собственные поля.

  • Имя — (Стандартные поля — Однострочный текст)
  • Фамилия — (Стандартные поля — Однострочный текст)
  • Электронная почта — (Расширенные поля — Электронная почта)
  • Телефон — (Дополнительные поля — Телефон)
  • Адрес — (Дополнительные поля — Адрес)
  • Тип членства — (Поля цен — Продукт)
  • Общая стоимость — (Поля оценки — Всего)

После того, как вы добавили все эти поля, вы можете перейти к их настройке для использования.

Настройка полей формы

Большинство полей формы, которые вы можете выбрать, могут быть настроены с несколькими параметрами. Выпадающие списки могут быть заполнены опциями, поля могут быть обязаны обрабатываться, могут быть установлены сообщения проверки и многое другое.

В нашем сценарии мы используем только 7 полей, поэтому нажмите на каждое поле, чтобы развернуть список параметров и настроить их следующим образом:

  • Имя, Фамилия, Электронная почта — пометьте эти поля как обязательные
  • Телефон, общая стоимость — оставь как есть, ничего особенного
  • Адрес — эти шаги могут немного отличаться для вас, однако я решил использовать настройки «Международный», а также «Скрыть строку адреса 2», страна по умолчанию выбрана как «Австралия» и помечена как «Обязательная».
  • Тип членства — так как это продукт, есть несколько вариантов на выбор. Я выбрал, что «Тип поля» ** будет «Радиокнопки» с двумя вариантами:
    — Годовое членство ($ 0,05)
    — Двухлетнее членство ($ 0,08)
    — Это поле также будет «Обязательным»

После того, как вы настроили поля формы, они должны выглядеть примерно так, как показано ниже.

Гравитационная форма

Шаг 3 — Соединение вашей формы с PayPal

Теперь, когда мы настроили Gravity Forms и подключили его к вашей учетной записи PayPal, нам нужно также подключить ваши отдельные формы к PayPal.

Перейдите к серверу WordPress и найдите меню «Формы» . Под этим меню вы увидите ярлык под названием «PayPal» . Нажмите, чтобы продолжить (если вы этого не видите, значит, вы не установили надстройку PayPal для Gravity Forms).

PayPal Forms

Информация выше может отличаться в зависимости от используемой версии. Если вы не видите его, как показано выше, посмотрите «Формы» (выберите форму)> «Настройки формы».

На этом экране вы можете увидеть все ваши формы PayPal.

При добавлении новой формы оплаты вам необходимо будет предоставить следующую информацию:

  • Адрес электронной почты PayPal — введите адрес, который будет использоваться для сбора платежей
  • Режим — выберите либо производство, либо тестирование
  • Тип транзакции — выберите «Товары и услуги».
  • Форма гравитации — выберите форму, которая будет связана с этим платежом. Идите дальше и выберите форму, которую вы только что создали.
  • После выбора вам будет показана дополнительная информация. Эта информация относится к интеграции с PayPal и включает сопоставление ваших полей со стандартными полями PayPal, выбор местоположения отмены URL-адреса и других элементов. Не стесняйтесь завершать их, если требуется.

После завершения и сохранения вы увидите нечто похожее на приведенное ниже.

Настройки транзакции PayPal

Шаг 4 — Добавление вашей формы членства на страницу

Теперь, когда ваша форма готова, все, что вам нужно сделать, это добавить эту форму на страницу и протестировать ее.

Перейдите на сервер и найдите пункт меню «Страницы». Создайте новую страницу, и если вы внимательно посмотрите на визуальный редактор, появится новая кнопка; эта кнопка быстро добавит вашу форму на страницу с помощью шорткода.

Шорткод гравитационных форм

Использование крючков и фильтров Gravity Form

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

Пользователь вводит свою информацию, обрабатывает PayPal, оплачивает свои услуги, а затем при необходимости возвращается на веб-сайт (генерируя уведомления для всех).

Хотя гравитационные формы будут выполнять всю тяжелую работу, вам может потребоваться выполнить дополнительные действия или функции, в зависимости от того, что произошло. Именно здесь Gravity Forms становятся очень полезными, поскольку они предоставляют множество хуков и фильтров, которые мы можем использовать.

Для нашей системы членства мы заинтересованы в хуках платежных транзакций и фильтрах, предоставляемых дополнением PayPal. Есть несколько из них, которые полезны ; однако для этого урока мы gform_paypal_fulfillment хук gform_paypal_fulfillment .

Обработка после транзакций PayPal

Основным хуком, который мы будем использовать, является хук gform_paypal_fulfillment .

Этот хук запускается после успешного завершения транзакции PayPal и возвращает список полезной информации, которую мы можем использовать в наших внутренних действиях.

Этот хук должен быть присоединен к функции по вашему выбору, передавая следующие четыре переменные:

  • $entry
  • $config
  • $transaction_id
  • $amount

Каждая из этих переменных будет содержать информацию о вашей транзакции и ее данные. В этом примере мы будем извлекать все данные формы об этом членстве и затем отправлять эту информацию по электронной почте.

Сначала создайте функцию и прикрепите ее к этому хуку следующим образом:

 //function used to hook onto after payments function membership_payment_processing($entry,$config,$transaction_id,$amount){ //your post processing to go in here } add_action('gform_paypal_fulfillment','membership_payment_processing',10,4); 

В качестве предупреждающего слова не забудьте установить «приоритет» ловушки на 10 и «количество аргументов» на 4 (так как этот ловушка обычно хочет, чтобы они были переданы).

Значения внутри $entry

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

Мы рассмотрим переменную $entry , которая содержит массив значений для нашей транзакции. Полный список значений, присвоенных этому массиву, можно просмотреть в объекте Gravity Form $ entry , однако нам понадобятся следующие основные значения:

  • form_id
  • payment_date
  • payment_status

В дополнение к этим именованным значениям массив $entry также будет содержать все поля, заполненные в вашей форме. Они будут структурированы в числовом виде с ключом поля, представленным строкой. Например, '1' или '2'.

В нашем примере наше первое поле — это first name , поэтому значение, принадлежащее first name будет сохранено в $entry с именем ключа '1' поэтому мы присвоим его переменной следующим образом:

 //assign the first name field to a variable $first_name = $entry['1'] 

Ваша форма может иметь кучу полей, и они могут перемещаться вверх и вниз или создаваться в разное время, поэтому, вообще говоря, вы не можете полагаться на правильность положения в редакторе форм. Вы можете просмотреть все ключи и значения массива $entry а затем присвоить их строке. После того как вы сделали это для всех своих значений, вы можете отправить себе электронное письмо (чтобы вы могли легко увидеть ключ и его значение).

 //collect all entry values function membership_payment_processing($entry,$config,$transaction_id,$amount){ $message = ''; foreach($entry as $key=>$value){ $message .= 'Key: ' . $key . ' Value: ' . $value; } //send yourself an email (replace the email address below with yours) wp_mail('[email protected]','Entry Information`,$message); } add_action('gform_paypal_fulfillment','membership_payment_processing',10,4); 

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

Извлечение нашей необходимой информации

Давайте перейдем к нашему примеру. В нашем примере мы будем извлекать наши поля формы в переменные, чтобы мы могли хранить их значения. Ваш код должен выглядеть примерно так, как показано ниже (не забудьте сначала пройти тестовый прогон и определить, каким будет соответствующее строковое значение для полей формы).

 //process membership after transaction function membership_payment_processing($entry,$config,$transaction_id,$amount){ //first determine if we are processing the correct form $form_id = $entry['form_id']; if($form_id == 1){ //collect values values $first_name = $entry['1']; $last_name = $entry['2']; $email = $entry['3']; $phone = isset($entry['4']) ? $entry['4'] : ''; $address_street = $entry['5.1']; //notice '5.2' is missing, this is address line 2 we removed from the address configuration $address_city = $entry['5.3']; $address_state = $entry['5.4']; $address_postcode = $entry['5.5']; $address_country = $entry['5.6']; $membership_type = $entry['6']; $total_cost = $amount; $transaction_id = $transaction_id; //format these values into a message that we can send //replace values as required $to ='[email protected]'; $subject = 'New Membership Application'; $header_cell_style = 'background: #ccc; text-align: center; padding: 5px 7px 5px 7px;'; $cell_style = 'background: #eee; text-align: center; padding: 5px 7px 5px 7px;'; $message = ''; $message .= '<h2>New Member Application</h2>'; $message .= '<p>A new member has successfully been processed</p>'; $message .= '<table border="1" style="border-collapse: collapse;">'; $message .='<tr>'; $message .='<th style="' . $header_cell_style . '"> First name </td>'; $message .='<th style="' . $header_cell_style . '"> Last name </td>'; $message .='<th style="' . $header_cell_style . '"> Email </td>'; $message .='<th style="' . $header_cell_style . '"> Phone </td>'; $message .='<th style="' . $header_cell_style . '"> Address Street </td>'; $message .='<th style="' . $header_cell_style . '"> Address City </td>'; $message .='<th style="' . $header_cell_style . '"> Address State </td>'; $message .='<th style="' . $header_cell_style . '"> Address Postcode </td>'; $message .='<th style="' . $header_cell_style . '"> Address Country </td>'; $message .='<th style="' . $header_cell_style . '"> Membership Type </td>'; $message .='<th style="' . $header_cell_style . '"> Total Cost </td>'; $message .='<th style="' . $header_cell_style . '"> Transaction ID </td>'; $message .='</tr>'; $message .='<tr>'; $message .='<td style="' . $cell_style. '">' . $first_name . '</td>'; $message .='<td style="' . $cell_style. '">' . $last_name . '</td>'; $message .='<td style="' . $cell_style. '">' . $email . '</td>'; $message .='<td style="' . $cell_style. '">' . $phone . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_street . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_city . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_state . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_postcode . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_country . '</td>'; $message .='<td style="' . $cell_style. '">' . $membership_type . '</td>'; $message .='<td style="' . $cell_style. '">' . $total_cost . '</td>'; $message .='<td style="' . $cell_style. '">' . $transaction_id . '</td>'; $message .='</tr>'; $message .= '</table>'; //add filter to enable HTML messages add_filter('wp_mail_content_type','set_email_to_html'); //send mail wp_mail($to,$subject,$message); //remove filter (to set back to plain text email) remove_filter( 'wp_mail_content_type', 'set_email_to_html' ); } } add_action('gform_paypal_fulfillment','membership_payment_processing',10,4); //sets the email content type to HTML function set_email_to_html(){ return true; } при //process membership after transaction function membership_payment_processing($entry,$config,$transaction_id,$amount){ //first determine if we are processing the correct form $form_id = $entry['form_id']; if($form_id == 1){ //collect values values $first_name = $entry['1']; $last_name = $entry['2']; $email = $entry['3']; $phone = isset($entry['4']) ? $entry['4'] : ''; $address_street = $entry['5.1']; //notice '5.2' is missing, this is address line 2 we removed from the address configuration $address_city = $entry['5.3']; $address_state = $entry['5.4']; $address_postcode = $entry['5.5']; $address_country = $entry['5.6']; $membership_type = $entry['6']; $total_cost = $amount; $transaction_id = $transaction_id; //format these values into a message that we can send //replace values as required $to ='[email protected]'; $subject = 'New Membership Application'; $header_cell_style = 'background: #ccc; text-align: center; padding: 5px 7px 5px 7px;'; $cell_style = 'background: #eee; text-align: center; padding: 5px 7px 5px 7px;'; $message = ''; $message .= '<h2>New Member Application</h2>'; $message .= '<p>A new member has successfully been processed</p>'; $message .= '<table border="1" style="border-collapse: collapse;">'; $message .='<tr>'; $message .='<th style="' . $header_cell_style . '"> First name </td>'; $message .='<th style="' . $header_cell_style . '"> Last name </td>'; $message .='<th style="' . $header_cell_style . '"> Email </td>'; $message .='<th style="' . $header_cell_style . '"> Phone </td>'; $message .='<th style="' . $header_cell_style . '"> Address Street </td>'; $message .='<th style="' . $header_cell_style . '"> Address City </td>'; $message .='<th style="' . $header_cell_style . '"> Address State </td>'; $message .='<th style="' . $header_cell_style . '"> Address Postcode </td>'; $message .='<th style="' . $header_cell_style . '"> Address Country </td>'; $message .='<th style="' . $header_cell_style . '"> Membership Type </td>'; $message .='<th style="' . $header_cell_style . '"> Total Cost </td>'; $message .='<th style="' . $header_cell_style . '"> Transaction ID </td>'; $message .='</tr>'; $message .='<tr>'; $message .='<td style="' . $cell_style. '">' . $first_name . '</td>'; $message .='<td style="' . $cell_style. '">' . $last_name . '</td>'; $message .='<td style="' . $cell_style. '">' . $email . '</td>'; $message .='<td style="' . $cell_style. '">' . $phone . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_street . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_city . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_state . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_postcode . '</td>'; $message .='<td style="' . $cell_style. '">' . $address_country . '</td>'; $message .='<td style="' . $cell_style. '">' . $membership_type . '</td>'; $message .='<td style="' . $cell_style. '">' . $total_cost . '</td>'; $message .='<td style="' . $cell_style. '">' . $transaction_id . '</td>'; $message .='</tr>'; $message .= '</table>'; //add filter to enable HTML messages add_filter('wp_mail_content_type','set_email_to_html'); //send mail wp_mail($to,$subject,$message); //remove filter (to set back to plain text email) remove_filter( 'wp_mail_content_type', 'set_email_to_html' ); } } add_action('gform_paypal_fulfillment','membership_payment_processing',10,4); //sets the email content type to HTML function set_email_to_html(){ return true; } 

Если вас больше интересует почта WordPress, вы можете нажать здесь, чтобы просмотреть страницу кодекса .

Мы подключили хук gform_paypal_fulfillment и определили, что собирается правильная форма (в моем примере это была форма 1). Как только мы узнаем, что находимся в правильной форме, мы собираем значения нашей формы.

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

Мы используем фильтр с именем wp_mail_content_type . Этот фильтр определяет, будет ли ваше письмо отправлено в виде обычного текста или в формате HTML. Мы вызываем этот фильтр непосредственно перед отправкой нашего электронного письма, а затем снова удаляем его (чтобы мы не создавали конфликт).

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

В заключение

Теперь, когда вы знаете, как использовать Gravity Forms и его надстройку PayPal для приема платежей, вы можете использовать это как основу для создания более сложной функциональности (без необходимости ручной интеграции с платежным шлюзом).