Как осуществить оплату через Paypal без сбора информации о доставке?


Магазин, над которым я работаю, является магазином самовывоза, что означает, что клиенты могут заказывать товары онлайн, но сбор заказов должен осуществляться из самого магазина; клиенты должны идти в магазин, чтобы забрать товары для заказа.

Следовательно, для этого интернет-магазина нет ничего лучше доставки. Таким образом, мы не собираем информацию о доставке от пользователя во время регистрации в соответствии с инструкциями клиента.

Теперь в то же время клиент настаивает на использовании Экспресс-оплата через Paypal для оплаты.

Это означает, что если пользователь зарегистрирован, но его информация о доставке недоступна, и если он попытается оформить заказ, появится следующая ошибка:

" Шлюз PayPal отклонил запрос. Поле Адрес Отправления1 является обязательным (#10727: Адрес Отправления1 Пустой). Поле Город Адреса доставки является обязательным (#10728: Город Адреса доставки Пустой)."

Есть ли в любом случае способ справиться с ситуацией??

Я имею в виду, могу ли я сделайте что-нибудь, чтобы вышеуказанные поля для Paypal не оставались обязательными, или передайте какое-нибудь случайное статическое значение для них вместе с другими параметрами в Paypal?

Буду признателен за любую помощь.

Заранее благодарю

Author: Helly, 2014-11-25

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);
}
 3
Author: Jonathan Hussey, 2014-11-25 09:41:37

Это настраивается, просто скрыто в разделе дополнительные настройки: Advanced Paypal Express Checkout Settings

См.: Требуется платежный адрес Клиента.

Редактировать:

Таким образом, после рассмотрения комментариев и других ответов нет необходимости изменять основной код. Просто используйте $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);
 0
Author: Melvyn, 2014-11-25 12:07:04