web-dev-qa-db-fra.com

Désactiver l'option d'adresse de livraison dans Paypal Express Checkout

Utilisation de l'API Paypal et utilisation de l'interface paire paire nom-valeur PHP codes source à partir de SDK et téléchargements: simplifiez l'intégration avec les téléchargements et les SDK .

Ma question est similaire à " Suppression (ou pré-remplissage) des détails d'adresse pour Paypal Express Checkout " mais je ne veux pas de frais d'expédition/adresse ou quoi que ce soit concernant l'expédition du tout.

Je conserve tous les détails d'expédition sur mon système (même parfois, l'expédition ne s'applique pas et elle est gratuite) et je veux juste que l'utilisateur paie via Paypal sans l'adresse et les frais d'expédition.

Comment puis-je désactiver la partie d'expédition de la commande?

22
Ergec

Si vous utilisez la nouvelle API, vous pouvez également transmettre NOSHIPPING = 1 (pas no_shipping).

Plus de détails sur tous les paramètres possibles du SetExpressCheckout ici:

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

Ou recherchez Expérience de paiement dans la nouvelle API REST

29
jbx

Salut Ergec, transmettez simplement le paramètre no_shipping avec la valeur 1.

De Paypal documentation :

no_shipping 
 
 Ne demandez pas au payeur l'adresse de livraison. Valeurs admissibles: 
 0 - Demander une adresse, mais n'en nécessite pas une. 
 1 - ne pas demander une adresse 
 2 - Demander une adresse et en demander un 
 La valeur par défaut est 0.
14
James Skidmore

La bonne réponse actuelle est depracated . Pour résoudre le problème dans la nouvelle API, nous devrions créer ressource de profil d’expérience Web Payment avec les paramètres nécessaires et l’attacher à request Payment .

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

Note: Vous pouvez trouver toutes les classes utilisées ci-dessus par lien: https://github.com/Paypal/PayPal-PHP-SDK/tree/master/lib/Paypal/Api

3
Akmal

Créez un profil Web basé sur l'exemple de 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

2
elkrari

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

Ça marche. Ici, nous pouvons également utiliser l'adresse de livraison même si nous ne facturons aucun montant.

1
user869379