Статьи

Создание пользовательского метода оплаты в Magento: часть вторая

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

Я предполагаю, что вы знакомы с базовым процессом создания модулей в Magento. Если нет, то вот хорошая статья, объясняющая основы создания пользовательских модулей.

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

  • приложение / и т.д. / модули / Envato_All.xml
  • Приложение / код / ​​местные / Envato / Custompaymentmethod / и т.д. / config.xml
  • Приложение / код / ​​местные / Envato / Custompaymentmethod / и т.д. / System.Xml
  • Приложение / код / ​​местные / Envato / Custompaymentmethod / SQL / custompaymentmethod_setup / install1.0.0.0.php

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

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

  • app/code/local/Envato/Custompaymentmethod/Block/Form/Custompaymentmethod.php : это файл блока, который вызывает соответствующий файл шаблона для отображения пользовательской формы оплаты для нашего пользовательского метода оплаты.
  • app/design/frontend/base/default/template/custompaymentmethod/form/custompaymentmethod.phtml : это файл шаблона, используемый для отображения пользовательской формы оплаты для нашего пользовательского метода оплаты.
  • app/code/local/Envato/Custompaymentmethod/Model/Paymentmethod.php : это файл модели, используемый для проверки и сохранения информации о пользовательских полях оплаты.
  • app/code/local/Envato/Custompaymentmethod/Block/Info/Custompaymentmethod.php : это файл блока, в котором будет установлена ​​необходимая информация для сводной секции на правой боковой панели.

Создайте файл app/code/local/Envato/Custompaymentmethod/Block/Form/Custompaymentmethod.php и вставьте следующее содержимое в этот файл.

01
02
03
04
05
06
07
08
09
10
<?php
// app/code/local/Envato/Custompaymentmethod/Block/Form/Custompaymentmethod.php
class Envato_Custompaymentmethod_Block_Form_Custompaymentmethod extends Mage_Payment_Block_Form
{
  protected function _construct()
  {
    parent::_construct();
    $this->setTemplate(‘custompaymentmethod/form/custompaymentmethod.phtml’);
  }
}

В этом файле мы настроили путь к файлу шаблона, который будет использоваться, когда Magento попытается показать нашу форму, связанную с методом оплаты. Давайте создадим связанный файл шаблона также в app/design/frontend/base/default/template/custompaymentmethod/form/custompaymentmethod.phtml .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<div class=»form-list» id=»payment_form_<?php echo $this->getMethodCode() ?>» style=»display:none;»>
  <div>
    <label><?php echo $this->__(‘Custom Field One’) ?>*</label>
    <span>
      <input type=»text» title=»<?php echo $this->__(‘Custom Field One’) ?>» name=»payment[custom_field_one]» value=»<?php echo $this->htmlEscape($this->getInfoData(‘custom_field_one’)) ?>» />
    
  </div>
  <div>
    <label><?php echo $this->__(‘Custom Field Two’) ?>*</label>
    <span>
      <input type=»text» title=»<?php echo $this->__(‘Custom Field Two’) ?>» name=»payment[custom_field_two]» value=»<?php echo $this->htmlEscape($this->getInfoData(‘custom_field_two’)) ?>» />
    
  </div>
</div>
<div>
    <?php echo $this->getMethod()->getConfigData(‘message’);?>
</div>

Напомним, что в первой части этой серии мы создали два пользовательских поля: custom_field_one и custom_field_two , используя установочный файл sql. Таким образом, в приведенном выше файле шаблона мы отображаем эти два поля в виде простых текстовых полей.

Теперь Magento не обнаружит вышеуказанную настройку блока формы автоматически. Для этого нам нужно настроить файл модели, поэтому давайте сделаем это, создав файл модели app/code/local/Envato/Custompaymentmethod/Model/Paymentmethod.php со следующим содержимым.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
// app/code/local/Envato/Custompaymentmethod/Model/Paymentmethod.php
class Envato_Custompaymentmethod_Model_Paymentmethod extends Mage_Payment_Model_Method_Abstract {
  protected $_code = ‘custompaymentmethod’;
  protected $_formBlockType = ‘custompaymentmethod/form_custompaymentmethod’;
  protected $_infoBlockType = ‘custompaymentmethod/info_custompaymentmethod’;
 
