PayPal Checkout include soluzioni di pagamento che vanno da semplici a robuste che consentono ai commercianti e agli sviluppatori di scegliere un'opzione di integrazione che può essere la più adatta al loro sito Web e ai loro clienti.
Per integrare Paypal Payment Gateway, dobbiamo fare quanto segue:
1. Avere un conto Business o Premier PayPal.
2. Crea un'app PayPal e ottieni un token di accesso. Quando creiamo un'app PayPal, PayPal genera un set di client_id OAuth e chiavi segrete per l'applicazione. PayPal genera queste chiavi sia per la sandbox PayPal che per gli ambienti Live. Per ottenere un token di accesso, passare le credenziali client-id:secret nell'intestazione Autorizzazione. Utilizziamo il token di accesso per l'autenticazione quando effettuiamo richieste API REST.
3. Per eseguire un test end-to-end del nostro Pagamento rapido con l'integrazione nel contesto, crea sia l'account commerciante che quello acquirente nel Sandbox PayPal ambiente.
https://www.sandbox.paypal.com/in/webapps/mpp/home
Mercante : Seleziona il tipo di account Business e inserisci un indirizzo email e una password.
Acquirente: Seleziona il tipo di conto Personale e inserisci un saldo PayPal elevato, ad esempio 5000.
Una volta creato l'account sandbox Paypal, quindi fare clic sul collegamento "Profilo" per quell'account, guardare nella scheda "Credenziali API". Avremo le seguenti informazioni;
- Nome utente API Paypal
- Firma API Paypal
- Password API Paypal
Nota: quando saremo pronti per andare in diretta utilizzeremo semplicemente le credenziali del nostro conto PayPal reale invece di quelle del nostro account sandbox. Le credenziali possono essere trovate nell'area "Il mio profilo" nella scheda a sinistra "I miei strumenti di vendita" sotto l'opzione "Accesso API"
Come gestire i rimborsi Paypal in Rails:
Metodo 1:
API di resto Paypal;
Per i siti di commercianti più complessi, le chiamate dirette alle API PayPal per l'integrazione del Pagamento rapido potrebbero rappresentare un'integrazione più appropriata.
API REST — Possiamo sviluppare un'integrazione per il pagamento rapido utilizzando le API REST di PayPal.
Integrare il Checkout Express con il flusso In-Context;
https://developer.paypal.com/docs/api/
O
PayPal REST API Ruby SDK (gemma paypal-sdk-rest):
PayPal REST SDK fornisce API Ruby per creare, elaborare e gestire i pagamenti.
Installazione:
Aggiungi la gemma alla nostra applicazione, in Gemfile:
gemma 'paypal-sdk-rest'
E poi esegui:
Installazione del pacchetto $
Configurazione:
rotaie g paypal:sdk:install
Rimborsa una transazione:
Possiamo emettere un rimborso per qualsiasi transazione (sia pagamenti diretti che acquisiti):
- Rimborsare un pagamento diretto completato (vendita)
- Rimborsare un pagamento autorizzato e acquisito (cattura)
Rimborsare un pagamento completato (vendita):
Se dobbiamo rimborsare un pagamento completato o una vendita, fornire l'ID di vendita fornitoci in risposta a un pagamento completato insieme a un payload JSON vuoto per un rimborso completo e per rimborsi parziali, possiamo invece includere un oggetto importo nel payload JSON .
curl -v https://api.sandbox.paypal.com/v1/payments/sale/CARMAXYZC6136044L/refund -H "Tipo di contenuto:application/json" -H "Autorizzazione: token di accesso al portatore" -d '{} '
Nota: dovremmo sostituire tutti i parametri specifici della chiamata, come token e ID, con i nostri.
Stato di risposta del rimborso:
- in attesa di- Il rimborso è in sospeso.
- completato- Il rimborso è stato completato con successo.
- fallito- Il rimborso non è riuscito.
Rimborsare un pagamento acquisito;
Possiamo anche rimborsare un pagamento catturato:
API: https://api.paypal.com/v1/payments/capture/{capture_id}/refund
Nota: dobbiamo fornire un oggetto relativo all'importo sia per i rimborsi totali che per quelli parziali.
curl -v https://api.sandbox.paypal.com/v1/payments/capture/CARMAXYZC6136044L/refund -H "Tipo di contenuto:application/json" -H "Autorizzazione: token di accesso al portatore" -d '{ " amount": { "currency": "USD", "total": "50.54" }, "description": "Questa è la descrizione del rimborso acquisito." }'
Riferimento: https://developer.paypal.com
Metodo 2:
Rimborso Paypal utilizzando Active Merchant Gem:
Integrazione ActiveMerchant: http://railscasts.com/episodes/145-integrating-active-merchant
Nella nostra applicazione;
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", : password => "FXWU58S7KXFC6HBE", :signature => “AGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu" ) fine
Rimborsa una transazione:
Dai un'occhiata paypal_common_api.rb archiviare nella gemma del commerciante attivo;
https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb
1. Per un rimborso completo pass zero per l'importo:
gateway.rimborso nullo, 'CARMAXYZC6136044L'
Ciò renderà automaticamente :refund_type "Full".
2. Per un rimborso parziale basta trasferire l'importo come al solito:
gateway.rimborso 100, 'CARMAXYZC6136044L'
def rimborso(denaro, identificazione, opzioni = {}) commit 'RefundTransaction', build_refund_request(denaro, identificazione, opzioni) end
Ex:
Gateway.refund(nil,'CARMAXYZC6136044L') => Rimborso completo.
Gateway.refund(798,'CARMAXYZC6136044L') => Rimborso parziale.
Riferimento: http://www.rubydoc.info/github/Shopify/active_merchant/ActiveMerchant/Billing/PaypalCommonAPI
Metodo 3:
Utilizzando la gemma Braintree;
Integrazione Braintree:
- Registrati per un account Braintree Sandbox.
https://www.braintreepayments.com/sandbox - Segui i tutorial;
https://developers.braintreepayments.com/start/hello-server/ruby - Configura l'ambiente e le credenziali 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"
- Completa l'integrazione e il test sandbox.
Requisiti:
- Lo stato della transazione deve essere regolato o in liquidazione.
- L'importo del rimborso non può essere superiore all'importo rimanente non rimborsato della transazione originale.
- La transazione non può essere rimborsata nuovamente dopo essere stata completamente rimborsata.
Rimborsa una transazione:
Per emettere un rimborso con l'API, dobbiamo solo eseguire una richiesta API Transaction.refund() e richiedere solo un Transaction_ID per il rimborso. Facoltativamente, possiamo trasferire l'importo del rimborso se è richiesto un rimborso parziale e possiamo trasmettere un order_id se è diverso dall'ID dell'ordine originale.
risultato = Braintree::Transaction.refund("the_transaction_id")
Rimborso completo:
risultato = Braintree::Transaction.refund("CARMAXYZC6136044L", zero)
Rimborso parziale:
risultato = Braintree::Transaction.refund("CARMAXYZC6136044L", "40.00")
risultato.successo?
#=> vero
risultato.transazione.importo.a_f
#=> 40,00
Nota: sono consentiti solo rimborsi completi per le transazioni trattenute in deposito a garanzia (trattenere i fondi delle transazioni di un sub-commerciante fino a quando non effettueremo un'ulteriore chiamata per rilasciarli). Un rimborso parziale di una transazione di deposito a garanzia genererà un errore di convalida.
https://developers.braintreepayments.com/guides/braintree-marketplace/create/ruby#holding-funds-in-escrow