如何强制Authorize.net Directpost reply_url为HTTPS?

时间:2013-09-11 23:03:59

标签: magento authorize.net dpm

我正在尝试在Magento 1.11.1生产站点上启用Authorize.net DPM(直接发布方法)。我的测试站点(也是Magento 1.11.1.0)工作正常,因为该站点不安全(前端SSL),但实时站点出错。结果发送给Authorize.net的回复_url(x_reply_url)作为非ssl发送(例如http://mysite.com/authorizenet/directpost_payment/response作为POST)。但是,这会导致500错误,因为Magento设置为在前端需要SSL。如果我使用(https://mysite.com/authorizenet/directpost_payment/response作为POST)发送测试帖,则会收到200响应。我正在通过在DPM支付方法中启用Debug然后查看文件var / log / payment_authorizenet_directpost.log来查看此内容。

所以我正在查看app / code / core / Mage / Authorizenet中的所有代码,并且尚未提取可能获得此非ssl URL的代码段。当然,然后回答“为什么不提取安全URL?”的问题。

看起来它可能起源于controllers / Directpost / PaymentController.php的placeAction方法。

我希望我可以在这里获得一些明智的见解,看看我是否在正确的轨道上以及如何最好地记录或var_dump适当的变量(在我的测试网站上)来验证任何变化。

1 个答案:

答案 0 :(得分:2)

解决。这似乎是authorize.net directpost方法的代码中的错误。

修改过的文件:app / code / core / Mage / Authorizenet / Model / Directpost.php

方法:getRelayUrl

旧代码:

return Mage::app()->getStore($storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'authorizenet/directpost_payment/response';

新代码:

if(Mage::app()->getStore($storeId)->isCurrentlySecure()) {
  return rtrim(Mage::getUrl('authorizenet/directpost', array('_secure' => true)),"/") .     '_payment/response';
} else {
  return Mage::app()->getStore($storeId)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'authorizenet/directpost_payment/response';
}

这是在Magento Pro 1.11.1.0中(与Magento EE 1.11.1.0相同的代码)。我还没有获得任何较新版本的Magento EE的访问权限,以确定是否已在1.12或更高版本中解决此问题。