21 votes

Existe-t-il un exemple de code PayPal IPN pour Ruby on Rails ?

Il existe des échantillons de code officiels pour plusieurs langues, mais je n'en ai pas trouvé pour Rails.

31voto

joscas Points 2536

Je poste ici mon exemple de code de travail pour un contrôleur Rails. Il fait la vérification. J'espère qu'il sera utile.

class PaymentNotificationsController < ApplicationController
  protect_from_forgery :except => [:create] #Otherwise the request from PayPal wouldn't make it to the controller
  def create
    response = validate_IPN_notification(request.raw_post)
    case response
    when "VERIFIED"
      # check that paymentStatus=Completed
      # check that txnId has not been previously processed
      # check that receiverEmail is your Primary PayPal email
      # check that paymentAmount/paymentCurrency are correct
      # process payment
    when "INVALID"
      # log for investigation
    else
      # error
    end
    render :nothing => true
  end 
  protected 
  def validate_IPN_notification(raw)
    live = 'https://ipnpb.paypal.com/cgi-bin'
    sandbox = 'https://ipnpb.sandbox.paypal.com/cgi-bin'
    uri = URI.parse(sandbox + '/webscr?cmd=_notify-validate')
    http = Net::HTTP.new(uri.host, uri.port)
    http.open_timeout = 60
    http.read_timeout = 60
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    http.use_ssl = true
    response = http.post(uri.request_uri, raw,
                         'Content-Length' => "#{raw.size}",
                         'User-Agent' => "My custom user agent"
                       ).body
  end
end

Le code s'inspire de Railscast 142 et ce post par Tanel Suurhans

3voto

Dave Kiss Points 5031

Le kit SDK Ruby Merchant de PayPal fournit une ipn_valid? pour vous faciliter la tâche.

def notify
  @api = PayPal::SDK::Merchant.new
  if @api.ipn_valid?(request.raw_post)  # return true or false
    # params contains the data
  end
end

https://github.com/paypal/merchant-sdk-ruby/blob/master/samples/IPN-README.md

2voto

superluminary Points 5496

Gemme IPN

Le bijou de Paypal IPN de DWilke se trouve ici :

https://github.com/dwilkie/paypal

Découvrez le module IPN. C'est un bon code :

https://github.com/dwilkie/paypal/blob/master/lib/paypal/ipn/ipn.rb

Test contre le simulateur

Vous pouvez le tester avec le simulateur IPN ici :

https://developer.paypal.com/webapps/developer/applications/ipn_simulator

J'utilise ngrok pour exposer localhost:3000 sur une URL publique, puis je dirige le simulateur vers cette URL.

0voto

Lucky Points 140

J'ai implémenté l'IPN dans un de mes projets et votre code semble correct. Quel est donc le problème auquel vous êtes confronté ?

0voto

Nazar Points 1204

Jetez un coup d'œil à la ActiveMerchant qui comprend de multiples implémentations de passerelles, dont la suivante IPN de Paypal .

HTH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X