Как осуществить оплату через Paypal без сбора информации о доставке?
Магазин, над которым я работаю, является магазином самовывоза, что означает, что клиенты могут заказывать товары онлайн, но сбор заказов должен осуществляться из самого магазина; клиенты должны идти в магазин, чтобы забрать товары для заказа.
Следовательно, для этого интернет-магазина нет ничего лучше доставки. Таким образом, мы не собираем информацию о доставке от пользователя во время регистрации в соответствии с инструкциями клиента.
Теперь в то же время клиент настаивает на использовании Экспресс-оплата через Paypal для оплаты.
Это означает, что если пользователь зарегистрирован, но его информация о доставке недоступна, и если он попытается оформить заказ, появится следующая ошибка:
" Шлюз PayPal отклонил запрос. Поле Адрес Отправления1 является обязательным (#10727: Адрес Отправления1 Пустой). Поле Город Адреса доставки является обязательным (#10728: Город Адреса доставки Пустой)."
Есть ли в любом случае способ справиться с ситуацией??
Я имею в виду, могу ли я сделайте что-нибудь, чтобы вышеуказанные поля для Paypal не оставались обязательными, или передайте какое-нибудь случайное статическое значение для них вместе с другими параметрами в Paypal?
Буду признателен за любую помощь.
Заранее благодарю
2 answers
Взгляните на класс Mage_Paypal_Model_Api_Nvp
и метод callSetExpressCheckout()
. Прямо над этим вы увидите ссылку на https://cms.paypal.com/us/cgi-bin/?&cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_SetExpressCheckout
. Если вы посетите эту страницу, вы обнаружите, что можете передать аргумент NOSHIPPING
с 1 из трех значений, 0
, 1
или 2
. 1
описывается как:
PayPal вообще не отображает поля адреса доставки
В описании также говорится:
Для цифровых товаров это поле обязательно, и вы должны установить его равным 1
Ты фактически у вас есть цифровые товары, так как у вас нет адреса доставки, поэтому вам нужно передать NOSHIPPING
со значением 1
вызову SetExpressCheckout
, который вы можете выполнить в методе callSetExpressCheckout()
. Поэтому перепишите этот класс в свой собственный модуль и добавьте в метод дополнительный параметр, что-то вроде следующего:
public function callSetExpressCheckout()
{
// rest of the method here
$request['NOSHIPPING'] = 1; // add this line
$response = $this->call(self::SET_EXPRESS_CHECKOUT, $request);
$this->_importFromResponse($this->_setExpressCheckoutResponse, $response);
}
Это настраивается, просто скрыто в разделе дополнительные настройки:
См.: Требуется платежный адрес Клиента.
Редактировать:
Таким образом, после рассмотрения комментариев и других ответов нет необходимости изменять основной код. Просто используйте $quote->setisvirtual() в своем шаблоне оформления заказа или блоке.
Наблюдайте за линией 331 в Mage/Paypal/Model/Checkout/Express.php в установке 1.9.0.1:
// supress or export shipping address
if ($this->_quote->getIsVirtual()) {
if ($this->_config->requireBillingAddress == Mage_Paypal_Model_Config::REQUIRE_BILLING_ADDRESS_VIRTUAL) {
$this->_api->setRequireBillingAddress(1);
}
$this->_api->setSuppressShipping(true);