web-dev-qa-db-fra.com

Montant manquant et récapitulatif de commande dans Paypal Express Checkout

J'ai intégré Paypal à codeigniter avec Paypal_helper (je ne me rappelle plus où je l'ai trouvé, mais c'est une version légèrement réécrite du code original de Paypals pour le paiement express. J'essaie d'appeler cette fonction, 

CallShortcutExpressCheckout ($ paymentAmount, $ currencyCodeType, $ PaymentType, $ returnURL, $ cancelURL)

envoi de $ paymentAmount en tant qu'int, $ currencyCodeType en tant que "NOK" et $ paymentType en tant que "Sale".

Sandbox et live, aucun montant n’apparaît sur le site Paypal ...

Quel pourrait être le problème?

Modifier, pour expliquer davantage mon processus. J'utilise ceci, principalement comme spécifié dans le https://www.Paypal-labs.com/integrationwizard/ecpaypal/cart.php }. Cela devrait être faisable sans le formulaire? PaymentAmount peut être envoyé en tant que variable standard lors de l'appel de la fonction CallShortcutExpressCheckout ?:

$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
    RedirectToPayPal ( $resArray["TOKEN"] );
} 
else  
{
    //Display a user friendly Error on the page using any of the following error information returned by Paypal
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);

    echo "SetExpressCheckout API call failed. ";
    echo "Detailed Error Message: " . $ErrorLongMsg;
    echo "Short Error Message: " . $ErrorShortMsg;
    echo "Error Code: " . $ErrorCode;
    echo "Error Severity Code: " . $ErrorSeverityCode;
}

Le jeton est enregistré dans une base de données. L'utilisateur est redirigé vers Paypal, où aucun montant n'est répertorié.

21
Øyvind

Comme vous ne transmettez pas ce que l'on appelle les "détails de l'élément de ligne" (données produit), Paypal n'affiche pas le montant total. 

Si vous souhaitez uniquement afficher le montant de l'achat en cours, redirigez les acheteurs vers https://www.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxx&useraction=commit (au lieu de https://www.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxx

Si vous souhaitez commencer à envoyer les détails des éléments de campagne à Paypal, incluez les éléments suivants dans votre demande d'API SetExpressCheckout

// Total amount of the purchase, incl shipping, tax, etc  
PAYMENTREQUEST_0_AMT=300.0  
// Total amount of items purchased, excl shipping, tax, etc     
PAYMENTREQUEST_0_ITEMAMT=300.0  
// Authorize the funds first (Authorization), or capture immediately (Sale)?    
PAYMENTREQUEST_0_PAYMENTACTION=Sale  
// First item  
L_PAYMENTREQUEST_0_NAME0=Item1  
L_PAYMENTREQUEST_0_QTY0=1  
L_PAYMENTREQUEST_0_AMT0=100.00  
// Second item  
L_PAYMENTREQUEST_0_NAME1=Item2  
L_PAYMENTREQUEST_0_QTY1=1  
L_PAYMENTREQUEST_0_AMT1=200.00  

Si vous souhaitez également que cela apparaisse dans votre propre historique, vous devez également l'inclure dans DoExpressCheckoutPayment

Cela a également été posté dans php Paypal problème de paiement express

50
Robert

Après une lecture approfondie sur le site désordonné de documents Paypal, voici un petit guide ExpressCheckout en cours d’exercice 2013. Je souhaitais que les détails des éléments soient affichés sur la page de paiement Paypal et la page d’historique des transactions du commerçant.

Liens vers la documentation Paypal

Vous pouvez appeler les méthodes d'URL suivantes directement sur le navigateur Web, mettre à jour le jeton et les paramètres de paiementid en conséquence.

Comme il s’agit d’un produit numérique, les frais d’expédition et de manutention ne sont pas indiqués. Ligne d'article unique. Le montant et les taxes sont indiqués. Ne pas exiger une adresse de livraison confirmée, pas de champs d'adresse de livraison, pas autoriser note freetext, le payeur n'a pas besoin de compte Paypal et aucune inscription requise (typetype = sole). Activer la section carte de crédit sur le site Paypal (landingpage = facturation). Utilisez un titre de marque personnalisé sur le site Paypal. Utilisez un champ personnalisé pour donner sa propre valeur à des fins de suivi. L’historique des transactions du site marchand doit afficher les détails de l’article (donner les détails de l’élément sur les méthodes SetExpressCheckout et DoExpressCheckoutPayment).

La méthode SetExpressCheckout ouvre une nouvelle transaction

