PayPal Checkout umfasst Zahlungslösungen von einfach bis robust, die es Händlern und Entwicklern ermöglichen, eine Integrationsoption auszuwählen, die für ihre Website und Kunden am besten geeignet ist.
Um Paypal Payment Gateway zu integrieren, müssen wir Folgendes tun:
1. Besitzen Sie ein PayPal-Geschäfts- oder Premier-Konto.
2. Erstellen Sie eine PayPal-App und erhalten Sie ein Zugriffstoken. Wenn wir eine PayPal-App erstellen, generiert PayPal einen Satz OAuth-Client-ID und geheime Schlüssel für die Anwendung. PayPal generiert diese Schlüssel sowohl für die PayPal-Sandbox als auch für die Live-Umgebung. Um ein Zugriffstoken zu erhalten, übergeben Sie die client-id:secret-Anmeldeinformationen im Authorization-Header. Wir verwenden das Zugriffstoken zur Authentifizierung, wenn wir REST-API-Anfragen stellen.
3. Um einen End-to-End-Test unseres Express Checkout mit In-Context-Integration durchzuführen, erstellen Sie sowohl Händler- als auch Käuferkonten im PayPal-Sandbox Umfeld.
https://www.sandbox.paypal.com/in/webapps/mpp/home
Händler: Wählen Sie den Kontotyp „Geschäft“ und geben Sie eine E-Mail-Adresse und ein Passwort ein.
Käufer: Wählen Sie den Kontotyp „Persönlich“ und geben Sie einen hohen PayPal-Saldo ein, z. B. 5000.
Sobald wir ein Paypal-Sandbox-Konto erstellt haben, klicken Sie auf den Link „Profil“ für dieses Konto und sehen Sie unter der Registerkarte „API-Anmeldeinformationen“ nach. Wir werden die folgenden Informationen haben;
- Paypal-API-Benutzername
- Paypal-API-Signatur
- Paypal-API-Passwort
Hinweis: Wenn wir bereit sind, live zu gehen, verwenden wir einfach die Anmeldeinformationen unseres echten PayPal-Kontos anstelle der Anmeldeinformationen unseres Sandbox-Kontos. Die Zugangsdaten finden Sie im Bereich „Mein Profil“ unter der linken Registerkarte „Meine Verkaufstools“ unter der Option „API-Zugriff“.
So handhaben Sie Paypal-Rückerstattungen in Rails:
Methode 1:
Paypal Rest API;
Für komplexere Händlerseiten sind direkte Aufrufe von PayPal-APIs für eine Express-Checkout-Integration möglicherweise eine geeignetere Integration.
REST-APIs — Wir können eine Express Checkout-Integration mithilfe von PayPal-REST-APIs entwickeln.
Um den Express Checkout mit dem In-Context-Flow zu integrieren;
https://developer.paypal.com/docs/api/
ODER
PayPal REST API Ruby SDK (paypal-sdk-rest gem):
Das PayPal REST SDK stellt Ruby-APIs zum Erstellen, Verarbeiten und Verwalten von Zahlungen bereit.
Installation:
Fügen Sie den Edelstein unserer Anwendung in Gemfile hinzu:
gem 'paypal-sdk-rest'
Und dann ausführen:
$-Bundle-Installation
Aufbau:
Schienen g paypal:sdk:install
Erstattet eine Transaktion:
Bei jeder Transaktion können wir eine Rückerstattung veranlassen (sowohl direkte als auch erfasste Zahlungen):
- Rückerstattung einer abgeschlossenen Direktzahlung (Verkauf)
- Eine autorisierte und erfasste Zahlung zurückerstatten (Erfassung)
Rückerstattung einer abgeschlossenen Zahlung (Verkauf):
Wenn wir eine abgeschlossene Zahlung oder einen Verkauf zurückerstatten müssen, geben Sie die Verkaufs-ID, die uns als Reaktion auf eine abgeschlossene Zahlung gegeben wurde, zusammen mit einer leeren JSON-Nutzlast für eine vollständige Rückerstattung und für Teilrückerstattungen an. Stattdessen können wir ein Betragsobjekt in die JSON-Nutzlast aufnehmen .
curl -v https://api.sandbox.paypal.com/v1/paids/sale/CARMAXYZC6136044L/refund -H "Content-Type:application/json" -H "Authorization: Bearer Access-Token" -d '{} '
Hinweis: Wir sollten alle anrufspezifischen Parameter, wie Token und IDs, durch unsere eigenen ersetzen.
Antwortstatus der Rückerstattung:
- ausstehend- Die Rückerstattung steht noch aus.
- vollendet- Die Rückerstattung wurde erfolgreich abgeschlossen.
- fehlgeschlagen- Die Rückerstattung ist fehlgeschlagen.
Eine erfasste Zahlung zurückerstatten;
Wir können eine eingezogene Zahlung auch zurückerstatten:
API: https://api.paypal.com/v1/zahlungen/capture/{capture_id}/refund
Hinweis: Wir müssen sowohl für vollständige als auch für teilweise Rückerstattungen ein Betragsobjekt angeben.
curl -v https://api.sandbox.paypal.com/v1/zahlungen/capture/CARMAXYZC6136044L/refund -H "Content-Type:application/json" -H "Authorization: Bearer Access-Token" -d '{ " amount": { "currency": "USD", "total": "50.54" }, "description": "Dies ist die Beschreibung der Erfassungsrückerstattung." }'
Referenz: https://developer.paypal.com
Methode 2:
Paypal-Rückerstattung über Active Merchant Gem:
ActiveMerchant-Integration: http://railscasts.com/episodes/145-integrating-active-merchant
In unserer Bewerbung;
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", : Passwort => „FXWU58S7KXFC6HBE“, :signature => „AGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu“ ) Ende
Erstattet eine Transaktion:
Werfen Sie einen Blick hinein paypal_common_api.rb Datei in Active Merchant Gem;
https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb
1. Für eine vollständige Rückerstattung gilt kein Betrag für den Betrag:
Gateway.refund nil, 'CARMAXYZC6136044L'
Dadurch wird :refund_type automatisch auf „Full“ gesetzt.
2. Für eine teilweise Rückerstattung überweisen Sie einfach den Betrag wie gewohnt:
Gateway.refund 100, „CARMAXYZC6136044L“
def Rückerstattung(Geld, Identifikation, Optionen = {}) Commit 'RefundTransaction', build_refund_request(Geld, Identifikation, Optionen) Ende
Ex:
Gateway.refund(nil,'CARMAXYZC6136044L') => Vollständige Rückerstattung.
Gateway.refund(798,'CARMAXYZC6136044L') => Teilweise Rückerstattung.
Referenz: http://www.rubydoc.info/github/Shopify/active_merchant/ActiveMerchant/Billing/PaypalCommonAPI
Methode 3:
Verwendung von Braintree Gem;
Braintree-Integration:
- Eröffnen Sie ein Braintree Sandbox-Konto.
https://www.braintreepayments.com/sandbox - Folgen Sie den Tutorials;
https://developers.braintreepayments.com/start/hello-server/ruby - Konfigurieren Sie die Umgebung und API-Anmeldeinformationen:
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"
- Schließen Sie die Integrations- und Sandbox-Tests ab.
Anforderungen:
- Der Transaktionsstatus muss „abgerechnet“ oder „abgerechnet“ sein.
- Der Rückerstattungsbetrag darf nicht höher sein als der verbleibende, nicht erstattete Betrag der ursprünglichen Transaktion.
- Die Transaktion kann nach vollständiger Rückerstattung nicht erneut erstattet werden.
Erstattet eine Transaktion:
Um eine Rückerstattung mit der API zu veranlassen, müssen wir nur eine Transaction.refund()-API-Anfrage ausführen und benötigen für die Rückerstattung lediglich eine Transaktions-ID. Optional können wir einen Rückerstattungsbetrag übergeben, wenn eine teilweise Rückerstattung erforderlich ist, und wir können eine order_id übergeben, wenn diese von der ursprünglichen Bestell-ID abweicht.
result = Braintree::Transaction.refund("the_transaction_id")
Komplette Rückerstattung:
result = Braintree::Transaction.refund("CARMAXYZC6136044L", nil)
Teilerstattung:
result = Braintree::Transaction.refund("CARMAXYZC6136044L", "40.00")
Ergebnis.Erfolg?
#=> wahr
result.transaction.amount.to_f
#=> 40,00
Hinweis: Für Transaktionen, die auf einem Treuhandkonto gehalten werden, sind nur vollständige Rückerstattungen zulässig (behalten Sie die Transaktionsgelder eines Unterhändlers, bis wir einen weiteren Anruf zur Freigabe tätigen). Eine teilweise Rückerstattung einer Treuhandtransaktion führt zu einem Validierungsfehler.
https://developers.braintreepayments.com/guides/braintree-marketplace/create/ruby#holding-funds-in-escrow