web-dev-qa-db-fra.com

Puis-je tester l'API Paypal de localhost

UPDATE 1:

Selon ce tutoriel sur À l'aide de la Notification de paiement instantané de Paypal avec PHP , Paypal ne peut pas accéder aux sites Web hébergés localement à moins que certains ports de routeur ne soient ouverts. Est-ce parce que le site Web est à propos de IPN ou est-ce vrai pour toutes les API Paypal?

QUESTION ORIGINALE:

Sur mon ordinateur portable, je dispose d’une configuration LAMP, lorsque j’utilise le http://localhost pour créer un site Web avant de le mettre en ligne.

Pour un nouveau projet, je dois utiliser les API Paypal. Est-ce que je pourrai utiliser l'hôte local pour tester les API Paypal si je connecte mon ordinateur portable à Internet? Ou devrais-je télécharger mon site Web vers un hôte LAMP ailleurs?

Vous pensez probablement, quelle question stupide, essayez juste de voir si ça marche. J'ai essayé et cela ne fonctionne pas et je voulais écarter cette question avant de passer à l'étape suivante.

20
oshirowanen

Ça devrait marcher. J'ai effectué une intégration de paiement avec Paypal l'année dernière, et cela fonctionnait sans problème avec localhost.

Utilisez-vous le sandbox Paypal pour le développement? https://developer.Paypal.com/

4
Mihai Frentiu

Si vous souhaitez déboguer votre code IPN, vous devez rendre votre serveur accessible au public d'une manière ou d'une autre. C’est la raison pour laquelle Paypal peut poster de manière asynchrone sur votre serveur après avoir envoyé votre demande. Habituellement, je pense que c'est assez rapide (dans les 15 secondes), mais cela pourrait être plus long.

Un moyen simple de rendre public un serveur de développement disponible consiste à utiliser ngrok ou forwardhq.com . Cela vous permet de continuer à développer dans votre IDE comme d'habitude, en exécutant votre code en mode débogage. Lorsque Paypal publie de nouveau sur votre terminal, vous pouvez le déboguer directement dans votre IDE. Ces services résument tout cela pour vous, il est donc très facile de le faire sans aucun savoir-faire technique. 

À ma connaissance, cela se fait à l'aide d'un "tunnel SSH inversé" qui permet de rendre public votre site en le mandatant via un serveur déjà disponible au public. Notez qu'avant de faire cela, vous devez considérer que non seulement Paypal peut accéder à votre site une fois qu'il est rendu public, mais aussi n'importe qui peut, veuillez donc en tenir compte en premier lieu.

De plus, si vous avez votre propre domaine public et que cela ne vous dérange pas de jouer dans un terminal avec SSH, vous pouvez supposément faire quelque chose comme ce script Shell ( copié à partir de ce Gist )

# Usage: show <local-port> <subdomain>
function show() {
    DOMAIN=".yourdomain.com"
    REMOTE="$2$DOMAIN"
    ssh -tR 1080:127.0.0.1:$1 vps "Sudo ssh -Nl \$USER -L $REMOTE:80:127.0.0.1:1080 localhost"
}

Pour que cela fonctionne comme ci-dessus, vous devez insérer ce qui suit dans votre fichier ~/.ssh/config:

Host vps
    HostName <server address>
    User <server username>

Si vous ne voulez pas (ou ne pouvez pas) faire cela, alors ce qui suit fonctionnera:

SERVERUSER="<server username>"
ssh -l $SERVERUSER -tR 1080:127.0.0.1:$1 <server address> "Sudo ssh -Nl \$SERVERUSER -L $REMOTE:80:127.0.0.1:1080 localhost"
18
Brad Parks

Une solution simple est décrite sur la page officielle des développeurs de Paypal:

developer.Paypal.com - Test IPN local

L'astuce consiste à écrire un petit fichier HTML avec ce contenu:

<form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php">

<!-- start example variables: -->

<input type="hidden" name="SomePayPalVar" value="SomeValue1"/>
<input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/>
    
<!-- /end example variables -->

<input type="submit"/>
	
</form>

Pour obtenir les résultats réels, vous devez copier toutes les variables IPN envoyées par Paypal. Ces variables réelles peuvent être trouvées dans le compte Paypal, sous Historique IPN:

Histoire des IPN

Vous devez cliquer sur l'ID de message relatif, puis copier le contenu du "Message IPN" (ce sera quelque chose comme mc_gross = 27.00 & invoice = Test-1 & protection_eligibility = Inéligible & ...) qui doit être converti en champs de saisie masqués HTML. ____.]Par exemple:

<input type="hidden" name="mc_gross" value="27.00"/>
<input type="hidden" name="invoice" value="Test-1"/>
<input type="hidden" name="protection_eligibility" value="Ineligible"/>

....

Après avoir configuré toutes ces variables et modifié l'URL de l'action, vous pouvez ouvrir le fichier avec un navigateur, puis soumettre ce formulaire.

7
Mauro Mascia

Si http: // localhost ne valide pas, utilisez http://127.0.0.1

5

Cela devrait fonctionner sans problème, mais cela pourrait devenir difficile si vous envoyez des "URL non valides" pour les URL de retour et les URL de message IPN. Cela signifie que l'envoi de http: //localhost/cancelpaypal.php as cancelURL peut vous indiquer qu'il s'agit d'une URL non valide.

Cependant, je ne pense pas que cela devrait l'être.

Devoir ouvrir des ports de routeur ne serait nécessaire que pour IPN, car la redirection dans le flux normal est un en-tête "Emplacement:" standard, de sorte que votre navigateur doit pouvoir accéder au site (localhost).

3
jishi

Cela fonctionne le mieux, mais vous pouvez également configurer une entrée temporaire du DNS local. Il vous suffit de:

  1. ouvrez votre/etc/hosts
  2. ajoutez une nouvelle entrée: yourwebsite.com 127.0.0.1

Ainsi, lorsque la requête de votre navigateur pour le site Web sera extraite de votre 127.0.0.1, votre besoin de vider le DNS (/etc/init.d/nscd restart) est parfois nécessaire. 

et c'est tout, mais n'oubliez pas de supprimer l'entrée lorsque vous êtes prêt pour la production.

0
jamesjara