21

いくつかの言語の公式コード サンプルがありますが、Rails のコード サンプルは見つかりませんでした。

4

7 に答える 7

31

ここに、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によるこの投稿に触発されています。

于 2013-01-14T10:09:46.600 に答える
3

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

于 2014-01-16T23:13:22.567 に答える
2

IPNジェム

DWilke の Paypal IPN gem は次の場所にあります。

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 を使用して、パブリック URL で localhost:3000 を公開し、シミュレーターをそこに向けます。

于 2014-05-16T14:30:30.983 に答える
0

Paypal の IPNなど、複数のゲートウェイの実装を含むActiveMerchant gem をご覧ください。

HTH

于 2013-01-14T12:25:39.880 に答える
0

プロジェクトの 1 つで IPN を実装しましたが、コードは問題なく見えます。それで、あなたが直面している問題は何ですか?

于 2013-01-14T10:18:24.490 に答える
0

これを行うだけで、ipn の詳細を取得できます。結果には、確認済みかどうかが表示されます。body からすべての詳細を取得できます

post '/english/ipn' do

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

本文 = request.body.string

結果 = RestClient.post URL、本文

終わり

于 2014-03-13T12:03:33.707 に答える