Validieren Benutzer-API-Anmeldeinformationen - Rails, ActiveMerchant und PayPal Express-Gateway
-
21-08-2019 - |
Frage
Ich baue eine Marktplatz-Anwendung, die PayPal Express verwendet. Ich habe für Verkäufer zur Eingabe eine Form bekam ihre PayPal-API-Anmeldeinformationen, aber ich brauche einen Weg, um sie zu validieren, indem eine Art Aufruf an PayPal zu machen.
Ich bin mit dem PaypalExpressGateway in ActiveMerchant, und ich weiß nicht, etwas anderes als die Standard-Kauf Kontrollen sehen. Gibt es irgendeine Art von null-Operation, die verwendet werden kann?
Jede Hilfe wäre sehr geschätzt werden!
Lösung
Aus Sicherheitsgründen ist es nicht eine Möglichkeit zu überprüfen, ob die E-Mail ein gültiges PayPal-Konto ist. Sie können jederzeit eine kleine Transaktion machen und es dann nichtig, wenn Konto Gültigkeit wirklich erforderlich ist.
Andere Tipps
Ich habe die Antwort nicht persönlich. Aber ich weiß, Ryan Bates von Railscasts.com hat sechs kürzlich gewidmet (!) Episoden ActiveMerchant und Paypal im Besonderen. Check out Episoden # 141 bis # 146 unter railscasts.com .
Ok, nach 4 Stunden ...
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
Dank Neils für die Idee der Transaction zu überprüfen.
Bitte lassen Sie mich wissen, ob es einen besseren Weg, um zu überprüfen, ob einer der api Feld geändert.
Es gibt auch einen Aufruf zur getBalance in der API. Einige Beispielcode
Sieht aus wie die einfachste (und schnellste?) Weg.
PayPal hat eine AddressVerify
API haben. Sie bestätigt, ob eine Postanschrift und Postleitzahl diejenigen des angegebenen PayPal Kontoinhaber übereinstimmen. Ich bin in dem Prozess es auf unserer Website jetzt in der Tat umzusetzen.
Sie können mehr darüber lesen Sie hier:
https://www.x.com/docs/DOC-1162#id0862M0QH02L
Richtig, also, wenn Sie ein Benutzeranmeldeinformationen ActiveMerchant testen möchten, verwenden Sie die transaction_search Methode auf dem Gateway
In diesem Beispiel wird einen Erfolg zurückkehren (vergewissern Sie sich in Ihrer Testanmeldeinformation füllen)
@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
login: @username,
password: @password,
signature: @signature,
test: true
)
gateway.transaction_search({start_date: DateTime.now})