Intégration PayPal, partie 2 API REST PayPal

Ce que vous allez créer

Dans ce tutoriel, je vais vous montrer comment accepter des paiements à l'aide de l'API REST de PayPal et de C #. Toutes les bibliothèques qu'ils ont pour différents langages tels que Ruby, Node.js, Python, PHP sont très similaires, de sorte que tous les concepts ici s'appliquent à toutes les bibliothèques..

Configuration du projet

Pour commencer, j'ai créé un projet MVC dans Visual Studio 2015: Fichier> Nouveau> Projet, et sélectionnez Application ASP.NET.

Sélectionnez le Application Web ASP.NET 5 Modèle, qui utilise le nouveau MVC 6. Il est similaire à MVC 5 si vous le connaissez bien..

Comme vous pouvez le voir sur la photo ci-dessous, j'ai ajouté quelques fichiers et dossiers à la solution. Les deux principales choses à noter sont:

  1. Dans Références J'ai supprimé le DNX Core 5.0 cible, ce qui nous permettrait d'exécuter ce projet sous Mac OS X ou Linux, mais la bibliothèque PayPal dont nous avons besoin n'a pas encore été mise à jour.. 
  2. J'ai ajouté le dossier "Services", où je vais envelopper la logique pour les appels PayPal, afin que nous puissions garder les contrôleurs agréables et brefs..

Installer le kit de développement PayPal avec NuGet. Clic-droit sur le nom de la solution et sélectionnez Gérer les paquets NuGet, puis recherchez "PayPal" et installez-le..

Créer une application PayPal

Pour intégrer notre application à PayPal, nous devons naviguer jusqu'à PayPal Developers, puis sous Applications de l'API REST, cliquer sur Créer une application.

Donnez un nom à votre application et choisissez un compte développeur Sandbox associé à l'application. À des fins de test, nous pouvons ensuite naviguer vers http://sandbox.paypal.com et nous connecter avec les informations de connexion du bac à sable pour voir le compte PayPal et les transactions..

Après avoir cliqué sur Créer une application, nous voyons l'écran de confirmation avec les jetons ID client et secret.

Copiez les jetons clientId et clientSecret dans appsettings.json, comme vous pouvez le voir dans la capture d'écran ci-dessous:

Test des paiements

PayPal fournit un environnement Sandbox pour les tests. Vous pouvez créer des comptes acheteurs et vendeurs de test à partir de là. Lorsque vous vous inscrivez, vous avez un compte Business dans le bac à sable qui est lié à votre compte développeur..

Pour créer un nouveau compte de test, connectez-vous au site Developer, puis cliquez sur le bouton Tableau de bord onglet et accédez à Bac à sable> Comptes. Ici vous pouvez voir la liste des comptes de test si vous en avez:

Si vous n'avez pas encore créé vos comptes de test, allez-y et cliquez sur Créer un compte, en haut à droite, pour créer au moins un compte personnel test et un compte professionnel test.

Après avoir créé les comptes de test, vous pouvez vous connecter via www.sandbox.paypal.com avec l'adresse e-mail de test et le mot de passe que vous avez attribués à chaque compte dans le formulaire précédent. Ceci est très utile pour vérifier que lorsque vous achetez quelque chose avec votre "compte test personnel", les fonds sont transférés sur votre "compte professionnel de test". Vous êtes maintenant prêt à intégrer PayPal et à vérifier que les fonds sont transférés d'un compte à un autre..

Paiement PayPal unique

PayPal propose différents modes de paiement. Vous pouvez utiliser les paiements directs par carte de crédit, ce qui signifie que vos clients ne peuvent pas voir la page de connexion PayPal ou le résumé, cela se passe sur votre site Web. Pour cela, vous devez être conforme à la norme PCI, et je vous recommande d’utiliser Stripe, car vous n’avez besoin que de SSL pour utiliser leur bibliothèque JavaScript. En revanche, pour accepter des paiements via des paiements PayPal, il faut suivre trois étapes:

  1. Spécifiez les informations de paiement pour créer un paiement.
  2. Obtenir l'approbation du paiement, en redirigeant votre client vers PayPal pour approuver la transaction.
  3. Effectuer le paiement pour capturer les fonds après que PayPal redirige votre client vers votre site Web.

Dans mon projet MVC, dans le Prestations de service dossier, j'ai créé la classe PayPalPaymentService où j'ai ajouté les méthodes suivantes:

