在我们的 Magento CE 1.7 商店中,我们允许“贸易”客户组中的客户下订单并按采购订单付款。
我们需要实施额外的安全层——当客户到达结账流程的订单审查步骤时,就在通过采购订单付款方式下订单之前,需要有一个提示要求他们的帐户登录密码(即使他们已登录)。他们需要正确输入他们的帐户密码才能下订单。
我知道这是一个相当困难的前景 - 有谁知道这是否相对可能,或者任何提供此功能的现有模块?
提前致谢!
在我们的 Magento CE 1.7 商店中,我们允许“贸易”客户组中的客户下订单并按采购订单付款。
我们需要实施额外的安全层——当客户到达结账流程的订单审查步骤时,就在通过采购订单付款方式下订单之前,需要有一个提示要求他们的帐户登录密码(即使他们已登录)。他们需要正确输入他们的帐户密码才能下订单。
我知道这是一个相当困难的前景 - 有谁知道这是否相对可能,或者任何提供此功能的现有模块?
提前致谢!
您可能可以使用事件/观察者来做到这一点,但我这样做的方式是使用基本上重复采购订单的自定义付款方式
见/app/code/core/Mage/Payment/Model/Method/Purchaseorder.php
class Mage_Payment_Model_Method_Purchaseorder extends Mage_Payment_Model_Method_Abstract
{
.....
/**
* Validate payment method information object
*
* @return Mage_Payment_Model_Abstract
*/
public function validate()
{
$paymentInfo = $this->getInfoInstance();
validate customer password there
if($paymentInfo->getOrder()->getCustomerId()){
//see login() in /app/code/core/Mage/Customer/Model/Session.php
$customer = Mage::getModel('customer/customer')
->setWebsiteId(Mage::app()->getStore()->getWebsiteId());
//May need to change to the order store id and not Mage::app()->getStore()->getWebsiteId()
//get password enter on PO screen
$password = $paymentInfo->getPassword()
if ($customer->authenticate($paymentInfo->getOrder()->getCustomerEmail(), $password)) {
return true;
}
return false;
}
else{
//customer not login
return false;
}
/**
* to validate payment method is allowed for billing country or not
*/
if ($paymentInfo instanceof Mage_Sales_Model_Order_Payment) {
$billingCountry = $paymentInfo->getOrder()->getBillingAddress()->getCountryId();
} else {
$billingCountry = $paymentInfo->getQuote()->getBillingAddress()->getCountryId();
}
if (!$this->canUseForCountry($billingCountry)) {
Mage::throwException(Mage::helper('payment')->__('Selected payment type is not allowed for billing country.'));
}
return $this;
}
/**
* Assign data to info model instance
*
* @param mixed $data
* @return Mage_Payment_Model_Method_Purchaseorder
*/
public function assignData($data)
{
if (!($data instanceof Varien_Object)) {
$data = new Varien_Object($data);
}
$this->getInfoInstance()->setPoNumber($data->getPoNumber());
$this->getInfoInstance()->setPassword($data->getPassword());
return $this;
}
}
看看@如何创建支付方式