https://api-3t.sandbox.Paypal.com/nvp?
    USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=SetExpressCheckout
    &VERSION=98
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE
    &REQCONFIRMSHIPPING=0
    &NOSHIPPING=1
    &ALLOWNOTE=0
    &SOLUTIONTYPE=Sole
    &LANDINGPAGE=Billing
    &BRANDNAME=MY+WEBSHOP+TITLE
    &PAYMENTREQUEST_0_AMT=22.22
    &PAYMENTREQUEST_0_TAXAMT=4.30
    &PAYMENTREQUEST_0_ITEMAMT=17.92
    &PAYMENTREQUEST_0_DESC=mypurdesc
    &PAYMENTREQUEST_0_CUSTOM=custom1
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1
    &L_PAYMENTREQUEST_0_NAME0=MyItem1
    &L_PAYMENTREQUEST_0_DESC0=Item1+description
    &L_PAYMENTREQUEST_0_QTY0=1
    &L_PAYMENTREQUEST_0_AMT0=17.92
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30
    &RETURNURL=https://myserver.com/webapp/Paypal.jsp%3Fcmd=successexp
    &CANCELURL=https://myserver.com/webapp/Paypal.jsp%3Fcmd=cancelexp

La réponse doit avoir ACK = Success ou ACK = SuccessWithWarning, lisez la valeur TOKEN

Redirige le navigateur de l'utilisateur vers le site Paypal, donne une valeur de jeton

https://www.sandbox.Paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=<token>

L'utilisateur utilise un compte Paypal ou une carte de crédit. Paypal redirige l'utilisateur vers ou pour annuler l'URL. L'URL de destination de la redirection obtient les valeurs de paramètre jeton _ et PayerID. La transaction n'est pas terminée. Appelez doExpressCheckoutPayment. méthode.

Afficher la boîte de dialogue de confirmation à l'écran (avec OK, le bouton ANNULER) ou le cas simple Valider une transaction et afficher le message "Merci, achat terminé". L'utilisateur a déjà accepté un message. paiement sur le site Paypal et attend que la transaction soit finalisée.

Vous pouvez valider une transaction dans le même gestionnaire de requête-réponse ou à l'aide de la tâche d'arrière-plan asynchrone . Le site Paypal peut être temporairement indisponible, alors ne vous attendez pas à ce qu'il fonctionne immédiatement.

Valider la transaction si la redirection a abouti, utiliser token and payerid

https://api-3t.sandbox.Paypal.com/nvp?
    USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=DoExpressCheckoutPayment
    &VERSION=98
    &PAYMENTREQUEST_0_PAYMENTACTION=SALE
    &PAYMENTREQUEST_0_AMT=22.22
    &PAYMENTREQUEST_0_TAXAMT=4.30
    &PAYMENTREQUEST_0_ITEMAMT=17.92
    &PAYMENTREQUEST_0_CURRENCYCODE=EUR
    &L_PAYMENTREQUEST_0_NUMBER0=itemid1
    &L_PAYMENTREQUEST_0_NAME0=MyItem1
    &L_PAYMENTREQUEST_0_QTY0=1
    &L_PAYMENTREQUEST_0_AMT0=17.92
    &L_PAYMENTREQUEST_0_TAXAMT0=4.30
    &token=<token>
    &payerid=<payerid>

Lire ACK = Succès et vérifier les champs

ACK=Success
PAYMENTINFO_0_PAYMENTSTATUS=Completed
PAYMENTINFO_0_ACK=Success
PAYMENTINFO_0_AMT=22.22     total amount must match
PAYMENTINFO_0_FEEAMT=0.99   (just for fun, read Paypal comission fee)
PAYMENTINFO_0_CURRENCYCODE=EUR  currency must match

(Facultatif) Lire les détails de la transaction depuis Paypal

Vous pouvez l'utiliser lors du workflow de transaction ou à tout moment si un jeton est stocké pour une utilisation ultérieure.

https://api-3t.sandbox.Paypal.com/nvp
    ?USER=<userid>
    &PWD=<pwd>
    &SIGNATURE=<mysig>
    &METHOD=GetExpressCheckoutDetails
    &VERSION=98
    &token=<token>

Lire les paramètres de réponse.

ACK=Success
CHECKOUTSTATUS=PaymentActionCompleted
PAYMENTREQUEST_0_AMT=22.22
PAYMENTREQUEST_0_TAXAMT=4.30
PAYMENTREQUEST_0_CURRENCYCODE=EUR

(Facultatif) Lisez et enregistrez l'identifiant de transaction, l'identifiant de corrélation et l'identifiant de jeton, puis écrivez dans logtable.

PAYMENTREQUEST_0_TRANSACTIONID=11E585715B622391E
CORRELATIONID=4534b683c335f

Je suis disposé à recevoir des commentaires s'il y a des erreurs de logique.

14
Whome

Vérifiez ce lien, espérons que cela vous aidera dans un certain sens: https://cms.Paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECGettingStarted

 PAYMENTREQUEST_0_AMT = montant // pour montant 
0
Sudhir Bastakoti