Façons de gérer les remboursements PayPal dans Rails

PayPal Checkout comprend des solutions de paiement allant du simple au robuste qui permettent aux commerçants ainsi qu'aux développeurs de choisir l'option d'intégration la mieux adaptée à leur site Web et à leurs clients.

Afin d'intégrer Paypal Payment Gateway, nous devons procéder comme suit :

1. Avoir un compte PayPal professionnel ou Premier.
2. Créez une application PayPal et obtenez un jeton d'accès. Lorsque nous créons une application PayPal, PayPal génère un ensemble de client_id OAuth et de clés secrètes pour l'application. PayPal génère ces clés pour les environnements PayPal sandbox et Live. Pour obtenir un jeton d'accès, transmettez les informations d'identification client-id:secret dans l'en-tête Authorization. Nous utilisons le jeton d'accès pour l'authentification lorsque nous effectuons des requêtes API REST.
3. Pour effectuer un test de bout en bout de notre paiement express avec intégration en contexte, créez des comptes marchand et acheteur dans le Bac à sable PayPal environnement.
https://www.sandbox.paypal.com/in/webapps/mpp/home
Marchand : Sélectionnez le type de compte Business et saisissez une adresse e-mail et un mot de passe.
Acheteur : Sélectionnez le type de compte Personnel et saisissez un solde PayPal élevé, tel que 5 000.

Une fois que nous avons créé un compte sandbox Paypal, cliquez sur le lien « Profil » pour ce compte, regardez sous l'onglet « Informations d'identification API ». Nous aurons les informations suivantes :

  • Nom d'utilisateur de l'API Paypal
  • Signature API Paypal
  • Mot de passe de l'API Paypal

Remarque : Lorsque nous serons prêts à lancer la mise en ligne, nous utiliserons simplement les informations d'identification de notre véritable compte Paypal au lieu de celles de notre compte sandbox. Les informations d'identification se trouvent dans la zone « Mon profil » sous l'onglet de gauche « Mes outils de vente » sous l'option « Accès API ».

Comment gérer les remboursements Paypal dans Rails :

Méthode 1 :

API Rest Paypal ;

Pour les sites marchands plus complexes, les appels directs aux API PayPal pour une intégration Express Checkout peuvent constituer une intégration plus appropriée.
API REST — Nous pouvons développer une intégration Express Checkout à l'aide des API PayPal REST.

Pour intégrer le paiement express avec le flux In-Context ;
https://developer.paypal.com/docs/api/
OU
API REST PayPal SDK Ruby (gemme paypal-sdk-rest) :
Le SDK PayPal REST fournit des API Ruby pour créer, traiter et gérer les paiements.

Installation:
Ajoutez la gem à notre application, dans Gemfile :

gemme 'paypal-sdk-rest'

Et puis exécutez :

Installation du bundle $

Configuration:

rails g paypal:sdk:installer

Rembourse une transaction :
Toute transaction pour laquelle nous pouvons émettre un remboursement (paiements directs et capturés) :

  • Rembourser un paiement direct complété (vente)
  • Rembourser un paiement autorisé et capturé (capture)

Rembourser un paiement finalisé (vente) :
Si nous devons rembourser un paiement effectué ou une vente, fournissez l'identifiant de vente qui nous a été fourni en réponse à un paiement effectué ainsi qu'une charge utile JSON vide pour un remboursement complet et pour des remboursements partiels, nous pouvons à la place inclure un objet de montant dans la charge utile JSON. .

curl -v https://api.sandbox.paypal.com/v1/payments/sale/CARMAXYZC6136044L/refund -H "Content-Type:application/json" -H "Autorisation : jeton d'accès au porteur" -d '{} '

Remarque : Nous devons remplacer tous les paramètres spécifiques à l'appel, tels que les jetons et les identifiants, par les nôtres.
État de réponse du remboursement :

  • en attente- Le remboursement est en attente.
  • complété- Le remboursement a été effectué avec succès.
  • échoué- Le remboursement a échoué.

Rembourser un paiement capturé ;
Nous pouvons également rembourser un paiement capturé :

API : https://api.paypal.com/v1/payments/capture/{capture_id}/refund

 

