私はこの宝石をペイパルでの支払いに使用していますhttps://github.com/tc/paypal_adaptive
私はこの宝石に非常に混乱し、混乱しています。それは十分に文書化されておらず、ipn応答でpaypalからデータを取得する方法を理解するのは難しいです。
この質問が同じ問題を抱えているより多くの人々に役立つことを願っています。
私の手順は次のとおりです。
1ºpreaproval_paymentorders_controller.rb
メソッドを使用してペイパルにリクエストを送信します。
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
2ºこれらは、コマンドからのログコンソールでのリクエストのデータです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"}
3ºペイパルページにリダイレクトし、ペイパルでの支払いに成功しました:D。
4º支払いが正常に完了すると、次のように指示されます。
http://localhost:3000/en/u/maserranocaceres/orders/response_paypal
でresponse_paypal
アクションがありorders_controller.rb
ます。これはGETアクションであり、このアクションのコードは次のとおりです。
def response_paypal
respond_to do |format|
format.html { redirect_to user_orders_url(current_user), :alert => "works fine return url"}
end
end
この時点まで、すべてが正常に機能します。
今必要なのは、ペイパルから受け取ったデータを取得し、支払いが正常に処理された場合にデータベースに新しい注文を保存することです。
5ºこの目的のために、ファイルを作成し、このファイルにhttps://github.com/tc/paypal_adaptive/blob/master/templates/paypal_ipn.rblib/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
私のroutes.rbに追加します:
match "/ipn_notification" => PaypalIpn
私の2つの問題は次のとおりです。
a)支払いを行った後、このファイルが起動されることを確認できず、PayPalから取得したデータをコンソールデータで確認できません。
b)リクエストでpaypalに送信したいのですが、@gift
後でリカバリしpaypal_ipn.rb
てデータベースを保存できるようにするためのオブジェクトのIDです。
私は何を間違っているのですか、そしてどのようにこれらの問題を解決することができますか?
ありがとうございました