8

人々が毎月支払うサブスクリプション サービスを利用しているので、定期的なプロファイルを使用して「仮想製品」をセットアップしました。同時に、さまざまな 1 回限りの製品を追加できるようにしたいと考えています。これを達成するために、さまざまなワンタイム製品をすべて含む「バンドル製品」を作成し、その「バンドル製品」に「仮想製品」を追加してみました。

しかし、チェックアウトに行くと、「名目上のアイテムはスタンドアロンでのみ購入できます。続行するには、見積もりから他の項目を削除してください。」人々がサービスに登録し、同時に製品を購入できるようにするにはどうすればよいですか?

注:マーチャント アカウントとして Paypal Website Payment Pro を使用しています。

4

2 に答える 2

3

Magento コードからのコメントは次のとおりです。

/** * 購入プロセスの一時的な回避策: 技術的には可能ですが、公称アイテムを複数購入したり、公称アイテムと非公称アイテムを組み合わせて購入することは危険です。* * 問題は、現在、ワンクリックで公称アイテムと注文を順次送信するように実装されていることです。* 購入のプロセスをフェールセーフにすることは論理的に不可能です。* 適切な解決策は、その都度顧客の確認を取りながらアイテムを 1 つずつ送信することです。*/

実際には、以下のコードを削除できます。

if ($item->isNominal() && $this->hasItems() || $this->hasNominalItems()) {
    Mage::throwException(Mage::helper('sales')->__('Nominal item can be purchased standalone only. To proceed please remove other items from the quote.'));
}

Magento は複数の名目上の製品を引き続き処理しますが、それを使用する場合は自己責任で行ってください。

于 2012-10-03T11:41:25.080 に答える
2

残念ながら、これは Mage_Paypal コードにハードコーディングされた制限です。

Mage_Sales_Model_Service_Quote::submitAll()次の内容を実行することがわかりsubmitNominalItems()ます。

    $this->_validate();
    $this->_submitRecurringPaymentProfiles();
    $this->_inactivateQuote();
    $this->_deleteNominalItems(); 

したがって、名目上のアイテムを送信した後、カートを強制終了します。その理由はよくわかりませんが、Paypal でサブスクリプションが作成される方法によるものだと思います。

に名義を含むカートに​​アイテムを追加できないようにするコードを次に示しますMage_Sales_Model_Quote::addItem()

    if ($item->isNominal() && $this->hasItems() || $this->hasNominalItems()) {
        Mage::throwException(Mage::helper('sales')->__('Nominal item can be purchased standalone only. To proceed please remove other items from the quote.'));
    }

現時点では、他の支払いプロバイダー向けに Magento の Recurring Profiles を使用する作業を行っています (バックグラウンド タスク: Paypal 以外の支払い方法を使用した Magento Recurring Profiles )。時間がかかりますが、かなり複雑になります。

これが大したことであれば、Mage_Paypal コードをリファクタリングしてこれを行うことができるはずですが、これは複雑な作業であり、1 回の投稿で実際に回答することはできません。

于 2011-06-20T01:39:39.370 に答える