2012-02-28 24 views
7

Birden fazla gönderi adresi için bir siparişin bölünmesine izin vermenin bir yolunu bulmaya çalışıyorum, ancak ücreti müşteriye bir kerelik ödeme olarak tutmak Her gönderi için ayrı ayrı ücret almak zorunda. Bunu yapmanın bir yolu var mı? Şu anda, müşteriler siparişlerin çoğunu daha küçük olanlara böldüklerinden, müşterilere "çoklu siparişler" e karşılık gelen bir çok kez ödeme yapılmaktadır. Bu, kredi kartı şirketi tarafındaki bir sorundur çünkü kartta ardı ardına çok fazla ücret alınmasından şüpheleniyorlar. Herhangi bir fikrin var mı?magento - birden çok adrese gönderim, ancak ödemeyi tek bir ücretle bekletme

+1

Bir çözüm buldunuz mu? –

cevap

1

Bu seçenek etkin olduğundan emin olun:

enter image description here

yanılmıyorsam, müşterinin kendisine gösterilen olmaz birden adresleri seçeneğine bir sayfa çıkış düğmesine, gemiyi tıkladığında. Ama eğer ana ödeme düğmesine tıklarsa yapardı.

+1

, müşterinin birden fazla adresle ödeme yapabilmesini istiyorum. Soru, magento'nun ödeme işlemini nasıl gerçekleştirdiği ile ilgilidir - malların ne kadarının gönderileceğine göre, esasen ne yaptığı, siparişi bir dizi siparişe ayırır. Bu siparişlerin her biri ayrı ayrı faturalandırılır. Müşterinin, yaptığı sipariş için birden fazla adrese gönderdiği kredi kartından sadece bir ödeme almasını istiyorum. – helefa

+0

Aynı şekilde @helefa herhangi bir tavsiye ister misiniz? –

+0

soruya cevap vermiyor –

3

Dürüst olmak gerekirse, tam bir çözüm sunamayacağım, çözüm biraz zaman alır ve test eder, ancak doğru yöne yönlendirebilecek kapsamlı bilgiler vereceğim yerine.

Temel olarak, öntanımlı olarak - varsayılan Magento'da bunu yapmak için bir seçenek yoktur.

Bunun yerine, Mage_Checkout_Model_Type_Multishipping adlı belirli bir modeli yeniden yazacağız. Bir modeli yeniden yazmanın uygun yoluna giriyorsanız, lütfen this post by Inchoo'u okuyun.

Ama tembel ve yeniden hızlı bir şekilde bakarak eğer yukarıdaki iki ya bitirdikten sonra, ardından app/code/local/Mage/Checkout/Model/Type/Multishipping.php

için dosyanın tamamını app/code/core/Mage/Checkout/Model/Type/Multishipping.php kopyalamak lütfen, bir şeyler yeniden geçebiliriz Bu sınıfa ihtiyacımız var. line 498 etrafında fonksiyonunu kontrol edin:

public function createOrders() 
{ 
    $orderIds = array(); 
    $this->_validate(); 
    $shippingAddresses = $this->getQuote()->getAllShippingAddresses(); 
    $orders = array(); 

    if ($this->getQuote()->hasVirtualItems()) { 
     $shippingAddresses[] = $this->getQuote()->getBillingAddress(); 
    } 

    try { 
     foreach ($shippingAddresses as $address) { 
      $order = $this->_prepareOrder($address); 

      $orders[] = $order; 
     .... 
     } 

    foreach ($orders as $order) { 
      $order->place(); 
      $order->save(); 
     ... 
    } 

    .... 

    Mage::dispatchEvent('checkout_submit_all_after', array('orders' => $orders, 'quote' => $this->getQuote())); 

     return $this; 
    } catch (Exception $e) { 
     Mage::dispatchEvent('checkout_multishipping_refund_all', array('orders' => $orders)); 
     throw $e; 
    } 
} 

yüzden açıkça ödeme modülleri tarafından izlenir checkout_submit_all_after olayı tetikler sonra (en önemli kısmı) her adres için bir sipariş yaratmaya çalıştığını ve var olduğunu burada görebilirsiniz (Sipariş ve teklif bilgileri mevcut/aktif ödeme modüllerinin tümüne aktarılır ve gönderilen olayın alınmasını sağlayan belirli bir ödeme modülünün işleyip işlemeyeceğini belirleyecektir). Bir düzene tekrar o zaman, sadece bir düzende yaşamaya denemek ve sadece tüm öğeleri birleştirmek createOrders rutin yazabiliriz eğer

1.): Bunu akılda tutarak

, artık birkaç seçenek olabilir , ->place(), daha sonra iyi bir ölçü için dispatchEvent öğesine geçin.

  • sonra ilk ödeme oluşturmak içine bağlamak: aşağıdakilerden birini yapabilirsiniz ince şans var gibi kıvrık hale budur - Birden çok sipariş gerekiyorsa, iyi

    2.) Siparişler (hemen hemen imkansız)

  • emirleri oluşturmak için ve başka bir 'birleştirilmiş' siparişinde dispatchEvent içine geçeceksiniz. pis ve/veya yanlış sesler bu yüzden belki rahatsız etmeyin?

Evet, sizler burada çok fazla şey soruyorsunuz, bu yüzden yapabileceğim en iyi şey, ilk önce ciddi hasarlar verebileceğiniz bir yere ışık tutmaktır. Bunu kendim yapardım, ama maaşımın üstünde.

Bazı ek işaretçileri:

  • , sağ sipariş oluşturulduktan sonra oturumu yöntemlerine dikkat edin onlar da ayrıca
  • kurşun tüm gönderilen olaylara karşı dikkatli olun nerede olduğunu biliyorum. Hepsinin neden orada olduklarını ve nerede olduklarını biliyorlar.

İyi şanslar!

İlgili konular