Example #1
0
 /**
  * Refund order
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return string Amazon Transaction Id
  */
 public function refund($payment, $amount)
 {
     $_document = '<?xml version="1.0" encoding="UTF-8"?>
         <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
         <Header>
             <DocumentVersion>1.01</DocumentVersion>
             <MerchantIdentifier>' . $this->getMerchantIdentifier() . '</MerchantIdentifier>
         </Header>
         <MessageType>OrderAdjustment</MessageType>';
     $_shippingAmount = $payment->getCreditmemo()->getShippingAmount();
     $_messageId = 1;
     foreach ($payment->getCreditmemo()->getAllItems() as $item) {
         /* @var $item Mage_Sales_Model_Order_Creditmemo_Item */
         if ($item->getOrderItem()->getParentItemId()) {
             continue;
         }
         $shipping = 0;
         $amazon_amounts = unserialize($item->getOrderItem()->getProductOptionByCode('amazon_amounts'));
         if ($amazon_amounts['shipping'] > $_shippingAmount) {
             $shipping = $_shippingAmount;
         } else {
             $shipping = $amazon_amounts['shipping'];
         }
         $_shippingAmount -= $shipping;
         $_document .= '<Message>
                         <MessageID>' . $_messageId . '</MessageID>
                         <OrderAdjustment>
                             <AmazonOrderID>' . $payment->getOrder()->getExtOrderId() . '</AmazonOrderID>
                             <AdjustedItem>
                                 <AmazonOrderItemCode>' . $item->getOrderItem()->getExtOrderItemId() . '</AmazonOrderItemCode>
                                 <AdjustmentReason>GeneralAdjustment</AdjustmentReason>
                                 <ItemPriceAdjustments>
                                     <Component>
                                         <Type>Principal</Type>
                                         <Amount currency="USD">' . $this->formatAmount($item->getBaseRowTotal()) . '</Amount>
                                     </Component>
                                     <Component>
                                         <Type>Tax</Type>
                                         <Amount currency="USD">' . $this->formatAmount($item->getBaseTaxAmount()) . '</Amount>
                                     </Component>' . '<Component>
                                         <Type>Shipping</Type>
                                         <Amount currency="USD">' . $this->formatAmount($shipping) . '</Amount>
                                     </Component>' . '</ItemPriceAdjustments>';
         $_document .= '</AdjustedItem>
                     </OrderAdjustment>
                 </Message>';
         $_messageId++;
     }
     $_document .= '</AmazonEnvelope>';
     $params = array('merchant' => $this->getMerchantInfo(), 'messageType' => self::MESSAGE_TYPE_ADJUSTMENT, 'doc' => $this->_createAttachment($_document));
     $this->_proccessRequest('postDocument', $params);
     return $this->_result;
 }
 /**
  * Refund order
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return string Amazon Transaction Id
  * Modified to use MWS instead of SOAP 
  */
 public function refund($payment, $amount)
 {
     $_document = '<?xml version="1.0" encoding="UTF-8"?>
         <AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
         <Header>
             <DocumentVersion>1.01</DocumentVersion>
             <MerchantIdentifier>' . $this->getMerchantIdentifier() . '</MerchantIdentifier>
         </Header>
         <MessageType>OrderAdjustment</MessageType>';
     $_shippingAmount = $payment->getCreditmemo()->getShippingAmount();
     $_messageId = 1;
     foreach ($payment->getCreditmemo()->getAllItems() as $item) {
         /* @var $item Mage_Sales_Model_Order_Creditmemo_Item */
         if ($item->getOrderItem()->getParentItemId()) {
             continue;
         }
         $shipping = 0;
         $amazon_amounts = unserialize($item->getOrderItem()->getProductOptionByCode('amazon_amounts'));
         if ($amazon_amounts['shipping'] > $_shippingAmount) {
             $shipping = $_shippingAmount;
         } else {
             $shipping = $amazon_amounts['shipping'];
         }
         $_shippingAmount -= $shipping;
         $currency = Mage::getModel('amazonpayments/api_cba')->getCurrencyFormat();
         $_document .= '<Message>
                         <MessageID>' . $_messageId . '</MessageID>
                         <OrderAdjustment>
                             <AmazonOrderID>' . $payment->getOrder()->getExtOrderId() . '</AmazonOrderID>
                             <AdjustedItem>
                                 <AmazonOrderItemCode>' . $item->getOrderItem()->getExtOrderItemId() . '</AmazonOrderItemCode>
                                 <AdjustmentReason>GeneralAdjustment</AdjustmentReason>
                                 <ItemPriceAdjustments>
                                     <Component>
                                         <Type>Principal</Type>
                                         <Amount currency="' . $currency . '">' . $this->formatAmount($item->getBaseRowTotal()) . '</Amount>
                                     </Component>
                                     <Component>
                                         <Type>Tax</Type>
                                         <Amount currency="' . $currency . '">' . $this->formatAmount($amazon_amounts['tax'] + $amazon_amounts['shipping_tax']) . '</Amount>
                                     </Component>' . '<Component>
                                         <Type>Shipping</Type>
                                         <Amount currency="' . $currency . '">' . $this->formatAmount($shipping) . '</Amount>
                                     </Component>' . '</ItemPriceAdjustments>';
         $_document .= '</AdjustedItem>
                     </OrderAdjustment>
                 </Message>';
         $_messageId++;
     }
     $_document .= '</AmazonEnvelope>';
     $this->_processMWSRequest($_document, "_POST_PAYMENT_ADJUSTMENT_DATA_");
     $comment = $payment->getOrder()->addStatusToHistory(Mage_Sales_Model_Order::STATE_PROCESSING, Mage::helper('amazonpayments')->__('Refund Reference ID:' . $this->_result . ' and Amazon order ID:' . $payment->getOrder()->getExtOrderId()))->save();
     return $this->_result;
 }