protected function _buildRequest(Mage_Sales_Model_Order_Payment $payment, $amount) { // Empty Varien_Object's data $this->unsetData(); // in case recurring profile, $methodInstance is not exist, and $payment->getIsRecurring() is used if (!$payment->getIsRecurring()) { $methodInstance = $payment->getMethodInstance(); $infoInstance = $methodInstance->getInfoInstance(); Mage::helper('ewayrapid')->unserializeInfoInstace($infoInstance); } $order = $payment->getOrder(); $shipping = $order->getShippingAddress(); $this->setCustomerIP(Mage::helper('core/http')->getRemoteAddr()); if (Mage::helper('ewayrapid')->isBackendOrder()) { $this->setTransactionType(Eway_Rapid31_Model_Config::TRANSACTION_MOTO); } elseif ($payment->getIsRecurring()) { $this->setTransactionType(Eway_Rapid31_Model_Config::TRANSACTION_RECURRING); } else { $this->setTransactionType(Eway_Rapid31_Model_Config::TRANSACTION_PURCHASE); } $this->setDeviceID('Magento ' . Mage::getEdition() . ' ' . Mage::getVersion()); $this->setShippingMethod('Other'); $paymentParam = Mage::getModel('ewayrapid/field_payment'); $paymentParam->setTotalAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode()); $this->setPayment($paymentParam); $customerParam = Mage::getModel('ewayrapid/field_customer'); $customerTokenId = null; /** get $customerTokenId if product is recurring profile */ if ($payment->getIsRecurring()) { /** @todo save customer id and tokent id into payment when place order */ $customer = Mage::getModel('customer/customer')->load($payment->getCustomerId()); $customerHelper = Mage::helper('ewayrapid/customer'); $customerHelper->setCurrentCustomer($customer); $customerTokenId = $customerHelper->getCustomerTokenId($payment->getTokenId()); } else { /** get $customerTokenId if product is normal item */ if ($infoInstance->getSavedToken()) { $customerHelper = Mage::helper('ewayrapid/customer'); $customerTokenId = $customerHelper->getCustomerTokenId($infoInstance->getSavedToken()); } else { Mage::throwException(Mage::helper('ewayrapid')->__('An error occurred while making the transaction: Token info does not exist.')); } } if ($customerTokenId) { $customerParam->setTokenCustomerID($customerTokenId); if ($this->getTransactionType() == Eway_Rapid31_Model_Config::TRANSACTION_PURCHASE) { $cardDetails = Mage::getModel('ewayrapid/field_cardDetails'); $cardDetails->setCVN($infoInstance->getCcCid()); $customerParam->setCardDetails($cardDetails); } $this->setCustomer($customerParam); } else { Mage::throwException(Mage::helper('ewayrapid')->__('An error occurred while making the transaction: Token info does not exist.')); } $shippingParam = Mage::getModel('ewayrapid/field_shippingAddress'); $shippingParam->setFirstName($shipping->getFirstname())->setLastName($shipping->getLastname())->setStreet1($shipping->getStreet1())->setStreet2($shipping->getStreet2())->setCity($shipping->getCity())->setState($shipping->getRegion())->setPostalCode($shipping->getPostcode())->setCountry(strtolower($shipping->getCountryModel()->getIso2Code()))->setEmail($shipping->getEmail())->setPhone($shipping->getTelephone())->setFax($shipping->getFax()); $this->setShippingAddress($shippingParam); if (isset($methodInstance) && $methodInstance->getConfigData('transfer_cart_items') || $payment->getIsRecurring() || !$payment->getIsInitialFee()) { $orderItems = $order->getAllVisibleItems(); $lineItems = array(); foreach ($orderItems as $orderItem) { /* @var Mage_Sales_Model_Order_Item $orderItem */ $lineItem = Mage::getModel('ewayrapid/field_lineItem'); $lineItem->setSKU($orderItem->getSku()); $lineItem->setDescription(substr($orderItem->getName(), 0, 26)); $lineItem->setQuantity($orderItem->getQtyOrdered()); $lineItem->setUnitCost(round($orderItem->getBasePrice() * 100)); $lineItem->setTax(round($orderItem->getBaseTaxAmount() * 100)); $lineItem->setTotal(round($orderItem->getBaseRowTotalInclTax() * 100)); $lineItems[] = $lineItem; } $this->setItems($lineItems); } return $this; }