おそらくイベント/オブザーバーを使用してこれを行うことができますが、これを行う方法は、基本的に 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;
}
}
@お支払い方法の作成方法をご覧ください