カスタムの見積もりを注文に変換-「支払い方法インスタンスを取得できません」


10

私は機会に注文が出された場合、認証が顧客カードの支払いのために作られて、見ている顧客は注文確認メールを受け取りますが- 何のために存在していないのMagentoの中sales_flat_orderかをsales_flat_order_grid

ここで選択する武器は、ゲートウェイでの支払いを無効にするよう管理者に要求し、顧客に再配置を依頼することです。

ただし、すべての見積もり、見積もりアイテム、見積もり支払い、見積もりアドレスがあります。理論的には、この注文は有効です。結局のところ、私たちには承認があり、顧客は注文メールを持っています。エラーは、ロールバック(現在の動作理論)を引き起こす注文メールの生成後に発生しました。

サンドボックスゲートウェイを使用してこの見積もりを変換するためのテスト用の1回限りのスクリプトを作成しました。しかし、支払いの生成に問題があります。私が使用しようとしたcheckmofreeauthorizenet、すべて同じ例外を返します。

PHP Fatal error:  Uncaught exception 'Mage_Core_Exception' with message 'Cannot retrieve payment method instance.' in /var/www/vhosts/magento/app/Mage.php:563
Stack trace:
#0 /var/www/vhosts/magento/app/code/core/Mage/Payment/Model/Info.php(83): Mage::throwException('Cannot retrieve...')

以下の私のコードを参照してください。フィードバックを歓迎します。

<?php
//.... stuff

$quote = Mage::getModel('sales/quote')->load(745);

$convert = Mage::getModel('sales/convert_quote');

$order = $convert->toOrder($quote);
$order->addressToOrder($quote->getAddress(),$order);

foreach($quote->getAllItems() as $item){
    $orderItem = $convert->itemToOrderItem($item);
    if ($item->getParentItem()) {
       $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId()));
    }
    $order->addItem($orderItem);
}

$data = array(
        'method' => 'authorizenet',
        'cc_type' => 'VI',
        'cc_number' => '4111111111111111',
        'cc_exp_month' => '1',
        'cc_exp_year' => (date('Y') + 6),
        'cc_cid' => '444'
);

$quote->getShippingAddress()->setPaymentMethod('authorizenet');
$quote->getShippingAddress()->setCollectShippingRates(true);

$payment = $quote->getPayment();
$payment->importData($data);
$quote->save();

$payment = $convert->paymentToOrderPayment($quote->getPayment());

$order->setPayment($quote->getPayment());

$message = '[Notice] - Order converted from quote manually';
$order->addStatusToHistory($order->getStatus(), $message);
$order->place();
$order->save();

$quote->setIsActive(false)->save();

回答:


7

注文を送信しています

 $quote->getPayment()

コードは次のようになります

...

$payment = $convert->paymentToOrderPayment($quote->getPayment());

$order->setPayment($payment);

...

あなたは正しいです-それはそれでした。よかった。
philwinkle

PHP Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'The requested Payment Method is not available.' in /var/www/html/app/Mage.php:594支払い方法を購入注文として有効にしていて、支払い方法なしでゼロのコストで新しい注文を作成したいというエラーが発生します。
Rahul、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.