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!

È stato utile?

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

e qui:
https://cms.paypal.com/us / cgi-bin /? & cmd = _render-content & content_id = sviluppatore / e_howto_api_nvp_r_AddressVerify

A destra, quindi se si desidera verificare le credenziali di un utente usando ActiveMerchant, utilizzare il metodo transaction_search sul gateway

https: // GitHub. com / Shopify / active_merchant / blob / cb72e0f9c58f57b1293e6e976229b26cfbfee6a8 / lib / active_merchant / fatturazione / gateway / paypal / paypal_common_api.rb

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})
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top