2011-07-18 5 views
6

Magento(v1.5)は、1ページで定義されている出荷ルールに基づいて、登録済みのPaypalユーザーの国に基づいて配送を計算しませんチェックアウト。 Paypal Expressを使用している場合、Paypalにログインした後、ユーザーは注文を確認するためにサイトにリダイレクトされ、配送オプションは選択されず(または選択可能)、顧客は発注できません。Magento 1.5 Paypal Expressレビューページ送料 - 見積もりはありません

このソリューションは、私のために動作しません: http://www.magentocommerce.com/boards/viewthread/211273/

私が得るすべては、次のとおりです。 「配送方法 申し訳ありませんが、引用符は、この時点でこの注文のために利用可能ではありません。」

ユーザーが「注文の発注」を押すと何も起こりませんが、利用可能な出荷方法がないことを暗黙のうちに告げるため、疑いはありません。 (もちろん、利用可能な出荷方法があり、通常のチェックアウトを行う場合は自動的に選択されます)。

他のフォーラム投稿にも、カスタムテーマが原因であることが示唆されています。カスタムテーマからすべてのPaypalコンテンツを削除して、Magentoがベース/デフォルトのテンプレートファイルとレイアウトを使用していることを確認しました。

+0

ソリューションを見つけましたか? –

答えて

3

私は3つの問題を発見しましたが、これは最終的にはうまくいっています。彼らがどこから来たのかはっきりしませんが、Magentoのアップグレードやこのモジュールのさまざまなテンプレートの変更に関係していると思われます。

<?php if (!($_shippingRateGroups = $this->getShippingRates())): ?> 

お読みください:

<?php if (!($_shippingRateGroups = $this->getShippingRateGroups())): ?> 

第二の問題は、いくつかの場所で繰り返さ$this->getUrl機能、だった最初の問題は、この行でした。私はこれを完全に削除し、URLをハードコーディングしました。

最後に、$this->getCurrentShippingRate関数が現在のレートを返していませんでした。オスカーレアレスから

public function getCurrentShippingRate() 
{ 
    $this->_address = $this->_quote->getShippingAddress(); 
    return $this->_address->getShippingMethod(); 
    //return $this->_currentShippingRate; 
} 
+0

Oscar Realesのコードは見ましたか? – ShaunOReilly

+0

はい、私はすでに問題を整理していました。それはOPを助けるかもしれない。 –

4

次のコードは、私たちのために働いていた、と私はからそれをダウンロードした場所私は覚えていないことができます:私はこれにapp/code/core/Mage/Paypal/Block/Express/Review.phpgetCurrentShippingRate機能を変更しました! 他の解決策は、Paypal Standardを使用することです。

/** 
* Overload of Mage_Paypal_Model_Express_Checkout to fix bug with user registration. 
    * 
    * Currently, when users choose "Register" in the buying process 
    * And then choose "Paypal Express Checkout" as a method of payment, 
    * User registration does not occur, 
    * And the order is not assigned to the client, but remains "anonymous". 
* 
* @see Mage_Paypal_Model_Express_Checkout 
* @see Mage_Checkout_Model_Type_Onepage 
* 
* @author Oscar Reales <[email protected]> 
* @author Oscar Reales <[email protected]> 
*/ 
class Mg_Paypal_Model_Express_Checkout extends Mage_Paypal_Model_Express_Checkout 
{ 

