Pergunta

Estou construindo uma aplicação de mercado que usa PayPal Express. Eu tenho um formulário para os vendedores para introduzir as suas credenciais da API do PayPal, mas eu preciso de uma maneira de validá-los, fazendo uma espécie de chamada para PayPal.

Eu estou usando o PaypalExpressGateway em ActiveMerchant, e eu não vejo outra coisa senão os controles de compra padrão. Existe algum tipo de null-operação que pode ser usado?

Qualquer ajuda seria muito apreciada!

Foi útil?

Solução

Por razões de segurança, não há uma maneira de verificar se o e-mail é uma conta paypal válido. Você sempre pode fazer uma pequena transação e, em seguida, anulá-lo se validade conta é realmente necessário.

Outras dicas

Eu estou usando o TransactionSearch operação para esta finalidade. Especificando STARTDATE=2100-01-01 00:00:00 que basicamente resulta em uma-op não.

Ele irá validar as credenciais para você, sem necessidade de qualquer entrada adicional do vendedor.

Eu não tenho a resposta pessoalmente. Mas eu sei que Ryan Bates de Railscasts.com dedicou recentemente seis (!) Episódios para ActiveMerchant e Paypal em particular. Confira episódios Nº 141 até # 146 em railscasts.com .

Ok, após 4 horas ...

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

Graças ao Neils para a idéia para verificar o TransactionSearch.

Por favor, deixe-me saber se existe uma maneira melhor para verificar se algum do campo api alterado.

Há também uma chamada para GetBalance na API. Um código de exemplo

Parece que o mais simples (e mais rápida?) Caminho.

PayPal tem uma API AddressVerify. Ela confirma se um endereço postal e código postal corresponder aos do titular da conta especificado PayPal. Eu estou no processo de implementação em nosso site agora, na verdade.

Você pode ler mais sobre ele aqui:
https://www.x.com/docs/DOC-1162#id0862M0QH02L

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

Certo, então se você quiser testar as credenciais de um usuário usando ActiveMerchant, use o método transaction_search no gateway

https: // github. com / Shopify / active_merchant / blob / cb72e0f9c58f57b1293e6e976229b26cfbfee6a8 / lib / active_merchant / cobrança / gateways / paypal / paypal_common_api.rb

Este exemplo retornará um sucesso (certifique-se de preencher as suas credenciais de teste)

@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
  login:      @username,
  password:   @password,
  signature:  @signature,
  test:       true
)

gateway.transaction_search({start_date: DateTime.now})
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top