public static Payment CreatePayment (chaîne baseUrl, intention de chaîne) // ### Contexte Api // Transmettez un objet 'APIContext' pour authentifier // l'appel et envoyer un identifiant de demande unique // (qui garantit la non-protection). Le SDK génère // un identifiant de demande si vous ne le transmettez pas explicitement. var apiContext = PayPalConfiguration.GetAPIContext (); // Ressource de paiement var paiement = nouveau Paiement () intention = intention, // "vente" ou "autorisation" payeur = nouveau Payeur () paiement_method = "paypal", transactions = GetTransactionsList (), redirect_urls = GetReturnUrls (baseUrl , intention) ; // Créer un paiement en utilisant un APIContext valide var createdPayment = payment.Create (apiContext); retour createdPayment;  Liste statique privée GetTransactionsList () // Une transaction définit le contrat d'un paiement // à quoi sert le paiement et qui le remplit. var transactionList = nouvelle liste(); // L'API de création de paiement nécessite une liste de transactions; // ajoute la transaction créée à une liste transactionList.Add (nouvelle transaction () description = "description de la transaction.", facture_numéro = GetRandomInvoiceNumber (), montant = nouveau montant () currency = "USD", total = "100.00" , // Le total doit être égal à la somme des frais d’expédition, des taxes et du sous-total. Details = new Détails () // Détails: Permet de spécifier les détails du montant d’un paiement. Tax = "15", shipping = "10", subtotal = "75", item_list = new ItemList () items = new List() new Item () name = "Nom de l’article", currency = "USD", prix = "15", quantité = "5", sku = "sku"); retour transactionList;  private statique RedirectUrls GetReturnUrls (chaîne baseUrl, intention de la chaîne) var returnUrl = intention == "vente"? "/ Home / PaymentSuccessful": "/ Home / AuthorizeSuccessful"; // URL de redirection // Ces URL détermineront le mode de redirection de l'utilisateur de PayPal // une fois qu'il aura approuvé ou annulé le paiement. renvoie new RedirectUrls () cancel_url = baseUrl + "/ Home / PaymentCancelled", return_url = baseUrl + returnUrl;  public static Payment ExecutePayment (chaîne paymentId, string payId) // ### Contexte Api // Transmettez un objet 'APIContext' pour authentifier // l'appel et envoyer un identifiant de demande unique // (qui garantit la non-protection). Le SDK génère // un identifiant de demande si vous ne le transmettez pas explicitement. var apiContext = PayPalConfiguration.GetAPIContext (); var paymentExecution = new PaymentExecution () pay_id = payId; var payment = new Payment () id = paymentId; // Exécute le paiement. var executePayment = payment.Execute (apiContext, paymentExecution); retour exécutéPayment; 

Quelques paramètres sont passés dans cet appel:

  • Intention: Trois valeurs possibles: "vente" pour les paiements immédiats, "autoriser" pour autoriser un paiement à enregistrer ultérieurement, ou "commande" pour créer une commande. Quand vous obtenez le autorisation pour qu'un paiement soit capturé plus tard, vous avez 3 jours garantis, bien que vous puissiez essayer de capturer le paiement jusqu'à 29 jours plus tard.
  • Payeur: Source des fonds pour ce paiement, méthode de paiement utilisée: paiement PayPal, carte de débit direct ou carte de crédit directe. 
  • Transactions: Ceci est utilisé pour spécifier le montant du paiement et éventuellement les éléments payés. Vous pouvez également spécifier le sous-total, l'expédition et les taxes si nécessaire.
  • URL de redirection: Spécifiez l'URL vers laquelle PayPal redirigera vos clients après une transaction afin de pouvoir mettre à jour votre base de données et afficher un message de confirmation..

Les fonctions précédentes peuvent être utilisées depuis votre contrôleur comme ceci:

public IActionResult CreatePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "vente"); renvoyer Redirect (payment.GetApprovalUrl ());  public IActionResult PaymentCancelled () // TODO: Traite le retour du paiement annulé RedirectToAction ("Error");  public IActionResult PaymentSuccessful (chaîne paymentId, jeton de chaîne, chaîne PayerID) // Exécuter Paiement var paiement = PayPalPaymentService.ExecutePayment (paymentId, PayerID); retourner Voir (); 