    /** 
    * Update quote when returned from PayPal 
    * @param string $token 
    */ 
    public function returnFromPaypal($token) 
    { 
     $this->_getApi(); 
     $this->_api->setToken($token) 
      ->callGetExpressCheckoutDetails(); 

     //modified 
     //do not import the billing address from Paypal, we use the data that the user entered in the onsite Checkout 
     /*$billingAddress = $this->_quote->getBillingAddress(); 
     $exportedBillingAddress = $this->_api->getExportedBillingAddress(); 
     foreach ($exportedBillingAddress->getExportedKeys() as $key) { 
      $billingAddress->setDataUsingMethod($key, $exportedBillingAddress->getData($key)); 
     }*/ 

     //modified 
     //do not import the shipping address from Paypal, we use the data that the user entered in the onsite Checkout 
     /*$exportedShippingAddress = $this->_api->getExportedShippingAddress(); 
     if (!$this->_quote->getIsVirtual()) { 
      $shippingAddress = $this->_quote->getShippingAddress(); 
      if ($shippingAddress) { 
       if ($exportedShippingAddress) { 
        foreach ($exportedShippingAddress->getExportedKeys() as $key) { 
         $shippingAddress->setDataUsingMethod($key, $exportedShippingAddress->getData($key)); 
        } 
        $shippingAddress->setCollectShippingRates(true); 
       } 

       // import shipping method 
       $code = ''; 
       if ($this->_api->getShippingRateCode()) { 
        if ($code = $this->_matchShippingMethodCode($shippingAddress, $this->_api->getShippingRateCode())) { 
         // possible bug of double collecting rates :-/ 
         $shippingAddress->setShippingMethod($code)->setCollectShippingRates(true); 
        } 
       } 
       $this->_quote->getPayment()->setAdditionalInformation(self::PAYMENT_INFO_TRANSPORT_SHIPPING_METHOD, $code); 
      } 
     }*/ 
     $this->_ignoreAddressValidation(); 

     // import payment info 
     $payment = $this->_quote->getPayment(); 
     $payment->setMethod($this->_methodType); 
     Mage::getSingleton('paypal/info')->importToPayment($this->_api, $payment); 
     $payment->setAdditionalInformation(self::PAYMENT_INFO_TRANSPORT_PAYER_ID, $this->_api->getPayerId()) 
      ->setAdditionalInformation(self::PAYMENT_INFO_TRANSPORT_TOKEN, $token) 
     ; 
     $this->_quote->collectTotals()->save(); 
    } 



    /** 
     * Override the parent because core code does not take into account whether the user 
     * Has chosen to register or not. It makes no difference under checkout_method chosen by the user. 
     * Simply: if the customer does not have a quote, the core code saves it as Guest, NOT_LOGGED_IN group 
     * And saves the email in the billing Address along with the order. 
     * 
     * This behavior is not what we want. We save the customer if the user has 
     * elected to register and not place the order as GUEST 
    * 
    * @param string $token 
    * @param string $shippingMethodCode 
    */ 
    public function place($token, $shippingMethodCode = null) 
    { 
     if ($shippingMethodCode) { 
      $this->updateShippingMethod($shippingMethodCode); 
     } 

     //modified 
     //check if the checkout method was chosen as a guest user or registering 
     $isNewCustomer = false; 
     switch ($this->_quote->getCheckoutMethod()) { 
      case Mage_Checkout_Model_Type_Onepage::METHOD_GUEST: 
       $this->_prepareGuestQuote(); 
       break; 
      case Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER: 
       $this->_prepareNewCustomerQuote(); 
       $isNewCustomer = true; 
       break; 
     } 
     //fin modification 

     //modified 
     //this code is no longer necessary with the previous change 
     /*if (!$this->_quote->getCustomerId()) { 
      $this->_quote->setCustomerIsGuest(true) 
       ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID) 
       ->setCustomerEmail($this->_quote->getBillingAddress()->getEmail()); 
     }*/ 
     //fin modification 

     $this->_ignoreAddressValidation(); 
     $this->_quote->collectTotals(); 
     $service = Mage::getModel('sales/service_quote', $this->_quote); 
     $service->submitAll(); 
     $this->_quote->save(); 
     $this->_recurringPaymentProfiles = $service->getRecurringPaymentProfiles(); 
     // TODO: send recurring profile emails 


     //modified 
     //after saving the order and the customer, send relevant emails if this is a new customer 
     if ($isNewCustomer) { 
      try { 
       $this->_involveNewCustomer(); 
      } catch (Exception $e) { 
       Mage::logException($e); 
      } 
     } 
     //fin modificacion 

     $order = $service->getOrder(); 
     if (!$order) { 
      return; 
     } 
     $this->_billingAgreement = $order->getPayment()->getBillingAgreement(); 

     // commence redirecting to finish payment, if paypal requires it 
     if ($order->getPayment()->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_REDIRECT)) { 
      $this->_redirectUrl = $this->_config->getExpressCheckoutCompleteUrl($token); 
     } 

