Comment traiter les cartes de crédit avec PayPal Payments Pro en utilisant PHP

PayPal est l'une des plates-formes de traitement de paiement les plus populaires disponibles aujourd'hui pour plusieurs raisons. Sa facilité d'utilisation et sa connexion à la plate-forme eBay ne sont que la partie visible de l'iceberg. L'une de ses fonctionnalités les plus populaires est la possibilité de simplement vous connecter à votre compte PayPal pour effectuer des paiements, mais les marchands utilisant PayPal peuvent également accepter les cartes de crédit directement, comme le ferait une solution de compte marchand classique.. 

PayPal appelle cette solution Payments Pro, et je vais vous montrer exactement comment vous pouvez traiter des cartes de crédit directement avec l'API de PayPal à l'aide de l'API de leur service Web, Payments Pro..


Étape 1: Configuration de la structure du répertoire

La première chose que j'aime faire avec n'importe quel projet est de créer une structure de base organisée pour le projet. Dans ce cas, notre structure est très simple car notre projet ne comportera que 2 fichiers:

 Comme vous l'avez peut-être deviné, nous stockerons nos informations de configuration dans config.php, et nous gèrerons le code de traitement dans process-credit-card.php.


Étape 2: Configurez le fichier de configuration

Notre /includes/config.php Le fichier hébergera nos valeurs pour les informations d'API PayPal dont nous avons besoin, y compris l'URL du point final, la version de l'API et notre nom d'utilisateur, notre mot de passe et la signature de l'API que nous utiliserons.. 

 // Définit le bac à sable (mode test) sur true / false. $ sandbox = TRUE; // Définir la version et les informations d'identification de l'API PayPal. $ api_version = '85 .0 '; $ api_endpoint = $ sandbox? 'https://api-3t.sandbox.paypal.com/nvp': 'https://api-3t.paypal.com/nvp'; $ api_username = $ sandbox? 'SANDBOX_USERNAME_GOES_HERE': 'LIVE_USERNAME_GOES_HERE'; $ api_password = $ sandbox? 'SANDBOX_PASSWORD_GOES_HERE': 'LIVE_PASSWORD_GOES_HERE'; $ api_signature = $ sandbox? 'SANDBOX_SIGNATURE_GOES_HERE': 'LIVE_SIGNATURE_GOES_HERE';

Revoir le config.php code, vous pouvez voir que nous avons d’abord défini une variable pour $ bac à sable.  Pour l'instant, nous allons laisser cela à VRAI parce que nous voulons interagir avec les serveurs de test (sandbox) de PayPal à des fins de développement. Vous devrez vous rappeler de changer ceci en FAUX lorsque vous êtes prêt à déplacer votre projet sur un serveur live.

Ensuite, en fonction de la valeur de $ bac à sable nous définissons des valeurs pour d'autres variables pour nos informations d'API. Vous voudrez simplement remplir ces espaces réservés avec vos propres détails en conséquence. Nous sommes maintenant prêts à construire notre script de traitement de carte de crédit.


Étape 3: créer une demande d'API

Maintenant, nous pouvons commencer à construire notre process-credit-card.php page. La première chose à faire ici est d’inclure notre fichier de configuration.

 // Inclure le fichier de configuration require_once ('includes / config.php');

Ensuite, nous devons créer une chaîne paire paire nom-valeur qui inclut toutes les données nécessaires pour envoyer PayPal afin de traiter ce paiement. Une chaîne de paire nom-valeur ressemble à quelque chose que vous pourriez voir lors du transfert de données via des paramètres d'URL. Nous devons juste nous assurer que nos noms de paramètres sont en majuscules.

PARAM1 = valeur1 & PARAM2 = valeur2 & PARAM3 = valeur3… etc.

Alors, vous vous dites peut-être «Comment puis-je savoir quoi utiliser pour les noms de variables dans ma chaîne?» La bonne nouvelle est que PayPal fournit une très bonne documentation à ce sujet. Nous pouvons voir toutes les variables possibles que nous pouvons transmettre à PayPal, y compris les détails du client, les détails du poste de commande et les informations de carte de crédit. Certaines de ces informations sont nécessaires pour traiter un paiement, mais bon nombre des variables disponibles sont facultatives. Pour des raisons de démonstration, nous allons garder cela assez simple et simplement transmettre les informations requises.

Nous allons stocker tous nos paramètres de requête dans un tableau afin que nous puissions parcourir ce tableau afin de générer facilement notre chaîne NVP. Toutes les demandes nécessitent les paramètres suivants par défaut:

  • MÉTHODE - Le nom de l'appel API que vous effectuez.
  • UTILISATEUR - Le nom d'utilisateur de l'API
  • PWD - Le mot de passe de l'API
  • SIGNATURE - La signature de l'API
  • VERSION - La version de l'API

