Magento:以编程方式创建捆绑订单

时间:2013-03-06 17:41:56

标签: php magento

我有这段代码:http://pastebin.com/iFwyKM7G

在客户注册后执行的事件观察者类中。它自动创建订单,适用于简单的产品。但是,我无法弄清楚如何使它与Bundled产品一起使用!

如何使用捆绑产品实现此功能?

1 个答案:

答案 0 :(得分:1)

我知道了!

我将代码更改为以下内容:

$customer = Mage::getSingleton('customer/customer')->load($observer->getCustomer()->getId());
        $session = Mage::getSingleton('adminhtml/session_quote');
        $order_create_model = Mage::getSingleton('adminhtml/sales_order_create');
        Mage::log($customer->debug(), null, 'toszodj_meg.log');
        //$transaction = Mage::getModel('core/resource_transaction');
        $storeId = $customer->getStoreId();
        Mage::log($customer->getDefaultBillingAddress()->debug(), null, 'toszodj_meg.log');
        $reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
        $session->setCustomerId((int) $customer->getId());
        $session->setStoreId((int) $storeId);
        $orderData = array(
        'session'       => array(
            'customer_id'   => $customer->getId(),
            'store_id'      => $storeId,
        ),
        'payment'       => array(
            'method'    => 'banktransfer',
            'po_number' => (string) '-',
        ),
        // 123456 denotes the product's ID value
        'add_products'  =>array(
            '2'    => array(
                    'qty' => 1,
                    'bundle_option' => array(
                        2 => 2,
                        1 => 1,
                    ),
                    'bundle_option_qty' => array(
                        2 => 1,
                        1 => 1,
                        ),
                    ),
                ),
        'order'         => array(
            'currency'  => 'EUR',
            'account'   => array(
                'group_id'  => $customer->getGroupId(),
                'email'     => (string) $customer->getEmail(),
            ),
            'comment'           => array('customer_note' => 'API ORDER'),
            'send_confirmation' => 1,
            'shipping_method'   => 'flatrate_flatrate',
            'billing_address'   => array(
                'customer_address_id' => $customer->getDefaultBillingAddress()->getEntityId(),
                'prefix'             => $customer->getDefaultBillingAddress()->getPrefix(),
                'firstname'           => $customer->getDefaultBillingAddress()->getFirstname(),
                'middlename'          => $customer->getDefaultBillingAddress()->getMiddlename(),
                'lastname'            => $customer->getDefaultBillingAddress()->getLastname(),
                'suffix'             => $customer->getDefaultBillingAddress()->getSuffix(),
                'company'              => $customer->getDefaultBillingAddress()->getCompany(),
                'street'               => $customer->getDefaultBillingAddress()->getStreet(),
                'city'                   => $customer->getDefaultBillingAddress()->getCity(),
                'country_id'           => $customer->getDefaultBillingAddress()->getCountryId(),
                'region'               => $customer->getDefaultBillingAddress()->getRegion(),
                'region_id'           => $customer->getDefaultBillingAddress()->getRegionId(),
                'postcode'               => $customer->getDefaultBillingAddress()->getPostcode(),
                'telephone'           => $customer->getDefaultBillingAddress()->getTelephone(),
                'fax'                   => $customer->getDefaultBillingAddress()->getFax(),
            ),
            'shipping_address'  => array(
                'customer_address_id' => $customer->getDefaultShippingAddress()->getEntityId(),
                'prefix'               => $customer->getDefaultShippingAddress()->getPrefix(),
                'firstname'           => $customer->getDefaultShippingAddress()->getFirstname(),
                'middlename'           => $customer->getDefaultShippingAddress()->getMiddlename(),
                'lastname'               => $customer->getDefaultShippingAddress()->getLastname(),
                'suffix'               => $customer->getDefaultShippingAddress()->getSuffix(),
                'company'               => $customer->getDefaultShippingAddress()->getCompany(),
                'street'               => $customer->getDefaultShippingAddress()->getStreet(),
                'city'                   => $customer->getDefaultShippingAddress()->getCity(),
                'country_id'           => $customer->getDefaultShippingAddress()->getCountryId(),
                'region'               => $customer->getDefaultShippingAddress()->getRegion(),
                'region_id'           => $customer->getDefaultShippingAddress()->getRegionId(),
                'postcode'               => $customer->getDefaultShippingAddress()->getPostcode(),
                'telephone'           => $customer->getDefaultShippingAddress()->getTelephone(),
                'fax'                   => $customer->getDefaultShippingAddress()->getFax(),
            ),
        ),
    );
    $order_create_model->importPostData($orderData['order']);
    $order_create_model->getBillingAddress();
    $order_create_model->setShippingAsBilling(true);
    $order_create_model->addProducts($orderData['add_products']);
    $order_create_model->collectShippingRates();
    $order_create_model->getQuote()->getPayment()->addData($orderData['payment']);
    $order_create_model
             ->initRuleData()
             ->saveQuote();
    $order_create_model->getQuote()->getPayment()->addData($orderData['payment']);
    $order_create_model->setPaymentData($orderData['payment']);
    $order_create_model
                         ->importPostData($orderData['order'])
                         ->createOrder();
    $session->clear();
    Mage::unregister('rule_data');
    Mage::log('Order Successfull', null, 'siker_bammer.log');

它有效!以为客户没有得到通知。我现在想弄清楚。