Question

Travailler avec l'API PayPal et en utilisant l'interface NVP code source PHP et SDKs Téléchargements:. Simplifier Intégrations avec téléchargements et SDKs

Ma question est similaire à « Suppression (ou préremplissage) les détails d'adresse pour PayPal express Checkout » mais je ne veux pas les frais de port / adresse ou tout ce qui touche au sujet de l'expédition du tout.

Je garde tous les détails d'expédition sur mon système (même parfois expédition ne s'applique même pas et il n'y a pas de frais pour elle) et je veux juste l'utilisateur de payer via PayPal sans adresse d'expédition et les frais de port.

Comment puis-je désactiver une partie de l'expédition de votre commande?

Était-ce utile?

La solution

Si vous utilisez l'API plus récente, vous pouvez aussi passer NOSHIPPING = 1 (non no_shipping)

De plus amples détails sur tous les paramètres possibles à la SetExpressCheckout ici:

https://developer.paypal.com/ webapps / développeur / docs / classic / api / marchand / SetExpressCheckout_API_Operation_NVP /

Ou recherche pour expérience de paiement dans la nouvelle API REST

Autres conseils

Hey Ergec, il suffit de passer le long du paramètre no_shipping avec une valeur de 1.

A partir de PayPal documentation :

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 bonne réponse actuelle est depracated . Pour résoudre le problème dans la nouvelle API, nous devrions créer L'expérience web paiement ressource profil avec les paramètres nécessaires et le joindre à la demande Paiement .

Exemple 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.
}

Remarque: Vous trouverez ci-dessus toutes les classes utilisées par lien: https://github.com/paypal/PayPal-PHP-SDK/tree/master/lib/PayPal/Api

Créer un profil web basé sur l'exemple trouvé dans l'API. CreateWebProfile.php

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

Chemin du fichier: paypal/rest-api-sdk-php/sample/payment-experience/CreateWebProfile.php

@Ergec: J'ai essayé ceci:

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

Il fonctionne. Ici, nous pouvons également utiliser l'adresse d'expédition, même si nous ne facturons aucun montant.

Pour résoudre pour cela de .js client Web en cours (2019), ajouter le bloc application_context au corps de la demande.

Voici un exemple pour l'appel createSubscription(); et je pense que cela fonctionne avec createOrder() ainsi

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');

Merci à l'exemple de code ici:

Voici où sont répertoriés les énumérations de terrain:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top