Подтвердить что ты не робот

Есть ли образец кода IPN PayPal для Ruby on Rails?

Есть официальные образцы кода для нескольких языков, но не удалось найти их для Rails.

4b9b3361

Ответ 1

Я публикую здесь мой пример рабочего кода для контроллера Rails. Это делает проверку. Надеюсь это будет полезно.

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

Код вдохновлен Railscast 142 и этот пост Tanel Suurhans

Ответ 2

PayPal Ruby Merchant SDK предоставляет ipn_valid? логический метод, чтобы сделать вас очень легким.

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

Ответ 3

драгоценный камень IPN

Драйвер DWilke Paypal IPN можно найти здесь:

https://github.com/dwilkie/paypal

Проверьте модуль IPN. Это хороший код:

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

Тестирование против симулятора

Здесь вы можете протестировать его против симулятора IPN:

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

Я использую ngrok, чтобы выставить localhost: 3000 на общедоступный URL-адрес, затем наведите на него симулятор.

Ответ 4

У меня есть реализация IPN в одном из моих проектов, и ваш код выглядит хорошо. Итак, в чем проблема u r?

Ответ 5

Посмотрите на ActiveMerchant, который включает в себя несколько реализаций шлюза, среди которых IPN Paypal.

НТН

Ответ 6

вы можете просто сделать это, чтобы получить информацию об ipn. результат покажет вам подтверждение или нет. вы можете получить все детали из тела

post '/english/ipn' do

url = " https://sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate&# {@query}"

body = request.body.string

result = RestClient.post url, body

конец

Ответ 7

Существует несколько драгоценных камней PayPal, и по крайней мере один из них (paypal-sdk-rest) включает PayPal::SDK::Core::API::IPN.valid? метод.

Вот как это использовать:

class YourController < ApplicationController

  skip_before_action :verify_authenticity_token, only: :your_action

  def your_action
    verified = PayPal::SDK::Core::API::IPN.valid?(request.raw_post)

    if verified
      # Verification passed, do something useful here.
      render nothing: true, status: :ok
    else
      # Verification failed!
      render nothing: true, status: :unprocessable_entity
    end
  end

end