Comme vous pouvez le constater, j'ai créé trois actions:

  • CreatePayment: C'est l'action qui déclenche le paiement. Il appelle PayPal pour créer le paiement, puis redirige l'utilisateur vers PayPal pour approuver la transaction..
  • PaiementSuccès: Il s’agit de l’action par laquelle PayPal redirige notre client après un paiement réussi. À ce stade, nous pouvons exécuter le paiement pour que les fonds soient transférés sur notre compte marchand..
  • PaiementAnnulé: Cette action est l'endroit où l'utilisateur est redirigé depuis PayPal s'il annule le processus d'approbation. À ce stade, vous voudrez probablement donner la possibilité au client de réessayer ou de vous contacter..

Autoriser un paiement à saisir plus tard

Ce scénario est très similaire au cas précédent. Vous pouvez utiliser cette méthode si vous essayez de prendre des précommandes pour un produit qui n'est pas encore disponible. Les étapes pour obtenir ce paiement sont les suivantes:

  1. Autoriser le paiement: Le paramètre 'intention' de cet appel doit être 'autoriser'.
  2. Capturer le paiement: Gardez à l'esprit que les autorisations sont garanties jusqu'à 3 jours, bien que vous puissiez tenter de capturer un paiement jusqu'à 29 jours..

Afin d'implémenter ce type de paiement, je n'ai ajouté qu'une nouvelle méthode à la classe PayPalPaymentService pour capturer le paiement:

statique Capture Capture publique publique (chaîne paymentId) var apiContext = PayPalConfiguration.GetAPIContext (); var payment = Payment.Get (apiContext, paymentId); var auth = payment.transactions [0] .related_resources [0] .authorization; // Spécifie un montant à capturer. En définissant 'is_final_capture' sur true, tous les fonds restants détenus par l'autorisation seront libérés de l'instrument de financement. var capture = new Capture () montant = new Amount () currency = "USD", total = "4.54", is_final_capture = true; // Capturez un paiement autorisé en postant à l'adresse // URI v1 / paiements / autorisation / nom_autorisation / capture var responseCapture = auth.Capture (apiContext, capture); retour réponseCapture; 

Puis, depuis HomeController, j'ai ajouté deux nouvelles actions pour afficher ce type de paiement:

public IActionResult AuthorizePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "autoriser"); renvoyer Redirect (payment.GetApprovalUrl ());  public IActionResult AuthorizeSuccessful (chaîne paymentId, jeton de chaîne, chaîne PayerID) // Capture Payment var capture = PayPalPaymentService.CapturePayment (paymentId); retourner Voir (); 
  • AuthorizePayment est l'action déclenchant le paiement. C'est très similaire à la fonction 'CreatePayment' précédente, mais nous passons 'autoriser' comme paramètre d'intention dans ce cas..
  • AutoriserSuccès est l'action où votre client sera redirigé après avoir approuvé le paiement sur PayPal. À ce stade, je capture le paiement, mais vous pouvez enregistrer le paymentId dans votre base de données et capturer le paiement lorsque vous devez.

Dans ces exemples de code, par souci de simplicité, j'ai codé en dur les valeurs des variables de paiement. Dans votre application réelle, vous les incorporerez probablement dans des méthodes qui prennent toutes ces valeurs sous forme de variables afin que tout puisse être défini dynamiquement et réutilisé..

Abonnements

Cela s'appelle "Plans de facturation" dans PayPal. Vous pouvez créer des plans de paiement récurrents et inscrire vos clients dans un plan de facturation en créant un accord de facturation. À l'aide de l'API REST PayPal, vous pouvez créer, mettre à jour ou supprimer des calendriers de facturation. C’est quelque chose que vous pourriez utiliser si vous voulez créer un panneau d’administrateur pour gérer ces choses pour votre entreprise..

Les étapes pour créer des frais récurrents pour vos clients seraient les suivantes:

  1. Créer un calendrier de facturation et l'activer. Une fois que vous avez créé un plan de facturation, il est dans l'état CREATED. Il doit être activé en faisant une requête PATCH.
  2. Créer un accord de facturation et l'exécuterRemarque: La réponse à l’appel de Créer un accord de facturation inclut les liens vers approbation_url et exécution_url. Nous devons obtenir l'approbation de l'accord de facturation, puis l'exécuter..

Plans de facturation

Créer un calendrier de facturation