Remarque : Nous devons fournir un montant objet pour les remboursements complets et partiels.

curl -v https://api.sandbox.paypal.com/v1/payments/capture/CARMAXYZC6136044L/refund -H "Content-Type:application/json" -H "Autorisation : jeton d'accès au porteur" -d '{ " montant": { "currency": "USD", "total": "50.54" }, "description": "Voici la description du remboursement de capture." }'

Référence: https://developer.paypal.com

Méthode 2 :

Remboursement Paypal en utilisant Active Merchant Gem :

Intégration ActiveMerchant : http://railscasts.com/episodes/145-integrating-active-merchant

Dans notre candidature ;

config/environment/development.rb config.after_initialize do ActiveMerchant::Billing::Base.mode = :test ::GATEWAY = ActiveMerchant::Billing::PaypalGateway.new( :login => "seller_1229899173_biz_api1.xyz.com", : mot de passe => "FXWU58S7KXFC6HBE", :signature => “AGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu" ) fin

Rembourse une transaction :
Jetez un œil à paypal_common_api.rb fichier dans Active Merchant Gem ;
https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb

1. Pour un remboursement intégral pass nul pour le montant :

passerelle.remboursement nul, 'CARMAXYZC6136044L'

Cela rendra automatiquement le :refund_type « Full ».
2. Pour un remboursement partiel, transmettez simplement le montant comme d'habitude :

passerelle.remboursement 100, 'CARMAXYZC6136044L'
def remboursement (argent, identification, options = {}) commit 'RefundTransaction', build_refund_request (argent, identification, options) fin

Ex:

Gateway.refund(nil,'CARMAXYZC6136044L') => Remboursement complet.
Gateway.refund(798,'CARMAXYZC6136044L') => Remboursement partiel.

Référence : http://www.rubydoc.info/github/Shopify/active_merchant/ActiveMerchant/Billing/PaypalCommonAPI


Méthode 3 :

Utilisation de Braintree Gem ;

Intégration Braintree :

  • Créez un compte Braintree Sandbox.
    https://www.braintreepayments.com/sandbox
  • Suivez les tutoriels ;
    https://developers.braintreepayments.com/start/hello-server/ruby
  • Configurez l'environnement et les informations d'identification de l'API :
    Braintree::Configuration.environment = :sandbox Braintree::Configuration.merchant_id = "use_your_merchant_id" Braintree::Configuration.public_key = "use_your_public_key" Braintree::Configuration.private_key = "use_your_private_key"
  • Terminez les tests d’intégration et de sandbox.

Exigences:

  • Le statut de la transaction doit être réglé ou réglé.
  • Le montant du remboursement ne peut pas être supérieur au montant restant non remboursé de la transaction initiale.
  • La transaction ne peut plus être remboursée après avoir été entièrement remboursée.

Rembourse une transaction :
Pour émettre un remboursement avec l'API, il nous suffit d'exécuter une requête API Transaction.refund() et nous n'avons besoin que d'un transaction_id pour rembourser. Facultativement, nous pouvons transmettre un montant de remboursement s'il existe une exigence de remboursement partiel, et nous pouvons transmettre un order_id s'il est différent de l'ID de commande d'origine.

résultat = Braintree::Transaction.refund("the_transaction_id")

Remboursement intégral:

résultat = Braintree::Transaction.refund("CARMAXYZC6136044L", nul)

Remboursement partiel:

résultat = Braintree::Transaction.refund("CARMAXYZC6136044L", "40.00")

résultat.succès ?
#=> vrai
résultat.transaction.montant.to_f
#=> 40,00

Remarque : Seuls les remboursements complets sont autorisés pour les transactions détenues dans Escrow (conservez les fonds de transaction d'un sous-commerçant jusqu'à ce que nous fassions un appel supplémentaire pour les libérer). Un remboursement partiel d'une transaction Escrow générera une erreur de validation.
https://developers.braintreepayments.com/guides/braintree-marketplace/create/ruby#holding-funds-in-escrow

LUBAIB CEEJEY
Développeur senior Ruby on Rails

Abonnez-vous pour les dernières mises à jour

Articles Similaires

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrench