什么可能导致 Magento 在 Paypal 重定向时将新地址更改回默认地址?

Posted

技术标签:

【中文标题】什么可能导致 Magento 在 Paypal 重定向时将新地址更改回默认地址?【英文标题】:What could cause Magento to change new address back to default address on Paypal redirect? 【发布时间】:2013-08-06 11:01:51 【问题描述】:

我在使用 Paypal Express 的 Onepage 结账时遇到了一个奇怪的错误。

登录的客户“即时”输入新的账单地址,设置“保存在地址簿”和“运送到该地址”,然后继续结帐。

此时地址已正确保存在数据库中。

客户选择 Paypal,Magento 执行其逻辑(收集总计、保存报价 - 两次和数据检查等)。

我已经使用 Xdebug 逐步完成了逻辑,但在 afterSave() 的第 318 行的 /app/code/core/Mage/Sales/Model/Quote.php 中重定向到 Paypal 之前,我无法准确定位回调,有一行

if (null !== $this->_addresses) 
    $this->getAddressesCollection()->save();

在 $this->getAddressesCollection() 中,账单地址和送货地址是错误的,它们都是客户的默认值。但是,数据库仍然是正确的。

一旦 ->save() 触发,正确的将被覆盖。

这肯定是 Magento 错误,但我需要找到解决方案。这是 EE 1.11.1.0。

以前有人经历过吗?

谢谢

【问题讨论】:

您找到造成这种情况的原因了吗?我刚刚遇到了完全相同的问题。 【参考方案1】:

我有一个类似的错误,也许它和你一样。如果您在地址簿中选择一个地址作为您的默认地址,它会搞砸一页结帐。

假设我的通讯录中有 3 个人:John、Suzy 和 Bill。

有一天,我碰巧在我的通讯录中,我选择 John 作为我的默认帐单和送货地址。然后我去我的购物车,订购一些物品,选择约翰作为账单,然后选择运送到不同的地址。在下一步中,我选择 Suzy 作为我的地址。我单击下一步转到运输方式步骤,但是哇,等等! Suzy 的地址已被覆盖并替换为 Johns 地址。

与此处发布的完全相同的问题(虽然我认为这家伙不明白发生了什么,但截图是相同的结果):http://www.magentocommerce.com/boards/viewthread/7520/P0/

问题出在 opcheckout.js 文件中。我有一个修复。基本上,一旦选择了默认地址,添加新地址表单(隐藏表单)就会始终填充您的默认地址。

通常情况下,如果没有在地址簿中选择默认地址,我相信 opcheckout.js 会使用您在选择框中选择的地址正确填写隐藏字段。

以下修改后的 opcheckout.js 脚本:(http://pastebin.com/chiwyRJZ)将修复它,以便隐藏字段正确填充正确的数据。据我了解,这是一个未修复的旧错误,可能来自 Magento 在单页结帐中添加“添加新地址”表单的任何版本

要应用修复,请从粘贴箱复制代码并将其替换为主题 opcheckout.js 中的代码

通常 opcheckout.js 位于 skin\frontend\default\yourtheme\js

\skin\frontend\base\default\js

【讨论】:

【参考方案2】:

我知道现在发布这个为时已晚,但我在 Magento 1.9.x 上遇到了这个问题。不仅在贝宝上,而且在所有其他付款方式上。

在创建新报价时检查这个方法:

public function assignCustomerWithAddressChange

【讨论】:

以上是关于什么可能导致 Magento 在 Paypal 重定向时将新地址更改回默认地址?的主要内容,如果未能解决你的问题,请参考以下文章

Magento:支付完成后,paypal 标准支付未重定向到 Magento 成功页面

Magento 使用 PayPal 处理信用卡而不重定向到 PayPal

使用带有 paypal 支付专业版的信用卡时,Magento 不会重定向,但 express 选项重定向很好

Magento Paypal 下订单但重定向不正确

Magento 1.9.1 PayPal Express 评论页面为空

Magento - 自动重定向到配置的支付网关之一