0

ローンを支払いシステムとして承認するゲートウェイ用の magento モジュールを作成しています。

顧客が拒否される可能性が比較的高いため、失敗した場合に顧客を簡単に返品できるように、getCheckoutRedirectURL() を使用してこれを実装することにしました (チェックアウト フローの「注文を行う」前にローン ステップを配置します)。支払い選択ページへ。

次に、コントローラーの redirectAction でゲートウェイ API 呼び出しを行います。

その結果、ライトボックスで開く URL を取得して、顧客にローン プロセスを案内し、ローン ゲートウェイからいくつかの ID を取得します。

これらの追加の ID を見積もりの​​一部として保存し、後で見積もりを注文に変換するときに注文にコピーしたいと思います (ローン ゲートウェイからのコールバックに基づいて、Google チェックアウトと同様の変換を行いました)。

ただし、見積もりの​​データを保持する方法がわかりません。

明らかな方法:

$quote->setCustId($custId);
$quote->save();

動作しません。追加のデータはデータベースに保存されないため、ポストバック ハンドラーで見積もりを注文に変換することはできません。

同じことが起こります

$quote->setData('custId', $custId);
$quote->save();

(そして、これは魔法のセッター/ゲッターを使用しないという意味で、最初のより明示的な形式であると思います)

setAdditionalData への参照を見たことがあります (たとえば、こちら) が、支払いオブジェクトでのみ利用できるように見えますが、これはまだ見積もっていないと思います (間違っている可能性はありますが?)

実際にデータベース フィールドを追加せずに、注文の一部のフィールドをデータベースに保存する方法はありますか?

4

1 に答える 1

0

sales_flat_quote追加の変数を quote オブジェクトに格納するには、実際の列をテーブルに追加する必要があります。

あなたが作っているものは代わりに支払い方法に関連しているので、シリアル化されたphp配列としてテーブルにadditional_information保存されているデータセットにこれらの変数を保存することをお勧めします。支払い方法は次のようにこの変数にデータを設定できます:sales_flat_quote_payment

$quote->getPayment()->getInfoInstance()->setAdditionalInformation($key, $value);
$order->getPayment()->getInfoInstance()->setAdditionalInformation($key, $value);

からもっと見るapp/code/core/Mage/Payment/Model/Info.php

これの唯一の欠点は、最後にシリアル化された配列として格納されることです。これは、何らかの方法でこのデータに依存したり、フィルターを提供したりする必要がある場合に、後で直接 SQL アクセスできないことを意味します。

于 2012-12-17T12:50:32.537 に答える