Создайте заказ на вызов API


Я хочу создать заказ с помощью API в magento.

Я уже создал api следующим образом:
cart.create
cart_product.add
cart.totals

Таким образом, предложение генерируется в magento, когда клиент вызывает API с Android во время добавления товара в корзину. Теперь следующее, что нужно сделать, это создать порядок этой цитаты.

Описание Подробнее о запросе : мы размещаем заказ в magento следующим образом:

  1. Добавить товар в корзину
  2. Выберите способ доставки (но здесь не потому, что я использую низкодоступный продукт)
  3. Выберите способ оплаты
  4. Разместить заказ

Теперь посмотрите, как я выполняю описанные выше шаги между приложением Android и magento

  1. Клиент добавляет товар в корзину в приложении (на этот раз услуга вызывается в magento, и я добавляю товары в корзину методом "корзина.создать")
  2. Клиент выбирает способ оплаты Paypal. На этот раз ни одна услуга не вызывается, но так как у нас есть paypal sdk, клиент перенаправляется на paypal с приложение к шлюзу. там он заплатит сумму и вернется в приложение.
  3. Теперь, когда он возвращается к приложению, вызывается служба. И по этому звонку я должен создать заказ.

Может быть, это более легко понять мой запрос.

Здесь я в замешательстве, как создать заказ в Magento после успешного/отмененного ответа на транзакцию, отправленного из приложения в Magento.

Author: Krupali Mehta, 2015-07-15

2 answers

Не уверен, правильно ли я понял, но вы всегда должны создавать заказ до того, как перенаправлять его на PayPal. Затем, когда paypal уведомит вас о том, что платеж был произведен, статус заказа должен соответствующим образом измениться.

Вот как я бы создал заказ:

$quote = $this->getQuote();

try {
    $quotePayment = $quote->getPayment();

    $quotePayment->setMethod('payment_method_code');
    $quote->setPayment($quotePayment);

    $onePageCheckOut = \Mage::getSingleton('checkout/type_onepage');
    $onePageCheckOut->getCheckout()->setQuoteId($quote->getId());
    $onePageCheckOut->saveOrder();

    $this->redirectUrl = $onePageCheckOut->getCheckout()->getRedirectUrl();
    $quote->setIsActive(false)->save();
} catch (\Exception $e) {
    throw new \Exception(
        $e->getMessage(),
        'some error code'
    );
}

$order = \Mage::getModel('sales/order')->load($onePageCheckOut->getLastOrderId(), 'increment_id');
$order->save();

Затем вам нужно дождаться уведомления об оплате и обновить заказ:

//check how to get the params in your case
$paymentId = $this->param('payment_id');
$transactionId = $this->param('transaction_id');

if($order->getStatus() === \Mage_Sales_Model_Order::STATE_CANCELED) {
    //do something if order is cancelled
}

$payment = $order->getPayment();

$amountOrdered = $payment->getAmountOrdered();
$payment->setAmountPaid($amountOrdered);
$payment->setAmountAuthorized($amountOrdered);

/** Save a comment regarding the transaction */
$order->addStatusHistoryComment(
    sprintf(
        "Transaction status: %s / Paypal id: %s",
        strtoupper($this->paymentStatus),
        $paymentId
    )
);
$payment->save();
$order->save();
 0
Author: lloiacono, 2015-07-15 08:24:32

Я решил эту проблему, выполнив следующий код:

$proxy = new Zend_XmlRpc_Client('http://www.test.com/api/xmlrpc/');
$session = $proxy->call('login', array(apiuser, 'apipassword'));
$shoppingCartId = $proxy->call('call', array($session,'cart.create',array(1)));


$arrProducts = array(
array(
    "product_id" => 187,
    "quantity" => 1
     )
    );


$customer = array(
    'entity_id' => 26,
    'mode' => 'customer'
);

$resultCustomerSet = $proxy->call('call',array($session, 'cart_customer.set', array( $shoppingCartId, $customer, 1)) );

try
{
    $customer = Mage::getModel('customer/customer')->load(26); 
    $billingaddress = Mage::getModel('customer/address')->load($customer->getDefaultBilling());

       $arrAddresses = array(
            array(
                "mode" => "billing",
                "firstname" => $billingaddress->getFirstname(),
                "lastname" => $billingaddress->getLastname(),
                "street" => $billingaddress->getStreet(),
                "city" => $billingaddress->getCity(),
                "region" => $billingaddress->getRegionId(),
                "postcode" => $billingaddress->getPostcode(),
                "country_id" => $billingaddress->getCountryId(),
                "telephone" => $billingaddress->getTelephone(),
                "is_default_shipping" => 0,
                "is_default_billing" => 0
               )
        );


        $resultCustomerAddresses = $proxy->call('call',array($session, "cart_customer.addresses", array($shoppingCartId, $arrAddresses)));          
$resultCartProductAdd = $proxy->call('call',array($session,'cart_product.add',array($shoppingCartId,$arrProducts)));    

                $paymentMethod = array(
             "method" => "checkmo"

        );


        $shoppingCartTotals = $proxy->call('call',array($session, "cart.totals", array($shoppingCartId)));

        $resultPaymentMethod = $proxy->call('call',array($session, "cart_payment.method", array($shoppingCartId, $paymentMethod)));

        $resultOrderCreation = $proxy->call('call',array($session, "cart.order", array($shoppingCartId, null)));

}

Здесь я создал заказ, используя платежный способ проверки денежного перевода.

Теперь проблема в том, что когда я хочу создать заказ с помощью paypal_express, я передаю код метода "paypal_express", но в этот раз я получаю сообщение об ошибке, например: Способ оплаты не разрешен. Пожалуйста, помогите мне в этом.

 0
Author: Krupali Mehta, 2015-07-22 06:16:34