Für einen aktiven Check muss ein Observer in /etc/config.xml registriert werden:
<frontend>
<events>
<payment_method_is_active>
<observers>
<vendor_modulename>
<type>singleton</type>
<class>Vendor_ModuleName_Model_Observer</class>
<method>activeCheck</method>
</vendor_modulename>
</observers>
</payment_method_is_active>
</events>
</frontend>
Der ActiveCheck kann anschließend wie folgt in der /Model/Observer.php durchgeführt werden:
/**
* Checks risk.
*
* @param Varien_Event_Observer $observer
*
* @return null
*/
public function activeCheck(Varien_Event_Observer $observer)
{
$event = $observer->getEvent();
$methodCode = $event->getMethodInstance()->getCode();
$buergelApi = ...
if ($buergelApi->checkRisk($methodCode, true)) { // perform api request here
$observer->getEvent()->getResult()->isAvailable = false;
}
}
Um den Passive Check zu integrieren, kann die OrderAction des OnepageController wie folgt verändert werden:
/**
* Create order action
*/
public function saveOrderAction()
{
$buergelApi = ... // load buergel api class
$methodCode = $buergelApi->getQuotePaymentMethod();
if ($buergelApi->checkRisk($methodCode, false)) {
if (!$this->_validateFormKey()) {
$this->_redirect('*/*');
return;
}
if ($this->_expireAjax()) {
return;
}
$session = Mage::getSingleton('checkout/session');
$session->setData(
'vendor_modulename_disabled_method',
$methodCode
);
$result['error'] = true;
$result['error_messages'] = __('The payment method is currently not available.');
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml(),
);
$this->getResponse()
->setBody(Mage::helper('core')->jsonEncode($result));
} else {
parent::saveOrderAction();
}
}