使用信用卡付款而不是保存订单的magento自动订单创建

时间:2012-11-01 12:45:03

标签: php zend-framework magento magento-1.6

我创建了一个Magento自动创建订单脚本,当我将付款方式设置为采购订单时,它工作正常,当我尝试使用信用卡时,它不会创建订单。

我使用cc信息如下,但现在可以使用

 $orderPayment = Mage::getModel('sales/order_payment')
      ->setStoreId($storeId)
      ->setCustomerPaymentId(0)
      ->setMethod('ccsave')
      ->setCcNumber('6011111111111117')
      ->setCcOwner('ooooo')
      ->setCcType('Discover')
      ->setCcExpMonth('9')
      ->setCcExpYear('2014')
      ->setCcLast4(substr('6011111111111117',-4));

当我使用下面的采购订单时,它可以工作

 $orderPayment = Mage::getModel('sales/order_payment')
          ->setStoreId($storeId)
          ->setCustomerPaymentId(0)
          ->setMethod('purchaseorder')
          ->setPo_number(' - ');

我试了很多可以请任何人帮助我,这是我的完整代码

<?php
    //run the reminders

    require_once '../app/Mage.php';
    $app = Mage::app();


    }
    //$products = array('35' => array('qty' => 1));
    $products;
    $order = Mage::getModel('sales/order')->load(50);
    $items = $order->getAllItems();
    $itemcount=count($items);
    foreach ($items as $itemId => $item)
    {
        //echo $item->getName().'<br/>';
       // echo $item->getPrice();
       // echo $item->getSku();
       $idx=$item->getProductId();
        $products[$idx]=array('qty'=>$item->getQtyToInvoice());
       // $products[]= $item->getQtyToInvoice().'<br/>';
    }
    //Mage::getSingleton('customer/session')->logout();

    print_r($products);

    //}      




      $customer = Mage::getModel('customer/customer')->load(16);
      /*$customerId is the id of the customer who is placing the order, it can be passed as an argument to the function place()*/

      $transaction = Mage::getModel('core/resource_transaction');
      $storeId = $customer->getStoreId();
      $reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);

      $order = Mage::getModel('sales/order')
      ->setIncrementId($reservedOrderId)
      ->setStoreId($storeId)
      ->setQuoteId(0)
      ->setGlobal_currency_code('GBP')
      ->setBase_currency_code('GBP')
      ->setStore_currency_code('GBP')
      ->setOrder_currency_code('GBP');

      // set Customer data
      $order->setCustomer_email($customer->getEmail())
      ->setCustomerFirstname($customer->getFirstname())
      ->setCustomerLastname($customer->getLastname())
      ->setCustomerGroupId($customer->getGroupId())
      ->setCustomer_is_guest(0)
      ->setCustomer($customer);

      // set Billing Address
      $billing = $customer->getDefaultBillingAddress();
      $billingAddress = Mage::getModel('sales/order_address')
      ->setStoreId($storeId)
      ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
      ->setCustomerId($customer->getId())
      ->setCustomerAddressId($customer->getDefaultBilling())
      ->setCustomer_address_id($billing->getEntityId())
      ->setPrefix($billing->getPrefix())
      ->setFirstname($billing->getFirstname())
      ->setMiddlename($billing->getMiddlename())
      ->setLastname($billing->getLastname())
      ->setSuffix($billing->getSuffix())
      ->setCompany($billing->getCompany())
      ->setStreet($billing->getStreet())
      ->setCity($billing->getCity())
      ->setCountry_id($billing->getCountryId())
      ->setRegion($billing->getRegion())
      ->setRegion_id($billing->getRegionId())
      ->setPostcode($billing->getPostcode())
      ->setTelephone($billing->getTelephone())
      ->setFax($billing->getFax());
      $order->setBillingAddress($billingAddress);

      $shipping = $customer->getDefaultShippingAddress();
      $shippingAddress = Mage::getModel('sales/order_address')
      ->setStoreId($storeId)
      ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
      ->setCustomerId($customer->getId())
      ->setCustomerAddressId($customer->getDefaultShipping())
      ->setCustomer_address_id($shipping->getEntityId())
      ->setPrefix($shipping->getPrefix())
      ->setFirstname($shipping->getFirstname())
      ->setMiddlename($shipping->getMiddlename())
      ->setLastname($shipping->getLastname())
      ->setSuffix($shipping->getSuffix())
      ->setCompany($shipping->getCompany())
      ->setStreet($shipping->getStreet())
      ->setCity($shipping->getCity())
      ->setCountry_id($shipping->getCountryId())
      ->setRegion($shipping->getRegion())
      ->setRegion_id($shipping->getRegionId())
      ->setPostcode($shipping->getPostcode())
      ->setTelephone($shipping->getTelephone())
      ->setFax($shipping->getFax());

      $order->setShippingAddress($shippingAddress)
      ->setShipping_method('flatrate_flatrate')
      ->setShippingDescription('flatrate');

      $orderPayment = Mage::getModel('sales/order_payment')
      ->setStoreId($storeId)
      ->setCustomerPaymentId(0)
      ->setMethod('ccsave')
      ->setCcNumber('6011111111111117')
      ->setCcOwner('ooooo')
      ->setCcType('Discover')
      ->setCcExpMonth('9')
      ->setCcExpYear('2014')
      ->setCcLast4(substr('6011111111111117',-4));


      /*
      ->setPo_number(' - ');


      ->setCustomerPaymentId(3)
      ->setMethod('ccsave')
      ->setCcNumber('6011111111111117')
      ->setCcOwner('ooooo')
      ->setCcType('Discover')
      ->setCcExpMonth('9');
      ->setCcExpYear('2014');
      ->setCcLast4(substr('6011111111111117',-4));
      */
      $order->setPayment($orderPayment);
    //,'36'=>array('qty' => 1)
      // let say, we have 2 products
      $subTotal = 0;
     // $products = array('35' => array('qty' => 1));
      foreach ($products as $productId=>$product) {
      echo $product['qty'];
      $_product = Mage::getModel('catalog/product')->load($productId);
      $rowTotal = $_product->getPrice() * $product['qty'];
      $orderItem = Mage::getModel('sales/order_item')
      ->setStoreId($storeId)
      ->setQuoteItemId(0)
      ->setQuoteParentItemId(NULL)
      ->setProductId($productId)
      ->setProductType($_product->getTypeId())
      ->setQtyBackordered(NULL)
      ->setTotalQtyOrdered($product['rqty'])
      ->setQtyOrdered($product['qty'])
      ->setName($_product->getName())
      ->setSku($_product->getSku())
      ->setPrice($_product->getPrice())
      ->setBasePrice($_product->getPrice())
      ->setOriginalPrice($_product->getPrice())
      ->setRowTotal($rowTotal)
      ->setBaseRowTotal($rowTotal);

       $subTotal += $rowTotal;
      $order->addItem($orderItem);
      }
    echo $subTotal;
      $order->setSubtotal($subTotal)
      ->setBaseSubtotal($subTotal)
      ->setGrandTotal($subTotal)
      ->setBaseGrandTotal($subTotal);

      $transaction->addObject($order);
      $transaction->addCommitCallback(array($order, 'place'));
      $transaction->addCommitCallback(array($order, 'save'));
      $transaction->save(); 

      $order->sendNewOrderEmail();
    ?>

2 个答案:

答案 0 :(得分:0)

当我使用信用卡(已保存)以编程方式创建订单时,这是我的订单付款代码:

$orderPayment = Mage::getModel('sales/order_payment')
->setStoreId($store_id)
->setCustomerPaymentId(0)
->setMethod($method)
->setCcNumber($cc_number)
->setCcNumberEnc(Mage::getSingleton('payment/info')->encrypt($cc_number)
->setCcOwner($cc_owner)
->setCcType($cc_type)
->setCcExpMonth($cc_exp_month)
->setCcExpYear($cc_exp_year)
->setCcLast4(substr($cc_number,-4));

答案 1 :(得分:0)

您正在以错误的方式使用 - &gt; setCcType(&#39; Discover&#39;)。您必须在此处指定cc类型的代码。 例如,如果是Visa,您应该使用

  

- &GT; setCcType(&#39; VI&#39)