La convalida delle credenziali API dell'utente - Rotaie, ActiveMerchant, e PayPal Gateway espresso
-
21-08-2019 - |
Domanda
Sto costruendo un'applicazione mercato che utilizza PayPal Express. Ho un modulo per i venditori per inserire le loro credenziali API di PayPal, ma ho bisogno di un modo per convalidare loro facendo una sorta di chiamata a PayPal.
Sto utilizzando il PaypalExpressGateway in ActiveMerchant, e non vedo altro che i controlli di acquisto standard. C'è qualche tipo di null-operazione che può essere utilizzato?
Qualsiasi aiuto sarebbe molto apprezzato!
Soluzione
Per ragioni di sicurezza non c'è un modo per verificare se l'email è un conto paypal valido. Si può sempre fare una piccola transazione e quindi nullo se conto validità è veramente necessario.
Altri suggerimenti
Sto usando il TransactionSearch operazione per questo scopo. Specificando STARTDATE=2100-01-01 00:00:00
si traduce sostanzialmente in un no-op.
Sarà convalidare le credenziali per voi, senza richiedere alcun intervento aggiuntivo da parte del venditore.
Non ho la risposta personalmente. Ma so Ryan Bates di Railscasts.com ha recentemente dedicato sei (!) Gli episodi a ActiveMerchant e Paypal in particolare. Scopri episodi # 141 attraverso # 146 a railscasts.com .
Ok, dopo 4 ore ...
module ActiveMerchant #:nodoc: module Billing #:nodoc: class PaypalExpressGateway < Gateway def get_balance(options = {}) commit 'GetBalance', build_get_balance_request(options) end private def build_get_balance_request(options) xml = Builder::XmlMarkup.new :indent => 2 xml.tag! 'GetBalanceReq', 'xmlns' => PAYPAL_NAMESPACE do xml.tag! 'GetBalanceRequest', 'xmlns:n2' => EBAY_NAMESPACE do xml.tag! 'n2:Version', API_VERSION xml.tag! 'n2:ReturnAllCurrencies', '1' end end xml.target! end end end end class SellerMerchantValidator < ActiveModel::Validator def validate(record) paypal_attrs = ['paypal_api_username', 'paypal_api_password', 'paypal_api_signature'] if record.paypal_merchant? && (record.changed - paypal_attrs).size < record.changed.size # one of paypal_attrs changed response = record.gateway.get_balance unless response.params['balance'].present? record.errors[:base] << "Please check the PayPal details and make sure all three are entered correctly." end end end end
Grazie a Neils per l'idea di controllare il TransactionSearch.
Per favore fatemi sapere se c'è un modo migliore per verificare se qualsiasi del campo api cambiato.
C'è anche un invito a GetBalance nell'API. Alcuni codice di esempio
Sembra che il modo più semplice (più veloce? E).
PayPal ha un AddressVerify
API. Si conferma se un indirizzo postale e codice postale corrispondono a quelli del titolare del conto PayPal specificato. Sono in fase di attuazione sul nostro sito web in questo momento, in realtà.
Si può leggere di più su di esso qui:
https://www.x.com/docs/DOC-1162#id0862M0QH02L
A destra, quindi se si desidera verificare le credenziali di un utente usando ActiveMerchant, utilizzare il metodo transaction_search sul gateway
In questo esempio restituirà un successo (assicurati di inserire le credenziali di prova)
@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
login: @username,
password: @password,
signature: @signature,
test: true
)
gateway.transaction_search({start_date: DateTime.now})