【问题标题】:How can I retrieve shopping cart contents, shipping details and ancillary fees (tax, discounts, etc) for my custom payment method?如何为我的自定义付款方式检索购物车内容、运输详细信息和辅助费用(税金、折扣等)?
【发布时间】:2012-11-24 10:02:06
【问题描述】:

我的任务是为 Magento CE 编写自定义付款方式,并在过去几周内对其进行了修改。虽然我是一位经验丰富的开发人员,但这是我第一次认真接触 php 和 Magento 本身。

请注意这是一个网络支付网关,所以我正在使用

public function getOrderPlaceRedirectUrl() { ... }

在我的付款方式模型中成功将客户重定向到外部 url。

让我卡了一整天的问题是如何检索结帐购物车内容、运输详细信息和辅助费用(税金、折扣等)。此信息需要发送到付款方式 API。

我在付款方式模型中使用的代码是这样的:

$order_id = Mage::getSingleton("checkout/session")->getLastRealOrderId();
$order = Mage::getModel('sales/order')->loadByIncrementId($order_id);
$oBillingAddress = $order->getBillingAddress(); //this works ok
$total = number_format($order->getBaseGrandTotal(), 2, '', ''); //this too

/* The following code won't work */

$oShippingAddress = $order->getShippingAddress(); // is unset!?
$oShippingAddress->getSameAsBilling(); //HOW can I check this?

$amount = array();
$quantity = array();
$sku = array();
$description = array();

$cart_items = $order()->getAllVisibleItems();
foreach ($cart_items as $item) {
   $amount[] = number_format($item->getPrice(), 2, '', ''); //ok
   $quantity[] = $item->getQtyToInvoice(); // is empty...
   $sku[] = $item->getSku(); // nothing either??
   $description[] = $item->getName(); //this is working
}

Magento 的巫师们,请告诉我在这里做错了什么?

Magento 开发一直非常令人沮丧,主要是因为它缺乏直截了当的文档。我敢肯定它是非常可定制的,什么不是,但是滥用 php 的魔法函数和它的繁琐结构一直是具有挑战性的——至少是这样。

【问题讨论】:

  • 看看@stackoverflow.com/questions/6058430/…excellencemagentoblog.com/… ...此外,您正在加载订单详细信息(Mage::getModel('sales/order')),该订单详细信息应在付款后创建成功了
  • 是的,我看过这些,但我看不到任何有关检索购物车内容的信息。但是,我承认我正在使用订单详细信息 - 您会推荐哪种方法?
  • 在您的第三方支付文件中,如何接受这些信息?如果你看看authorize(Varien_Object $payment, $amount) in stackoverflow.com/questions/6058430/…

标签: magento payment-gateway shopping-cart checkout magento-1.7


【解决方案1】:

我认为你需要得到报价。这样的事情应该可以工作:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$items = $quote->getAllVisibleItems();

foreach ($items as $item) {
    $amount[] = number_format($item->getPrice(), 2, '', ''); //ok
    $quantity[] = $item->getQtyToInvoice(); // is empty...
    $sku[] = $item->getSku(); // nothing either??
    $description[] = $item->getName(); //this is working

}

如果您仍然需要订单,请告诉我..

【讨论】:

  • 不行,还是不行。项目集合在结帐时返回为空,并且它也丢失了帐单详细信息。只是为了澄清,getOrderPlaceRedirectUrl 返回我的控制器的 url - 然后收集购物车信息并将它们卷曲到外部网站。
  • 您好抱歉,很久没有检查stackoverflow了。这是因为外部站点正在呼叫您,所以基本上您没有会话。通常,支付网关会发布您发回给您的 orderId。所以 $orderId = $this->getRequest()->getParam('order_id); $order = Mage::getModel('sales/order')->load($orderId); $order->getAllItems(); -------------------- 如果这仍然是一个问题,请告诉我,我可以给您发送一些正确的代码。
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 2012-04-20
  • 2014-03-28
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2015-06-01
相关资源
最近更新 更多