  public function assignData($data)
  {
    $info = $this->getInfoInstance();
     
    if ($data->getCustomFieldOne())
    {
      $info->setCustomFieldOne($data->getCustomFieldOne());
    }
     
    if ($data->getCustomFieldTwo())
    {
      $info->setCustomFieldTwo($data->getCustomFieldTwo());
    }
 
    return $this;
  }
 
  public function validate()
  {
    parent::validate();
    $info = $this->getInfoInstance();
     
    if (!$info->getCustomFieldOne())
    {
      $errorCode = ‘invalid_data’;
      $errorMsg = $this->_getHelper()->__(«CustomFieldOne is a required field.\n»);
    }
     
    if (!$info->getCustomFieldTwo())
    {
      $errorCode = ‘invalid_data’;
      $errorMsg .= $this->_getHelper()->__(‘CustomFieldTwo is a required field.’);
    }
 
    if ($errorMsg)
    {
      Mage::throwException($errorMsg);
    }
 
    return $this;
  }
 
  public function getOrderPlaceRedirectUrl()
  {
    return Mage::getUrl(‘custompaymentmethod/payment/redirect’, array(‘_secure’ => false));
  }
}

$_code определяет уникальный код нашего метода оплаты. Кроме того, $_formBlockType определяет местоположение файла блока, который будет вызываться при $_formBlockType метода оплаты. Мы уже настроили файлы бланков, связанные с этим, в предыдущем разделе! Далее, $_infoBlockType определяет файл блока, который будет отображать информацию о способе оплаты на правой боковой панели, как мы увидим в следующем разделе.

Метод validate используется для проверки данных наших пользовательских полей, связанных с платежами, а метод assignData используется для сохранения наших пользовательских полей, связанных с платежами, вместе с другой информацией о заказе. И, наконец, метод getOrderPlaceRedirectUrl возвращает URL-адрес, который используется для перенаправления пользователя после размещения заказа.

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

Процесс проверки

Как вы можете видеть на скриншоте, когда вы выбираете «CustomPaymentMethod», он отображает два пользовательских поля: «Custom Field One» и «Custom Field Two»!

Теперь давайте создадим последний файл этого руководства: app/code/local/Envato/Custompaymentmethod/Block/Info/Custompaymentmethod.php и вставим следующее содержимое в этот файл. Это файл, упомянутый свойством $_infoBlockType в файле модели, который мы определили ранее.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
// app/code/local/Envato/Custompaymentmethod/Block/Info/Custompaymentmethod.php
class Envato_Custompaymentmethod_Block_Info_Custompaymentmethod extends Mage_Payment_Block_Info
{
  protected function _prepareSpecificInformation($transport = null)
  {
    if (null !== $this->_paymentSpecificInformation)
    {
      return $this->_paymentSpecificInformation;
    }
     
    $data = array();
    if ($this->getInfo()->getCustomFieldOne())
    {
      $data[Mage::helper(‘payment’)->__(‘Custom Field One’)] = $this->getInfo()->getCustomFieldOne();
    }
     
    if ($this->getInfo()->getCustomFieldTwo())
    {
      $data[Mage::helper(‘payment’)->__(‘Custom Field Two’)] = $this->getInfo()->getCustomFieldTwo();
    }
 
    $transport = parent::_prepareSpecificInformation($transport);
     
    return $transport->setData(array_merge($data, $transport->getData()));
  }
}

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

Правая боковая панель

Итак, мы почти завершили процесс оформления заказа. Теперь, когда пользователь нажимает кнопку « Разместить заказ» , Magento перенаправляет его или ее на URL-адрес, который мы определили в методе getOrderPlaceRedirectUrl в файле модели.

В следующей и последней части этой серии мы продолжим и продемонстрируем страницу шлюза демо-платежей!

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