我正在尝试在Magento 1.11.1生产站点上启用 Authorize.net DPM(直接发布方法)。我的测试站点(也是Magento 1.11.1.0)工作正常,因为该站点不安全(前端SSL),但实时站点出现错误。事实证明,发送到 Authorize.net (x_reply_url) 的reply_url是作为非 SSL 发送的(例如,http://mysite.com/authorizenet/directpost_payment/response 作为 POST 发送的)。但是,这会收到500错误,因为Magento设置为在前端要求SSL。如果我使用(https://mysite.com/authorizenet/directpost_payment/response 作为 POST 发送测试帖子),它会得到 200 响应。我正在通过打开 DPM 付款方式中的调试,然后查看文件 var/log/payment_authorizenet_directpost.log 来查看这一点。
所以我正在查看应用程序/代码/核心/Mage/Authorizenet 中的所有代码,并且尚未提取可能获得此非 ssl URL 的代码部分。当然,然后回答"为什么它不拉取安全 URL 的问题?
看起来它可能起源于 placeAction 方法 of controllers/Directpost/PaymentController.php。
我希望我能在这里获得一些明智的见解,了解我是否在正确的轨道上,以及如何最好地记录或var_dump适当的变量(在我的测试站点上)以验证任何更改。
已解决。这似乎是 authorize.net directpost 方法代码中的一个错误。
修改文件:app/code/core/Mage/Authorizenet/Model/Directpost.php
方法:获取中继网址
旧代码:
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或更高版本中解决此问题。