Créez un calendrier de facturation définissant les périodes de facturation. Ceci est un résumé des paramètres que nous devons passer pour créer un plan.

  • Prénom: Nom du calendrier de facturation.
  • La description: Description du calendrier de facturation.
  • Type: Les valeurs autorisées sont 'FIXED' pour un nombre défini de paiements récurrents ou 'INFINITE' pour un plan qui se répète jusqu'à son annulation manuelle..
  • Préférences du marchand: Ceci est un objet qui spécifie des préférences telles que les frais d'installation, le nombre maximal de tentatives d'échec d'un paiement, l'URL de retour, l'URL d'annulation, l'URL de notification, où PayPal redirige l'utilisateur après un paiement..
  • Définitions de paiement: Tableau de définitions de paiement pour ce plan. Normalement, ce tableau aurait une ou deux définitions de paiement. Si nous voulons offrir un essai gratuit ou un essai à un prix réduit, nous établissons deux définitions de paiement. La première sera la définition de la période d’essai, et la seconde le paiement régulier. Les propriétés pour une définition de paiement sont prénom, type (essai ou régulier), la fréquence (jour, semaine, mois, année), intervalle de fréquence (si nous définissons la fréquence sur 'SEMAINE' et l'intervalle de fréquence sur '1', nous définissons un paiement hebdomadaire), montant facturer le client, et cycles est le nombre total de paiements. Modèles de charge est de spécifier le coût d'expédition et la taxe additionnelle à la valeur du plan.

Voici un extrait de code qui montre comment créer un plan de facturation:

// Définissez le plan et attachez les définitions de paiement et les préférences du commerçant. // Plus d'informations: https://developer.paypal.com/webapps/developer/docs/api/#create-a-plan var billingPlan = nouveau plan name = "Tuts + Plus", description = "plan mensuel pour les cours. ", type =" fixed ", // Définit les préférences du commerçant. // Plus d'informations: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("0"), // $ 0 return_url = "returnURL ", // Récupérer de la configuration cancel_url =" cancelURL ", // Récupérer de la configuration auto_bill_amount =" YES ", initial_fail_amount_action =" CONTINUE ", max_fail_attempts =" 0 ", payment_definitions = new List // Définissez un plan d'essai qui facturera seulement 9,99 $ pour le // premier mois. Après cela, le plan standard prendra le relais pour les // 11 mois restants de l'année. new PaymentDefinition () name = "Plan d'essai", type = "TRIAL", fréquence = "MOIS", frequency_interval = "1", montant = GetCurrency ("0"), // Gratuit pour le 1er mois cycles = "1 ", charge_models = nouvelle liste new ChargeModel () type = "TAX", amount = GetCurrency ("1.65") // Si nous devons facturer des taxes, new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99") / / S'il faut facturer les frais d'expédition, // Définissez le plan de paiement standard. Cela représentera un // plan mensuel de 19,99 $ US facturé une fois par mois pendant 11 mois. new PaymentDefinition name = "Plan standard", type = "REGULIER", fréquence = "MOIS", frequency_interval = "1", montant = GetCurrency ("15.00"), //> REMARQUE: pour les plans de type 'IFNINITE', ' cycles 'doit être 0 pour un objet' REGULAR "PaymentDefinition '. cycles =" 11 ", charge_models = new List new ChargeModel type = "TAX", amount = GetCurrency ("2.47"), new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99"); // Obtenir la configuration de PayPal var apiContext = PayPalConfiguration.GetAPIContext (); // Créer un plan plan.Créer (apiContext);

Un calendrier de facturation nouvellement créé est dans l'état CREATED. Activez-le à l'état ACTIVE pour que vos clients puissent souscrire au plan. Pour activer le plan, nous devons faire une demande PATCH:

// Activer le plan var patchRequest = new PatchRequest () new Patch () op = "replace", path = "/", value = new Plan () state = "ACTIVE"; plan.Update (apiContext, patchRequest);

Comme vous pouvez le constater, les bibliothèques PayPal encapsulent directement leur API REST, ce qui est bien, mais l’API est également très complexe comparée à d’autres comme Stripe. Pour cette raison, il est vraiment judicieux de regrouper toutes les communications PayPal dans des objets avec des API plus claires et plus simples pour nos applications. Ici vous pouvez voir à quoi ressemble ce code enveloppé dans plusieurs fonctions prenant des paramètres:

Plan statique public CreatePlanObject (chaîne planName, chaîne planDescription, chaîne returnUrl, chaîne cancelUrl, chaîne de fréquence, int frequencyInterval, planPrice décimal, decimal shippingAmount = 0, virgal taxPercentage = 0, bool trial = false, int trialLength = 0, decimal taxPrice = 0 ) // Définissez le plan et attachez les définitions de paiement et les préférences du commerçant. // Plus d'informations: https://developer.paypal.com/docs/rest/api/payments.billing-plans/ renvoyer un nouveau plan name = nomPlan, description = planDescription, type = PlanType.Fixed, // définir le commerçant préférences. // Plus d'informations: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("1"), return_url = returnUrl, cancel_url = cancelUrl , auto_bill_amount = "YES", initial_fail_amount_action = "CONTINUE", max_fail_attempts = "0", payment_definitions = GetPaymentDefinitions (trial, durée, trialPrice, fréquence, fréquence, fréquenceInterval, planPrice, shippingPrix, shippingAmount, taxPercentage);  Liste statique privée GetPaymentDefinitions (essai bool, int trialLength, essai décimal, fréquence de chaîne, int frequency, intervalle décimal, prix décimal, montant décimal, montant d'expédition, montant décimal, taxePercentage) var paymentDefinitions = new List(); if (trial) // Définit un plan d'essai qui facturera 'trialPrice' pour 'trialLength' // Après cela, le plan standard prendra le relais. paymentDefinitions.Add (new PaymentDefinition () name = "Trial", type = "TRIAL", fréquence = fréquence, fréquence_interval = frequencyInterval.ToString (), amount = GetCurrency (trialPrice.ToString ()), cycles = trialLength.ToString ( ), charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage));  // Définissez le plan de paiement standard. Il représentera une "fréquence" (mensuelle, etc.) // planifiez pour "planPrice" qui facture "planPrice" (une fois par mois) pour # cycles. var regularPayment = new PaymentDefinition name = "Plan standard", type = "REGULAR", fréquence = fréquence, fréquence_interval = frequencyInterval.ToString (), amount = GetCurrency (planPrice.ToString ()), //> REMARQUE: pour 'IFNINITE 'plans' type, 'cycles' doit être 0 pour un objet 'REGULAR "PaymentDefinition'. cycles =" 11 ", charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage); paymentDefinitions.Add (regularPayment); renvoyer paymentDefinitions; private statique liste GetChargeModels (prix décimal, prix décimal, montant d'expédition, montant décimal de taxe) // Création du plan de facturation var chargeModels = nouvelle liste(); if (shippingAmount> 0) chargeModels.Add (new ChargeModel () type = "SHIPPING", amount = GetCurrency (shippingAmount.ToString ()));  if (taxPercentage> 0) chargeModels.Add (new ChargeModel () type = "TAX", montant = GetCurrency (String.Format ("0: f2", planPrice * taxePercentage / 100)));  return chargeModels; 

Mettre à jour le calendrier de facturation

Vous pouvez mettre à jour les informations d'un calendrier de facturation existant en effectuant une demande 'PATCH'. C'est une fonction qui enveloppe cet appel:

public static void UpdateBillingPlan (string planId, chemin de la chaîne, valeur de l'objet) // Jetons d'authentification PayPal var apiContext = PayPalConfiguration.GetAPIContext (); // Récupérer le plan var plan = Plan.Get (apiContext, planId); // Activer le plan var patchRequest = new PatchRequest () new Patch () op = "replace", chemin = chemin, valeur = valeur; plan.Update (apiContext, patchRequest); 

Pour mettre à jour la description du calendrier de facturation, nous pouvons appeler cette fonction et transmettre les paramètres appropriés:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", chemin: "/", valeur: new Plan description = "nouvelle description");

Supprimer un calendrier de facturation

Idéalement, lorsque vous ne souhaitez pas accepter de nouveaux clients dans un plan de facturation, vous devez le mettre à jour dans l'état "INACTIF". Cela ne va pas affecter les accords de facturation existants sur ce plan. Cela peut être fait simplement en appelant la fonction UpdateBillingPlan:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", chemin: "/", valeur: new Plan state = "INACTIVE");

Contrats de facturation

Créer un accord de facturation

Une fois que vous avez créé un ou plusieurs plans de facturation, vous souhaitez que les clients s’inscrivent pour vos plans d’abonnement. Pour ce faire, vous devez collecter les informations de votre client et adresser une demande à PayPal. Pour pouvoir tester cette fonctionnalité, j'ai ajouté plusieurs actions à HomeController:

public IActionResult Subscribe () var plan = PayPalSubscriptionsService.CreateBillingPlan ("Plan Tuts +", "Plan de test pour cet article", GetBaseUrl ()); var subscription = PayPalSubscriptionsService.CreateBillingAgreement (plan.id, nouvelle PayPal.Api.ShippingAddress city = "London", line1 = "ligne 1", postal_code = "SW1A 1AA", country_code = "GB", "Pedro Alonso", "Tuts +", DateTime.Now); renvoyer Redirect (subscription.GetApprovalUrl ());  public IActionResult SubscribeSuccess (jeton de chaîne) // Exécuter un accord approuvé PayPalSubscriptionsService.ExecuteBillingAgreement (jeton); retourner Voir ();  public IActionResult SubscribeCancel (chaîne de caractères) // TODO: Gestion des retours de paiement annulés RedirectToAction ("Error"); 
  • Souscrire: C'est la première action qui s'appelle. Il crée un plan de facturation test, puis un accord de facturation (abonnement) à ce plan est créé et l'utilisateur est redirigé vers PayPal pour confirmer le paiement..
  • S'abonnerSuccès: Cette action est celle utilisée comme "URL de retour" après un abonnement réussi. L'identifiant de jeton d'accord est passé dans la chaîne de requête et nous utilisons ce jeton pour exécuter l'accord de facturation et le rendre actif..
  • SouscrireAnnuler: Cette action est celle utilisée comme "Annuler l'URL". Si pour une raison quelconque le paiement échoue ou si votre client annule le paiement sur PayPal, l'utilisateur est amené à cette action et vous devez le gérer. Peut-être offrir la possibilité d'essayer à nouveau.

Comme vous pouvez le constater dans l'extrait de code précédent, j'ai intégré la plupart des fonctionnalités à plusieurs méthodes. Le premier est "CreateBillingPlan" qui a été expliqué dans la section précédente. Le second est "CreateBillingAgreement", utilisé pour abonner un utilisateur à un plan:

accord statique public CreateBillingAgreement (string planId, ShippingAddress shippingAddress, nom de la chaîne, description de la chaîne, DateTime startDate) // Jetons d'authentification PayPal var apiContext = PayPalConfiguration.GetAPIContext (); accord var = nouvel accord () nom = nom, description = description, date_début = dateDébut.ToString ("aaaa-MM-jjTHH: mm: ss") + "Z", payeur = nouveau Payeur () payment_method = "paypal ", plan = new Plan () id = planId, shipping_address = shippingAddress; var createdAgreement = agreement.Create (apiContext); return createdAgreement; 

La troisième méthode est "ExecuteBillingAgreement". Après une approbation d'abonnement réussie, nous utilisons le jeton renvoyé pour activer l'abonnement:

public void statique ExecuteBillingAgreement (chaîne de caractères) // Jetons d'authentification PayPal var apiContext = PayPalConfiguration.GetAPIContext (); accord var = nouvel accord () token = token; var executeAgreement = agreement.Execute (apiContext); 

Suspendre un accord de facturation

Utilisez cette méthode pour suspendre un accord:

public statique statique SuspendBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Suspend (apiContext, new AgreementStateDescriptor () note = "Suspension de l'accord"); 

Réactiver un accord de facturation

Celui-ci est vraiment similaire au précédent:

public statique statique ReactivateBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.ReActivate (apiContext, new AgreementStateDescriptor () note = "Réactivation de l'accord"); 

Annuler un accord de facturation

Utilisez cette fonction pour annuler un plan:

public static voic CancelBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Cancel (apiContext, new AgreementStateDescriptor () note = "Annulation de l’accord"); 

Mettre à jour un accord de facturation

Cette option est très limitée et ce que j'attendrais de cet appel, c'est la possibilité de modifier le plan de souscription pour mettre à niveau ou déclasser un client. Ceci n'est pas pris en charge dans un appel unique comme dans Stripe. Vous devez gérer ce scénario en annulant le contrat actuel et en en créant un nouveau pour les mises à niveau ou les déclassements. Ce n'est pas idéal, mais cela pourrait changer à l'avenir.

Conclusion

Ceci est une vue d'ensemble des fonctions les plus courantes que les personnes utilisent pour s'intégrer à PayPal. Leur API est bien plus importante que les méthodes d'intégration expliquées dans cet article. Vous pouvez également émettre des remboursements et des remboursements partiels. De nombreuses options sont également disponibles pour les cas d'extrémité dans les exemples traités dans cet article. Si vous souhaitez obtenir plus de détails sur une intégration spécifique, veuillez laisser une suggestion dans les commentaires..