Valider les informations d'identification de l'utilisateur API - Rails, ActiveMerchant et PayPal Express passerelle

StackOverflow https://stackoverflow.com/questions/509021

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!

Était-ce utile?

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

et ici:
https://cms.paypal.com/us / cgi-bin /? & cmd = _render-content & content_id = développeur / e_howto_api_nvp_r_AddressVerify

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

https: // GitHub. com / Shopify / active_merchant / blob / cb72e0f9c58f57b1293e6e976229b26cfbfee6a8 / lib / active_merchant / facturation / passerelles / paypal / paypal_common_api.rb

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})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top