ruby on rails - Validación de las credenciales de la API del usuario: Rails, ActiveMerchant y PayPal Express Gateway
ruby-on-rails e-commerce (7)
Estoy construyendo una aplicación de mercado que usa PayPal Express. Tengo un formulario para que los vendedores ingresen sus credenciales de la API de PayPal, pero necesito una forma de validarlos haciendo algún tipo de llamada a PayPal.
Estoy usando PaypalExpressGateway en ActiveMerchant, y no veo nada más que los controles de compra estándar. ¿Hay algún tipo de operación nula que se pueda usar?
¡Cualquier ayuda sería muy apreciada!
Correcto, entonces si quiere probar las credenciales de un usuario usando ActiveMerchant, use el método transaction_search en la puerta de enlace
Este ejemplo devolverá un éxito (asegúrese de completar 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})
No tengo la respuesta personalmente. Pero sé que Ryan Bates de Railscasts.com ha dedicado recientemente seis (!) Episodios a ActiveMerchant y Paypal en particular. Mira los episodios # 141 al # 146 en railscasts.com .
Por razones de seguridad, no hay forma de verificar si el correo electrónico es una cuenta de PayPal válida. Siempre puede hacer una pequeña transacción y luego anularla si realmente se requiere la validez de la cuenta.
PayPal tiene una API AddressVerify
. Confirma si una dirección postal y un código postal coinciden con los del titular de la cuenta PayPal especificado. Estoy en el proceso de implementarlo en nuestro sitio web en este momento, de hecho.
Puedes leer más sobre esto aquí:
https://www.x.com/docs/DOC-1162#id0862M0QH02L
Estoy usando la operación de TransactionSearch para este propósito. Al especificar STARTDATE=2100-01-01 00:00:00
, básicamente resulta en no-op.
Validará las credenciales por usted, sin requerir ninguna entrada adicional del vendedor.
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 por la idea de verificar TransactionSearch.
Por favor, avíseme si hay una mejor manera de verificar si alguno de los campos api cambió.
También hay un llamado para GetBalance en la API. Algunos ejemplos de código
Parece la forma más simple (¿y la más rápida?).