Ensuite, vous pouvez vous reporter à la documentation de PayPal pour toute demande d'API que vous souhaitez effectuer pour voir quels autres paramètres doivent être inclus. Pour les besoins de cette démonstration, notre tableau sera construit comme suit.

 // Stocke les paramètres de requête dans un tableau $ request_params = array ('METHOD' => 'DoDirectPayment', 'USER' => $ api_username, 'PWD' => $ api_password, 'SIGNATURE' => $ api_signature, 'VERSION' = > $ api_version, 'PAYMENTACTION' => 'Vente', 'IPADDRESS' => $ _SERVER ['REMOTE_ADDR'], 'CREDITCARDTYPE' => 'MasterCard', 'ACCT' => '5522340006063638', 'EXPDATE' => ' 022013 ',' CVV2 '=>' 456 ',' FIRSTNAME '=>' Testeur ',' LASTNAME '=>' Testerson ',' STREET '=>' 707 W. Bay Drive ',' CITY '=>' Largo ',' STATE '=>' FL ',' COUNTRYCODE '=>' US ',' ZIP '=>' 33770 ',' AMT '=>' 100.00 ',' CURRENCYCODE '=>' USD ',' DESC ' => 'Test Payments Pro');

Vous remarquerez que nous utilisons nos variables de configuration de config.php, et puis je charge simplement des données statiques pour les autres valeurs. Dans un projet standard, cependant, vous allez probablement renseigner ces valeurs avec des données de formulaire, des données de session ou une autre forme de données dynamiques..

Maintenant, nous pouvons simplement parcourir ce tableau pour générer notre chaîne NVP.

 // Boucle dans le tableau $ request_params pour générer la chaîne NVP. $ nvp_string = "; foreach ($ request_params as $ var => $ val) $ nvp_string. = '&'. $ var. '='. urlencode ($ val);

La valeur de $ nvp_string est maintenant:

METHOD = DoDirectPayment&USER = sandbo ***** e.com&PWD = 12 *** 74&SIGNATURE = AiKZ ****** 6W18v&VERSION = 85.0&PAYMENTACTION = Vente&IPADDRESS = 72.135.111.9&CREDITCARDTYPE = MasterCard&ACCT = 5522340006063638&EXPDATE = 022013&CVV2 = 456&Prénom = Testeur&LASTNAME = Testerson&STREET = 707 + W. + Bay + Drive&VILLE = Largo&ÉTAT = FL&COUNTRYCODE = US&ZIP = 33770&AMT = 100,00&CURRENCYCODE = USD&DESC = Test + Paiements + Pro

Cette chaîne correspond à ce que nous enverrons à PayPal pour notre demande..


Étape 4: envoyez la demande HTTP à PayPal

Maintenant que notre chaîne NVP est prête à fonctionner, nous devons l'envoyer au serveur PayPal pour qu'elle soit traitée en conséquence. Pour ce faire, nous allons utiliser les méthodes CURL de PHP.

 // Envoie une chaîne NVP à PayPal et enregistre la réponse $ curl = curl_init (); curl_setopt ($ curl, CURLOPT_VERBOSE, 1); curl_setopt ($ curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ curl, CURLOPT_TIMEOUT, 30); curl_setopt ($ curl, CURLOPT_URL, $ api_endpoint); curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ curl, CURLOPT_POSTFIELDS, $ nvp_string); $ result = curl_exec ($ curl); curl_close ($ curl);

Ici, vous pouvez voir que nous avons configuré CURL avec quelques options simples et que nous utilisons notre $ api_endpoint et $ nvp_string variables en conséquence.

Ces données seront envoyées à PayPal et nous recevrons la réponse de l'API dans notre $ résultat variable afin que nous puissions voir le résultat et envoyer l'utilisateur à une page de succès ou d'échec en fonction du succès ou non de l'appel.


Étape 5: Analyser la réponse de l'API

La valeur que nous retrouvons $ résultat À partir de l'étape précédente, vous obtiendrez une chaîne NVP identique à celle que nous avons générée et envoyée à PayPal. Lorsque nous exécutons notre script actuel, nous obtenons une réponse réussie qui ressemble à ceci:

TIMESTAMP = 2012% 2d04% 2d16T07% 3a59% 3a36Z & CORRELATIONID = 9eb40cd84a7d3 & ACK = Succès et VERSION = 85% 2e0 & BUILD = 2764190 & AMT = 100% 2e00 & CURRENCYCODE = USD & AVSCODE = X & CVVersion en cours.

Un moyen très simple d’analyser ce résultat est d’utiliser PHP parse_str () une fonction. Cela chargera toutes les données de réponse dans des variables PHP correspondant aux noms et aux valeurs renvoyés dans la réponse. Par exemple, si nous faisons ce qui suit:

 // Analyse la réponse de l'API $ nvp_response_array = parse_str ($ result);

