Il existe des échantillons de code officiels pour plusieurs langues, mais je n'en ai pas trouvé pour Rails.
Réponses
Trop de publicités?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
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
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.
Jetez un coup d'œil à la ActiveMerchant qui comprend de multiples implémentations de passerelles, dont la suivante IPN de Paypal .
HTH
- Réponses précédentes
- Plus de réponses