La validación de credenciales de API del usuario - Rieles, ActiveMerchant y Pago exprés de puerta de enlace

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

Pregunta

Estoy construyendo una aplicación de mercado que utiliza PayPal Express. Tengo una forma para que los vendedores para introducir sus credenciales de API de PayPal, pero necesito una manera de validar ellos al hacer algún tipo de llamada a PayPal.

Estoy usando el PaypalExpressGateway en ActiveMerchant, y no ver aparte de los controles estándar de compra nada. ¿Hay algún tipo de nulo operación que se puede utilizar?

Cualquier ayuda sería muy apreciada!

¿Fue útil?

Solución

Por razones de seguridad no hay una manera de comprobar si el correo electrónico es una cuenta de PayPal válida. Siempre se puede hacer una pequeña transacción y luego anularlo si realmente se requiere cuenta de validez.

Otros consejos

Estoy utilizando el TransactionSearch operación para este propósito. Especificando STARTDATE=2100-01-01 00:00:00 que básicamente se traduce en un no-op.

Se validará las credenciales para usted, sin requerir ninguna entrada adicional por parte del vendedor.

No tengo la respuesta personalmente. Pero sé Ryan Bates de Railscasts.com ha dedicado recientemente seis (!) A episodios ActiveMerchant y Paypal en particular. Echa un vistazo a los episodios # 141 al # 146 en railscasts.com .

Ok, después de 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

Gracias a Neils para la idea de comprobar la TransactionSearch.

Por favor, hágamelo saber si hay una manera mejor para comprobar si alguno de los campo de api cambiado.

También hay una llamada para getBalance en el API. Algunos ejemplo de código

Parece que el más simple (y más rápido?) Camino.

PayPal tiene una AddressVerify API. Se confirma si una dirección postal y código postal coinciden con los del titular de la cuenta de PayPal especificada. Estoy en el proceso de implementación en nuestro sitio web en este momento, de hecho.

Puede leer más sobre esto aquí:
https://www.x.com/docs/DOC-1162#id0862M0QH02L

y aquí:
https://cms.paypal.com/us / cgi-bin /? cmd = _render y de contenido y content_id = desarrollador / e_howto_api_nvp_r_AddressVerify

derecho, por lo que si desea probar las credenciales de un usuario utilizando ActiveMerchant, utilice el método transaction_search en la puerta de entrada

https: // github. com / Shopify / active_merchant / burbuja / cb72e0f9c58f57b1293e6e976229b26cfbfee6a8 / lib / active_merchant / facturación / pasarelas / paypal / paypal_common_api.rb

En este ejemplo se volverá un éxito (asegúrese de llenar sus credenciales de prueba)

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

gateway.transaction_search({start_date: DateTime.now})
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top