Отключить опцию адреса доставки в PayPal Express Checkout - PullRequest
22 голосов
/ 26 ноября 2010

Работа с API PayPal и использование интерфейса пар «имя-значение» Исходные коды PHP из SDK и загрузок: упрощение интеграции с загрузками и SDK .

Мой вопрос похож на « Удаление (или предварительное заполнение) информации об адресе для PayPal Express Checkout », но я не хочу, чтобы стоимость доставки / адрес или что-либо связанное с доставкой вообще.

Я храню все данные о доставке в своей системе (даже иногда доставка не применяется, и за нее не взимается плата), и я просто хочу, чтобы пользователь оплачивал через PayPal без адреса доставки и стоимости доставки.

Как я могу отключить доставку части оформления заказа?

Ответы [ 5 ]

29 голосов
/ 10 декабря 2010

Если вы используете более новый API, вы также можете передать NOSHIPPING = 1 (не no_shipping)

Более подробная информация обо всех возможных параметрах SetExpressCheckout здесь:

https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/

Или поиск Опыт оплаты в новом REST API

14 голосов
/ 26 ноября 2010

Эй, Эргек, просто передайте параметр no_shipping со значением 1.

Из документации PayPal :

no_shipping

Do not prompt payers for shipping address. Allowable values:
0 – prompt for an address, but do not require one
1 – do not prompt for an address
2 – prompt for an address, and require one
The default is 0.
3 голосов
/ 01 декабря 2017

Текущий правильный ответ не рекомендуется . Чтобы исправить проблему в новом API, мы должны создать ресурс профиля веб-опыта оплаты с необходимыми параметрами и прикрепить его к запросу Payment .

Пример в PHP:

/** Note: Define some variables yourself. */

$inputFields = new InputFields();
$inputFields->setAllowNote(true)
    ->setNoShipping(1) // Important step
    ->setAddressOverride(0);

$webProfile = new WebProfile();
$webProfile->setName(uniqid())
    ->setInputFields($inputFields)
    ->setTemporary(true);

$createProfile = $webProfile->create($apiContext);

$payment = new Payment();

$payment->setPayer($payer);
$payment->setIntent($intent);
$payment->setRedirectUrls($redirectUrls)
$payment->setTransactions(array($transaction));
$payment->setExperienceProfileId($createProfile->getId()); // Important step.

$payment->create($apiContext);

if ($payment->getState() === "created") {
    $approvalLink = $payment->getApprovalLink()

    header("Location: $approvalLink"); // Redirects user to PayPal page.
}

Примечание: Все вышеперечисленные классы можно найти по ссылке: https://github.com/paypal/PayPal-PHP-SDK/tree/master/lib/PayPal/Api

2 голосов
/ 17 сентября 2015

Создание веб-профиля на основе примера, найденного в API: CreateWebProfile.php.

$createProfileResponse = require  __DIR__ . '/CreateWebProfile.php';
$payment = new Payment(); 
$payment->setExperienceProfileId($createProfileResponse->getId());

Путь к файлу: paypal/rest-api-sdk-php/sample/payment-experience/CreateWebProfile.php

1 голос
/ 17 августа 2011

@ Эргек: Я пробовал это:

$nvpstr = "&ADDRESSOVERRIDE=1".$shiptoAddress."&L_NAME0=".$L_NAME0."&L_NAME1=".$L_NAME1."&L_AMT0=".$L_AMT0."&L_AMT1=".$L_AMT1."&L_QTY0=".$L_QTY0."&L_QTY1=".$L_QTY1."&MAXAMT=".(string)$maxamt."&ITEMAMT=".(string)$itemamt."&AMT=".$itemamt."&ReturnUrl=".$returnURL."&CANCELURL=".$cancelURL."&CURRENCYCODE=".$currencyCodeType;

Это работает. Здесь мы также можем использовать адрес доставки, хотя мы не берем никакой суммы.

...