Skip to content

Добавление специфических полей на форме оплаты

Lev Zvyagintsev edited this page Oct 14, 2016 · 4 revisions

Это инструкция по добавлению кастомных полей платёжной формы для одного/нескольких способов оплаты (платёжных методов, ПМов).

1. У форм присутствуют т. н. "глобальные поля": размер платежа ('amount'), имя донора ('name'), почта донора ('email'), согласие с условиями сервиса ('agree'), кнопка отправки платежа ('submit'). Кроме редких случаев, эти поля необходимы для каждого ПМа, поэтому они управляются как единая группа.

Чтобы указать для ПМа, нужны ли ему глобальные поля, нужно при определении класса этого ПМа (подкласс Leyka_Payment_Method) в методе _set_attributes() указать атрибут _support_global_fields в значение true или false.

2. В методе _set_attributes() класса ПМа определите значение атрибута _custom_fields.

Этот атрибут - ассоциативный массив, где ключи - строковые ID полей данных, а значения - HTML-код соотв. полей на форме. Пример использования атрибута _custom_fields для добавления в ПМ специальных полей - в методе _set_attributes() класса Leyka_CP_Card:

$this->_custom_fields = array(
    'recurring' => '<label class="checkbox"><span><input type="checkbox" id="leyka_'.$this->full_id.'_recurring" name="leyka_recurring" value="1"></span> '.__('Monthly donations', 'leyka').'</label>'
);

После этого на форме для пожертвований у соответствующего ПМа появится новое поле. Валидация этого поля настраивается с помощью CSS-классов:

  • класс required подразумевает, что поле обязательно для заполнения;
  • класс email - что значение - валидный адрес эл. почты;
  • non-email - что значение не email.

Внимание: Внимание: если в определении кастомных полей вы используете значения опций плагина (leyka_options()->opt("ID опции")), то определять значение $this->_custom_fields нужно не в методе _set_attributes(), а в методе _set_dynamic_attributes(). Пример из класса Leyka_Mixplat_Text:

protected function _set_dynamic_attributes() {
    $this->_custom_fields = array(
        'sms_details' => apply_filters('leyka_the_content', leyka_options()->opt_safe($this->full_id.'_details')),
    );
}

3. Теперь, когда на форме у ПМа появились кастомные поля, обработайте в JS-коде ПМа значения этих полей при отправке пожертвования донором (как, напимер, в гейтвее CloudPayments, см. файл /gateways/cp/js/leyka.cp.js). Кроме того, значения кастомных полей формы используются при сохранении данных пожертвования в БД сайта. Для этого предназначен метод process_form($gateway_id, $pm_id, $donation_id, $form_data) в классе гейтвея. Последний параметр метода - ассоциативный массив, где имена и значения соответствуют полям формы пожертвования (включая кастомные поля, которые вы определили выше). Пример метода process_form() из класса Leyka_CP_Gateway:

public function process_form($gateway_id, $pm_id, $donation_id, $form_data) {

    $donation = new Leyka_Donation($donation_id);

    if( !empty($form_data['leyka_recurring']) ) {
        $donation->payment_type = 'rebill';
    }

}

Резюме: эти сведения помогут вам добавить и использовать (на базовом уровне) кастомные поля в платёжные методы (ПМы).

Clone this wiki locally