zoukankan      html  css  js  c++  java
  • 在Magento中添加一个自己的支付模块----第二部分

    这里我们将在订单确认时显示我们的支付模块,将我们支付字段的信息和订单信息放在一块;

    需要创建的文件:

    • app/code/local/Envato/Custompaymentmethod/Block/Form/Custompaymentmethod.php: 这个block文件为自定义支付方式指定一个模板文件,展示自定义支付方式的表格;
    • 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: 在右边栏中给总结区设置必要信息。。。;It's a block file which will set up the necessary information for the summary section in the right side­bar.

    创建 app/code/local/Envato/Custompaymentmethod/Block/Form/Custompaymentmethod.php

    <?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');
      }
    }
    说明:指定配置自定义支付模块字段的模板文件;
     
    创建 app/design/frontend/base/default/template/custompaymentmethod/form/custompaymentmethod.phtml
    <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')) ?>" />
        </span>
      </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')) ?>" />
        </span>
      </div>
    </div>
    <div>
       <?php echo $this->getMethod()->getConfigData('message');?>
    </div>
      说明:之间创建过两个字段custom_field_one 和custom_field_two,在这里展示这两个字段;
    创建 app/code/local/Envato/Custompaymentmethod/Model/Paymentmethod.php
    <?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. ");
        }
        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));
      }
    }
    说明:
    1、$_code定义了自定义支付方式的唯一码;
    2、$_formBlockType定义了一个块,当自定义支付方式选中时显示的块文件;
    3、$_infoBlockType定义了一个块,右边栏显示的信息;
    4、validate是对自定义支付相关字段的校验;
    5、assignData将支付信息与订单信息绑定在一块;
    6、getOrderPlaceRedirectUrl客户订单提交后的跳转地址;
    创建 app/code/local/Envato/Custompaymentmethod/Block/Info/Custompaymentmethod.php
    <?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会根据getOrderPlaceRedirectUrl中的地址进行跳转;
     
     
     
     
     
  • 相关阅读:
    Mysql
    JavaScript常用事件
    css
    HTML
    判断pc还是手机打开跳转到别的网页
    queue 队列
    兼容firstChild和firstElementChild
    总结各种width,height,top,left
    原生js提取非行间样式
    ie8 不支持media
  • 原文地址:https://www.cnblogs.com/liudongqing/p/7417888.html
Copyright © 2011-2022 走看看