Создайте заказ на вызов API
Я хочу создать заказ с помощью API в magento.
Я уже создал api следующим образом:cart.create
cart_product.add
cart.totals
Таким образом, предложение генерируется в magento, когда клиент вызывает API с Android во время добавления товара в корзину. Теперь следующее, что нужно сделать, это создать порядок этой цитаты.
Описание Подробнее о запросе : мы размещаем заказ в magento следующим образом:
- Добавить товар в корзину
- Выберите способ доставки (но здесь не потому, что я использую низкодоступный продукт)
- Выберите способ оплаты
- Разместить заказ
Теперь посмотрите, как я выполняю описанные выше шаги между приложением Android и magento
- Клиент добавляет товар в корзину в приложении (на этот раз услуга вызывается в magento, и я добавляю товары в корзину методом "корзина.создать")
- Клиент выбирает способ оплаты Paypal. На этот раз ни одна услуга не вызывается, но так как у нас есть paypal sdk, клиент перенаправляется на paypal с приложение к шлюзу. там он заплатит сумму и вернется в приложение.
- Теперь, когда он возвращается к приложению, вызывается служба. И по этому звонку я должен создать заказ.
Может быть, это более легко понять мой запрос.
Здесь я в замешательстве, как создать заказ в Magento после успешного/отмененного ответа на транзакцию, отправленного из приложения в Magento.
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();
Я решил эту проблему, выполнив следующий код:
$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", но в этот раз я получаю сообщение об ошибке, например: Способ оплаты не разрешен. Пожалуйста, помогите мне в этом.