La validación de credenciales de API del usuario - Rieles, ActiveMerchant y Pago exprés de puerta de enlace
-
21-08-2019 - |
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!
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
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
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})