在下订单前请求密码确认 - Magento

时间:2013-02-26 12:49:01

标签: magento magento-1.7

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可能可以使用事件/观察者执行此操作,但我这样做的方式是使用基本上与Purchaseorder重复的自定义付款方式

请参阅/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;
    }


}

看看@ How to create a payment method