0

在我们的 Magento CE 1.7 商店中,我们允许“贸易”客户组中的客户下订单并按采购订单付款。

我们需要实施额外的安全层——当客户到达结账流程的订单审查步骤时,就在通过采购订单付款方式下订单之前,需要有一个提示要求他们的帐户登录密码(即使他们已登录)。他们需要正确输入他们的帐户密码才能下订单。

我知道这是一个相当困难的前景 - 有谁知道这是否相对可能,或者任何提供此功能的现有模块?

提前致谢!

4

1 回答 1

0

您可能可以使用事件/观察者来做到这一点,但我这样做的方式是使用基本上重复采购订单的自定义付款方式

见/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;
    }


}

看看@如何创建支付方式

于 2013-02-26T16:02:17.257 回答