这里我们将在订单确认时显示我们的支付模块,将我们支付字段的信息和订单信息放在一块;
需要创建的文件:
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 sidebar.
创建 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中的地址进行跳转;