【问题标题】:Magento - Online refund with PayPalMagento - 使用 PayPal 在线退款
【发布时间】:2015-08-03 04:54:53
【问题描述】:

目前我们有一个 Magento 版本。 1.8.1.0 已启用已安装的 PayPal 网站支付标准选项。但是,当我想进行在线退款时,它不会显示“退款”按钮,而只会显示“离线退款”。

真的可以使用 PayPal Standard 创建在线退款吗?

【问题讨论】:

    标签: magento magento-1.8


    【解决方案1】:

    正如 luigifab 所说,该功能不是 Paypal 模块的一部分 - 我已经为它实现了一个小插件,可以在这里看到:

    https://gist.github.com/bubach/ed86611c634b401e5d66392cf32c2f6e

    最重要的部分是这个类:

    <?php
    class Namespace_Modulename_Model_Paypal extends Mage_Paypal_Model_Standard
    {
    
        protected $_canRefund               = true;
        protected $_canRefundInvoicePartial = true;
        protected $_canVoid                 = true;
    
        /**
         * https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/RefundTransaction_API_Operation_NVP/
         */
        public function tryRefund(Varien_Object $payment, $amount)
        {
            $transactionId = $payment->getLastTransId();
    
            if ($transactionId) {
                $order          = $payment->getOrder();
                $storeId        = $order->getStoreId();
                $refundType     = "Partial";
                $invoiceFee = $payment->getMethodInstance()->getInfoInstance()->getAdditionalInformation('invoice_fee');
                $remaining  = $order->getTotalInvoiced() - ($order->getTotalOfflineRefunded() + $order->getTotalOnlineRefunded()) - $invoiceFee;
    
                if (abs($remaining - $amount) < 0.00001) {
                    $refundType = "Full";
                }
    
                $currencyCode   = $order->getBaseCurrencyCode();
                $invoiceId      = $order->getIncrementId();
    
                $params = array(
                    "METHOD"        => "RefundTransaction",
                    "VERSION"       => "72.0",
                    "TRANSACTIONID" => $transactionId,
                    "INVOICEID"     => $invoiceId,
                    "REFUNDTYPE"    => $refundType,
                    "AMT"           => $amount,
                    "CURRENCYCODE"  => $currencyCode,
                    "USER"          => Mage::getStoreConfig('paypal/wpp/api_username', $storeId),
                    "PWD"           => Mage::getStoreConfig('paypal/wpp/api_password', $storeId),
                    "SIGNATURE"     => Mage::getStoreConfig('paypal/wpp/api_signature', $storeId)
                );
    
                $ch = curl_init();
    
                curl_setopt($ch, CURLOPT_URL, "https://api-3t.paypal.com/nvp");
                curl_setopt($ch, CURLOPT_HEADER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_POSTFIELDS,  http_build_query($params));
    
                $response = curl_exec($ch);
    
                if (curl_errno($ch)) {
                    curl_close($ch);
                    throw new Mage_Core_Exception('Impossible to issue a refund transaction because of cURL error.');
                } else  {
                    curl_close($ch);
    
                    $responseArray = array();
                    parse_str($response, $responseArray); // Break the NVP string to an array
    
                    if ($responseArray['ACK'] == "Success") {
                        return array(0, "Paypal refunded successfully");
                    } else {
                        return array(-1, "Paypal refund failed!");
                    }
                }
            } else {
                Mage::throwException(Mage::helper('paypal')->__('Impossible to issue a refund transaction because the capture transaction does not exist.'));
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      Paypal标准不可能,你必须重载paypal标准模型来实现refund方法,或者你可以安装一个模块。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2017-07-24
      • 2016-01-18
      • 2015-12-23
      • 1970-01-01
      相关资源
      最近更新 更多