Nous finirions par avoir accès aux variables PHP suivantes:

  • $ TIMESTAMP
  • $ CORRELATIONID
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ AMT
  • $ CURRENCYCODE
  • $ AVSCODE
  • $ CVV2MATCH
  • $ TRANSACTIONID

Nous pouvons ensuite utiliser ces variables pour présenter les informations à notre client, renseigner les valeurs dans les accusés de réception que nous souhaitons générer, mettre à jour les informations de la base de données ou tout ce que nous devons faire une fois la commande passée..

le $ ACK La valeur est ce qui nous dira si l'appel de l'API a réussi ou non. Valeurs pour $ ACK peut être:

  • Succès
  • SuccessWithWarning
  • Échec
  • FailureWithWarning
  • Vous pouvez simplement rediriger vos utilisateurs là où ils doivent aller et leur montrer des informations basées sur cette valeur.

    Un appel d'API défaillant entraînera des paramètres supplémentaires fournissant des informations sur la raison de l'échec de la transaction. Si je relance ce test avec un numéro de carte de crédit invalide, par exemple, je reçois la réponse suivante de PayPal:

TIMO 20card% 20number% 20and% 20type% 2e & L_SEVERITYCODE0 = Erreur & AMT = 100% 2e00 & CURRENCYCODE = USD

Maintenant, quand on utilise parse_str () nous nous retrouvons avec les variables PHP suivantes disponibles:

  • $ TIMESTAMP
  • $ CORRELATIONID
  • $ ACK
  • $ VERSION
  • $ BUILD
  • $ L_ERRORCODE0
  • $ L_SHORTMESSAGE0
  • $ L_LONGMESSAGE0
  • $ L_SEVERITYCODE0
  • $ AMT
  • $ CURRENCYCODE

Dans ce cas, $ ACK affiche un échec pour que nous sachions que l'appel n'a pas abouti et que nous pouvons vérifier les paramètres d'erreur pour plus de détails sur ce qui n'a pas fonctionné.

Option d'analyse de données supplémentaire

Bien que la méthode précédente d'analyse de la réponse fonctionne parfaitement, je préfère personnellement travailler avec des tableaux de données. En tant que tel, j'utilise la fonction suivante pour convertir la réponse PayPal en tableau.

 // Fonction permettant de convertir une chaîne NTP en tableau. NVPToArray ($ NVPString) $ proArray = array (); while (strlen ($ NVPString)) // nom $ keypos = strpos ($ NVPString, '='); $ keyval = substr ($ NVPString, 0, $ keypos); // valeur $ valuepos = strpos ($ NVPString, '&')? strpos ($ NVPString, '&'): strlen ($ NVPString); $ valval = substr ($ NVPString, $ keypos + 1, $ valuepos- $ keypos-1); // décodage de la réponse $ proArray [$ keyval] = urldecode ($ valval); $ NVPString = substr ($ NVPString, $ valuepos + 1, strlen ($ NVPString));  return $ proArray; 

Cela me permet de voir toutes les données de réponse disponibles en regardant simplement le contenu du tableau:

Si je relance mon script maintenant, le résultat suivant s'affiche à l'écran:

 Tableau ([TIMESTAMP] => 2012-04-16T08: 15: 41Z [CORRELATIONID] => 9a652cbabfdd9 [ACK] => Réussite [VERSION] => 85.0 [BUILD] => 2764190 [AMT] => 100.00 [CURRENCYCODE] = > USD [AVSCODE] => X [CVV2MATCH] => M [TRANSACTIONID] => 6VR832690S591564M)

Et si je devais encore causer une erreur, j'obtenais ce qui suit:

 Tableau ([TIMESTAMP] => 2012-04-16T08: 18: 46Z [CORRELATIONID] => 2db182b912a9 [ACK] => Échec [VERSION] => 85.0 [BUILD] => 2764190 [L_ERRORCODE0] => 10527 [L_SHORTMESSAGE0] = > Données non valides [L_LONGMESSAGE0] => Cette transaction ne peut pas être traitée. Veuillez entrer un numéro et un type de carte de crédit valides. [L_SEVERITYCODE0] => Erreur [AMT] => 100.00 [CURRENCYCODE] => USD)

Vous pouvez voir que c'est un tableau de résultats agréable et facile à naviguer qui contient tout ce dont nous avons besoin pour déplacer l'utilisateur dans notre application et mettre à jour les sources de données si nécessaire.


Conclusion

Comme vous pouvez le constater, le traitement des cartes de crédit à l'aide de PayPal Payments Pro est en réalité une procédure très simple. Il ne nécessite que quelques étapes standard pour travailler avec les services Web API, et une connaissance de base du travail avec des données de groupe peut également aider..

Bonne chance et bon codage!