Pregunta

Trabajar con la API de PayPal y el uso de los códigos fuente de nombre-valor interfaz Par de PHP SDK y descargas:. Simplificar las integraciones con las descargas y SDK

Mi pregunta es similar a " Extracción (o llenado previo) los detalles de la dirección de Pago exprés ", pero no quiero que el coste de envío / dirección o cualquier cosa relacionada sobre el envío en absoluto.

guardo todos los detalles de envío en mi sistema (incluso a veces de envío ni siquiera se aplican y no hay ningún cargo por ello) y sólo quiero usuario a pagar a través de PayPal sin la dirección de envío y el coste de envío.

¿Cómo puedo desactivar el envío de parte de pago?

¿Fue útil?

Solución

Si está utilizando la API más reciente, se podría también pasar NOSHIPPING = 1 (no no_shipping)

Más detalles sobre todos los parámetros posibles a la SetExpressCheckout aquí:

https://developer.paypal.com/ webapps / desarrollador / docs / clásico / api / comerciante / SetExpressCheckout_API_Operation_NVP /

O de búsqueda para Pago experiencia en nueva API REST

Otros consejos

Hey Ergec, sólo tiene que pasar a lo largo del parámetro no_shipping con un valor de 1.

A partir de PayPal documentación :

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.

La respuesta correcta es la corriente depracated . Para solucionar el problema en la nueva API debemos crear Pago site del recurso de la experiencia de perfil con los parámetros necesarios y adjuntarlo a la solicitud pago .

Ejemplo en 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.
}

Nota: Se puede encontrar toda encima de las clases usadas por enlace: https://github.com/paypal/PayPal-PHP-SDK/tree/master/lib/PayPal/Api

Crea un perfil web basado en el ejemplo se encontró en la API:. CreateWebProfile.php

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

Ruta del archivo: paypal/rest-api-sdk-php/sample/payment-experience/CreateWebProfile.php

@Ergec: He intentado esto:

$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;

Funciona. Aquí también podemos utilizar la dirección a pesar de que no estamos cobrando cualquier cantidad de envío.

Para resolver esto desde actuales (2019) .JS cliente web, añadir el bloque application_context al cuerpo de la petición.

A continuación se muestra un ejemplo para la llamada createSubscription(); y estoy pensando que esto funcionará con createOrder() así

paypal.Buttons({
          createSubscription: function (data, actions) {

              return actions.subscription.create({

                  'plan_id'            : 'P-123',
                  'application_context': {
                      'shipping_preference': 'NO_SHIPPING'
                  }
              });
          },

          onApprove: function (data, actions) {

              // ...
          }
      })
      .render('#paypal-button-container');

Gracias al código de ejemplo aquí:

Aquí es donde se enumeran las enumeraciones de campo:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top