     switch ($order->getState()) { 
      // even after placement paypal can disallow to authorize/capture, but will wait until bank transfers money 
      case Mage_Sales_Model_Order::STATE_PENDING_PAYMENT: 
       // TODO 
       break; 
      // regular placement, when everything is ok 
      case Mage_Sales_Model_Order::STATE_PROCESSING: 
      case Mage_Sales_Model_Order::STATE_COMPLETE: 
      case Mage_Sales_Model_Order::STATE_PAYMENT_REVIEW: 
       $order->sendNewOrderEmail(); 
       break; 
     } 
     $this->_order = $order; 
    } 


    /** 
    * Prepare quote for guest checkout order submit 
    * 
    * @see Mage_Checkout_Model_Type_Onepage::_prepareGuestQuote() 
    * 
    * @return Mg_Paypal_Model_Express_Checkout 
    */ 
    protected function _prepareGuestQuote() 
    { 
     $quote = $this->_quote; 
     $quote->setCustomerId(null) 
      ->setCustomerEmail($quote->getBillingAddress()->getEmail()) 
      ->setCustomerIsGuest(true) 
      ->setCustomerGroupId(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID); 
     return $this; 
    } 


    /** 
    * Prepare quote for customer registration and customer order submit 
    * 
    * @see Mage_Checkout_Model_Type_Onepage::_prepareNewCustomerQuote() 
    * 
    */ 
    protected function _prepareNewCustomerQuote() 
    { 
     $quote  = $this->_quote; 
     $billing = $quote->getBillingAddress(); 
     $shipping = $quote->isVirtual() ? null : $quote->getShippingAddress(); 

     //$customer = Mage::getModel('customer/customer'); 
     $customer = $quote->getCustomer(); 
     /* @var $customer Mage_Customer_Model_Customer */ 
     $customerBilling = $billing->exportCustomerAddress(); 
     $customer->addAddress($customerBilling); 
     $billing->setCustomerAddress($customerBilling); 
     $customerBilling->setIsDefaultBilling(true); 
     if ($shipping && !$shipping->getSameAsBilling()) { 
      $customerShipping = $shipping->exportCustomerAddress(); 
      $customer->addAddress($customerShipping); 
      $shipping->setCustomerAddress($customerShipping); 
      $customerShipping->setIsDefaultShipping(true); 
     } elseif ($shipping) { 
      $customerBilling->setIsDefaultShipping(true); 
     } 
     /** 
     * @todo integration with dynamica attributes customer_dob, customer_taxvat, customer_gender 
     */ 
     if ($quote->getCustomerDob() && !$billing->getCustomerDob()) { 
      $billing->setCustomerDob($quote->getCustomerDob()); 
     } 

     if ($quote->getCustomerTaxvat() && !$billing->getCustomerTaxvat()) { 
      $billing->setCustomerTaxvat($quote->getCustomerTaxvat()); 
     } 

     if ($quote->getCustomerGender() && !$billing->getCustomerGender()) { 
      $billing->setCustomerGender($quote->getCustomerGender()); 
     } 

     Mage::helper('core')->copyFieldset('checkout_onepage_billing', 'to_customer', $billing, $customer); 
     $customer->setPassword($customer->decryptPassword($quote->getPasswordHash())); 
     $customer->setPasswordHash($customer->hashPassword($customer->getPassword())); 
     $quote->setCustomer($customer) 
      ->setCustomerId(true); 
    } 


    /** 
    * Involve new customer to system 
    * 
    * @see Mage_Checkout_Model_Type_Onepage::_involveNewCustomer() 
    * 
    * @return Mg_Paypal_Model_Express_Checkout 
    */ 
    protected function _involveNewCustomer() 
    { 
     $customer = $this->_quote->getCustomer(); 
     if ($customer->isConfirmationRequired()) { 
      $customer->sendNewAccountEmail('confirmation'); 
      $url = Mage::helper('customer')->getEmailConfirmationUrl($customer->getEmail()); 
      Mage::getSingleton('customer/session')->addSuccess(
       Mage::helper('customer')->__('Account confirmation is required. Please, check your e-mail for confirmation link. To resend confirmation email please <a href="%s">click here</a>.', $url) 
      ); 
     } else { 
      $customer->sendNewAccountEmail(); 
      Mage::getSingleton('customer/session')->loginById($customer->getId()); 
     } 
     return $this; 
    } 



    /** 
     * we extend it simply because it is defined as private in the parent 
     * And if nothing changes, we have the obligation to extend to 
    */ 
    private function _ignoreAddressValidation() 
    { 
     $this->_quote->getBillingAddress()->setShouldIgnoreValidation(true); 
     if (!$this->_quote->getIsVirtual()) { 
      $this->_quote->getShippingAddress()->setShouldIgnoreValidation(true); 
     } 
    } 


} 
関連する問題