3

我正在调查一个问题,即在将客户端站点从 1.3 升级到 1.7 之前下的订单无法使用“退款”按钮。我正在尝试从销售订单 > 发票 > 贷项通知单创建贷项通知单。

深入研究代码和数据,似乎$this->getCardsStorage()没有返回任何存储的信用卡以用于升级之前的订单付款。事实上,additional_information对于这些订单,sales_flat_order_payment 表中的字段为 NULL - 我相信该字段是在 1.4 或更高版本中创建的。

对我来说奇怪的是,对于 1.4 之前创建的支付数据将没有向后兼容性。我已经对这个问题进行了相当多的搜索,我能找到的最接近的事情是人们在升级后完全遇到退款问题。对我来说不是这种情况 - 升级后订单的退款似乎效果很好。

如果是根本不存在向后兼容性的情况,那么至少看到一个关于它的错误报告会很好。

我将此发布到 magento 错误跟踪器:错误 #28601

4

1 回答 1

3

确实,1.4升级有问题。

1.4中引入了transactions和used additional_informationfield,之前有不同的field,称为additional_data,也被序列化了,但是方式不同,可以在1.4之前和1.4之后查找支付记录,比较数据结构是如何变化的。当您看到数据的差异时,您可以创建一个脚本来迁移旧值。

真诚的,伊万

更新

检查以下代码: https ://github.com/LokeyCoding/magento-mirror/blob/magento-1.3/app/code/core/Mage/Paygate/Model/Authorizenet.php

在授权过程中,事务 id 存储在两个属性中:cc_trans_id 和 last_trans_id。当客户执行捕获时,只有 last_trans_id 得到更新。

在 1.3 方法中 getRefundTransactionId() 返回 last_trans_id 值。

在 1.7 中,相同的方法如下所示: https ://github.com/LokeyCoding/magento-mirror/blob/magento-1.7/app/code/core/Mage/Paygate/Model/Authorizenet.php

所以你看到它被完全重写了!

为了使您的 1.7 代码适用于 1.3 事务,您需要对旧事务执行以下操作:

  1. 如果last_trans_id == cc_trans_id订单有发票,则只在 order_payment_transaction 表中创建捕获交易记录。
  2. 如果last_trans_id == cc_trans_id订单没有发票,创建授权交易记录
  3. 如果last_trans_id !== cc_trans_id创建 2 个记录,第一个cc_trans_id是 auth 事务,第二个是捕获类型的子事务。

当您导出具有此类值的旧订单时,您将能够从管理员处退还旧订单。

于 2013-01-11T01:20:45.433 回答