2010-07-22 69 views
1

我嘗試讓我的magento 1.4運行paypal付款,但工作流存在嚴重問題。在我選擇PayPal並被路由到PayPal賬戶後,您通常會自動返回到magento商店以完成訂單,但在我的情況中,magento告訴您存在地址字段的問題。貝寶一點兒也不正確發送ADRESS回Magento的:Magento 1.4 paypal bug

Error: Please check shipping address information. Please enter last name. 

這是一個已知的bug或有補丁或解決方法嗎?

請幫忙! thnx。

+0

這裏有什麼新東西? 嘿,大家,你只是不使用貝寶或我是唯一一個誰下載了越野車版本? 也許我必須將店鋪系統更改爲某個工作系統... – headkit 2010-08-13 08:08:36

+0

您是否嘗試過全新安裝?你的地址有什麼異常?另外,您是否可以使用日誌記錄來查看返回的地址? – 2010-08-13 14:12:37

+0

不幸的是我沒有檢查這些東西的可能性。但是我在這裏發現了一些其他人也有同樣的問題:http://www.magentocommerce.com/boards/viewthread/195086/ – headkit 2010-08-23 13:14:01

回答

2

該錯誤似乎在/app/code/core/Mage/Paypal/Model/Api/Nvp.php。看起來變量沒有很好地映射。因爲我找不到這個文件中的具體錯誤,所以我在/app/code/core/Mage/Paypal/Model/Express/Checkout.php中做了一點骯髒的解決方法。

1.4.2只需更換方法returnFromPaypal()用下面的代碼...

public function returnFromPaypal($token) 
{ 
    $this->_getApi(); 
    $this->_api->setToken($token) 
     ->callGetExpressCheckoutDetails(); 

    // import billing address 
    $billingAddress = $this->_quote->getBillingAddress(); 
    $exportedBillingAddress = $this->_api->getExportedBillingAddress(); 

    // import shipping address 
    $exportedShippingAddress = $this->_api->getExportedShippingAddress(); 
    if (!$this->_quote->getIsVirtual()) { 
     $shippingAddress = $this->_quote->getShippingAddress(); 
     if ($shippingAddress) { 
      if ($exportedShippingAddress) { 
       foreach ($exportedShippingAddress->getExportedKeys() as $key) { 
        if('firstname' == $key || 'lastname' == $key){ 
         continue; 
        } // if 
        $shippingAddress->setDataUsingMethod($key, $exportedShippingAddress->getData($key)); 
        $billingAddress->setDataUsingMethod($key, $exportedShippingAddress->getData($key)); 
       } 

       // Correct First- and Lastnames 
       list($_firstname, $_lastname) = explode(' ', $exportedShippingAddress->getData('firstname')); 

       $shippingAddress->setDataUsingMethod('firstname', $_firstname); 
       $billingAddress->setDataUsingMethod('firstname', $_firstname); 

       $shippingAddress->setDataUsingMethod('lastname', $_lastname); 
       $billingAddress->setDataUsingMethod('lastname', $_lastname); 

       $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(); 
} 

修改後的代碼與送貨地址替換整個帳單地址和推給了命名以$ firstname的形式轉換爲$ firstname和$ lastname。

不乾淨,但工作。 :-)

+0

對我來說也是如此,在Magento 1.6.2上 – Anse 2015-12-09 14:07:52

0

任何運氣找到解決辦法,我有同樣的問題。

---更新---

我終於想通了什麼事就這一個我。我安裝了Custom Shipping Admin模塊,它重寫了驗證訂單的地址控制器。我更新了被覆蓋的模塊,以反映我正在使用的Magento版本,它的工作..沒有問題。希望這可以幫助某人。