Pregunta

Yo estoy usando esta joya para los pagos en paypal https://github.com/tc/paypal_adaptive

Estoy muy confundido y desorientado con esta joya.Tiene un poco documentada y es difícil para mí entender cómo obtener los datos de paypal en el ipn respuesta.

Espero que esta pregunta ayudará a que más personas con el mismo problema.

Mis pasos son:

Puedo enviar la solicitud a paypal desde mi orders_controller.rb con el método preaproval_payment.

def preapproval_payment
preapproval_request = PaypalAdaptive::Request.new
data = {
  "returnUrl" => response_paypal_user_orders_url(current_user),
  "cancelUrl"=>  cancel_payment_gift_url(@gift),
  "requestEnvelope" => {"errorLanguage" => "en_US"},
  "senderEmail" => "gift_1342711309_per@gmail.com",
  "startingDate" => Time.now,
  "endingDate" => Time.now + (60*60*24) * 30,
  "currencyCode"=>"USD",
  "maxAmountPerPayment" => "@gift.price",
  "ipnNotificationUrl" => ipn_notification_url,
  "ip" => request.remote_ip
  }
    preapproval_response = preapproval_request.preapproval(data)
    puts data
  if preapproval_response.success?
    redirect_to preapproval_response.preapproval_paypal_payment_url
  else
    redirect_to gift_url(@gift), alert: t(".something_was_wrong")
  end
end

Estos son los datos de mi pedido en mi log de la consola de comandos puts data :

{"returnUrl"=>"http://localhost:3000/en/u/maserranocaceres/orders/response_paypal", "cancelUrl"=>"http://localhost:3000/en/gifts/gift-1/cancel_payment", "requestEnvelope"=>{"errorLanguage"=>"en_US"}, "senderEmail"=>"gift_1342711309_per@gmail.com", "startingDate"=>2012-07-29 13:05:49 +0200, "endingDate"=>2012-08-28 13:05:49 +0200, "currencyCode"=>"USD", "maxAmountPerPayment"=>9, "ipnNotificationUrl"=>"http://localhost:3000/ipn_notification?locale=en", "ip"=>"127.0.0.1"}

Yo redirigir a la página de paypal, y puedo hacer el pago en paypal con éxito :D.

Cuando el pago se ha realizado correctamente, estoy dirigido a:

http://localhost:3000/en/u/maserranocaceres/orders/response_paypal

Tengo response_paypal acción en orders_controller.rb.Es CONSEGUIR la acción y mi código para que esta acción es:

def response_paypal
  respond_to do |format|
       format.html { redirect_to user_orders_url(current_user), :alert => "works fine return url"}
    end
 end

Hasta este momento todo funciona bien.

Ahora lo que necesito es obtener los datos que he recibido de paypal y guardar en mi base de datos de un nuevo orden, si el pago se ha procesado correctamente.

Para este fin puedo hacer un archivo en lib/paypal_ipn.rb y puedo agregar a este archivo el contenido de https://github.com/tc/paypal_adaptive/blob/master/templates/paypal_ipn.rb

# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)

class PaypalIpn
  def self.call(env)
    if env["PATH_INFO"] =~ /^\/paypal_ipn/
      request = Rack::Request.new(env)
      params = request.params
      ipn = PaypalAdaptive::IpnNotification.new
      ipn.send_back(env['rack.request.form_vars'])
      if ipn.verified?
        #mark transaction as completed in your DB
        output = "Verified."
      else
        output = "Not Verified."
      end

      [200, {"Content-Type" => "text/html"}, [output]]
    else
      [404, {"Content-Type" => "text/html"}, ["Not Found"]]
    end
  end

end

En mi las rutas.rb Añado:

match "/ipn_notification" => PaypalIpn

Mis 2 problemas:

a) No veo que después de hacer el pago de este archivo a ser despedido y no puedo ver en mi consola los datos que recibo de paypal.

b) Quiero enviar a paypal en mi solicitud, el identificador de objeto @gift para ser capaz de recuperar más tarde en paypal_ipn.rb y para salvar mi base de datos.

¿Qué estoy haciendo mal y cómo puedo resolver estos problemas?

Gracias

¿Fue útil?

Solución

No he utilizado esa joya, pero he utilizado PayPal IPN antes.Aquí están algunas cosas que usted debe comprobar:

  1. ¿Tienes tu cuenta de PayPal configurado para utilizar en el IPN?Usted debe habilitar esta opción en la cuenta para que esto funcione.

  2. ¿Has comprobado que cuando se pasa ipn_notification_url durante el proceso de pago, que coincide con el "/ipn_notification" ruta?

  3. Para que esto funcione, PayPal debe ser capaz de comunicarse directamente con el servidor que está ejecutando esta aplicación.Esto significa que, normalmente, a menos que usted tiene una instalación personalizada en su máquina local con la dinámica de DNS o algo, que usted necesitará para implementar este código en un servidor con el fin de PayPal para poder comunicarse con su aplicación.En otras palabras, si este se está ejecutando en http://localhost:3000, esto no va a funcionar.

Para responder a su segunda pregunta, cómo recuperar @don con el fin de registrar el hecho de que se pagó en su base de datos, no estoy del todo seguro de cómo hacer esto con esta joya, pero yo voy a contar cómo hago usando ActiveMerchant - es probablemente muy similar.

  1. En la solicitud de pago de PayPal, usted puede pasar en un número de factura.Creo que el campo es llamado simplemente "factura".Aquí se pasa el ID de la donación.

  2. Cuando PayPal notifica a su aplicación a través IPN que el pedido ha sido pagado para que, va a pasar el número de la factura de nuevo a usted.Recuperar la @don usando este número de la factura y, a continuación, usted puede hacer lo que usted necesita con ella.

Aquí están las partes relevantes de mi trabajo PayPal código, mediante la ActiveMerchant joya: https://gist.github.com/3198178

Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top