我尝试在我的magento 1.4中运行paypal付款,但工作流程存在严重问题。在我选择了paypal并被送到paypal账户发送钱后,你通常会自动回到magento商店完成订单,但在我的情况下,magento告诉你有关于地址字段的问题。 paypal没有正确地将地址发送回magento:
Error: Please check shipping address information. Please enter last name.
这是一个已知错误还是有补丁或解决方法?
请帮忙! 日Thnx。
答案 0 :(得分:2)
错误似乎在 /app/code/core/Mage/Paypal/Model/Api/Nvp.php 中。看起来vars没有很好地映射。因为我在这个文件中找不到具体的错误,所以我在 /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。
不干净,但工作。 : - )
答案 1 :(得分:0)
任何运气找到解决方案,我都有同样的问题。
---更新---
我终于弄明白了这件事发生了什么。我安装了自定义运输管理模块,它覆盖了验证订单的地址控制器。我更新了覆盖的模块以反映我所使用的Magento的版本并且它有效..没问题。希望这有助于某人。