目前我们有一个Magento版本。 1.8.1.0已安装PayPal网站付款标准选项已启用。但是,当我想要在线退款时,它不显示“退款”按钮,而只显示“离线退款”。
实际上是否可以使用PayPal Standard创建在线退款?
答案 0 :(得分:1)
不可能使用Paypal标准,您必须重载paypal标准模型以实现forms.Form
方法,或者您可以安装模块。
答案 1 :(得分:0)
正如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.'));
}
}
}