3

クライアントサイトを1.3から1.7にアップグレードする前に行われた注文に対して、[払い戻し]ボタンが使用できない問題を調査しています。販売注文>請求書>クレジットメモからクレジットメモを作成しようとしています。

コードとデータを掘り下げてみる$this->getCardsStorage()と、アップグレード前に行われた注文の支払いのために保存されているクレジットカードが返されていないようです。実際、additional_informationsales_flat_order_paymentテーブルのフィールドは、これらの注文ではNULLです。このフィールドは1.4以降で作成されたと思います。

私には奇妙に思えるのは、1.4より前に作成された支払いデータには下位互換性がないということです。私はこの問題をかなり検索しましたが、私が見つけることができる最も近いものは、アップグレード後に人々が完全に払い戻しに問題を抱えているところです。私の場合はそうではありません。アップグレード後の注文については、払い戻しが正常に機能しているようです。

単に下位互換性がない場合は、少なくともバグレポートを確認することをお勧めします。

これをMagentoのバグトラッカーに投稿しました:バグ#28601

4

1 に答える 1

3

それは本当です、1.4のアップグレードでそれに問題があります。

1.4では、トランザクションが導入されadditional_information、フィールドが使用されました。以前は、と呼ばれる別のフィールドがありadditional_data、これもシリアル化されていましたが、1.4の前と後の支払いレコードを検索して、データ構造がどのように変更されるかを比較できます。また、データの違いがわかったら、古い値を移行するスクリプトを作成できます。

よろしくお願いいたします。Ivan

アップデート

次のコードを確認してください: 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. 2つのレコードを作成する場合last_trans_id !== cc_trans_id、最初のレコードはcc_trans_id認証トランザクションになり、2番目のレコードはキャプチャタイプの子トランザクションになります。

このような値でこの古い注文をエクスポートすると、管理者から古い注文を払い戻すことができます。

于 2013-01-11T01:20:45.433 に答える