Valider les informations d'identification de l'utilisateur API - Rails, ActiveMerchant et PayPal Express passerelle
-
21-08-2019 - |
Question
Je construis une application de marché qui utilise PayPal Express. J'ai une forme pour les vendeurs d'entrer leurs informations d'identification de l'API PayPal, mais je besoin d'un moyen de les valider en faisant une sorte d'appel à PayPal.
J'utilise le PaypalExpressGateway dans ActiveMerchant, et je ne vois rien d'autre que les commandes d'achat standard. Y at-il sorte de nulle-opération qui peut être utilisé?
Toute aide serait grandement appréciée!
La solution
Pour des raisons de sécurité il n'y a pas moyen de vérifier si l'e-mail est un compte paypal valide. Vous pouvez toujours faire une petite transaction et non avenue si la validité du compte est vraiment nécessaire.
Autres conseils
J'utilise le TransactionSearch opération à cet effet. En spécifiant il en résulte essentiellement STARTDATE=2100-01-01 00:00:00
dans un no-op.
Il validera les informations d'identification pour vous, sans nécessiter aucune entrée supplémentaire du vendeur.
Je n'ai pas personnellement la réponse. Mais je sais que Ryan Bates de Railscasts.com a récemment consacré six épisodes (!) À ActiveMerchant et Paypal en particulier. Consultez les épisodes # 141 à # 146 à railscasts.com .
Ok, au bout de 4 heures ...
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
Merci à Neils pour l'idée de vérifier la TransactionSearch.
S'il vous plaît laissez-moi savoir s'il y a une meilleure façon de vérifier si l'un des champs de api changé.
Il y a aussi un appel à getbalance dans l'API. Certains exemples de code
On dirait que la façon la plus simple (et plus rapide?).
PayPal n'ont une API AddressVerify
. Elle confirme si une adresse postale et le code postal correspondent à ceux du titulaire du compte PayPal spécifié. Je suis en train de le mettre en œuvre sur notre site en ce moment, en fait.
Vous pouvez en lire davantage ici:
https://www.x.com/docs/DOC-1162#id0862M0QH02L
Droit, donc si vous voulez tester les informations d'identification d'un utilisateur à l'aide ActiveMerchant, utilisez la méthode transaction_search sur la passerelle
Cet exemple retourne un succès (assurez-vous de remplir vos informations d'identification de test)
@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
login: @username,
password: @password,
signature: @signature,
test: true
)
gateway.transaction_search({start_date: DateTime.now})