Rails アプリで定期的な支払いを処理するために、 paypal-recurring gemを使用しています。私のコードの大部分はこの優れたRailscastからのものですが、Payment_notification モデルを追加して、IPN コールバックを受け入れ、関連データを保存したいと考えています。このRailscast では、通知の設定方法について説明します。しかし、paypal の定期的な gem IPN コールバックを私の PaymentNotification モデルに送信する方法を理解するのに苦労しています。
:ipn_url を設定して IPN コールバックを PaymentNotification モデルに正しく書き込むにはどうすればよいですか。これまでに次のことを試しました:
1)ipn_url: "http://my-app-name.com/payment_notifications"
処理方法 (オプションの下) または payment_notifications_url に追加する
2) このGitHub の問題ページの下部で提案されている解決策を試す
3) Paypal の即時支払い通知 (IPN) シミュレーターを使用して「http://my-app-name.com/payment_notifications」に送信すると、エラーが発生します: IPN 配信に失敗しました。HTTP エラー コード 401: 権限がありません
編集
payment_notifications_url への IPN の配信を正常にシミュレートできました。ここで、繰り返しの宝石をポイントしてそこにipnを送信する方法を理解する必要があります。
任意のポインタをいただければ幸いです。以下は私の現在のコードの一部です。関連する部分を忘れている場合は、お知らせください。
Paypal支払いモデル
class PaypalPayment
def initialize(subscription)
@subscription = subscription
end
def checkout_details
process :checkout_details
end
def checkout_url(options)
process(:checkout, options).checkout_url
end
def make_recurring
process :request_payment
process :create_recurring_profile, period: :monthly, frequency: 1, start_at: Time.zone.now
end
def cancel_recurring
process :cancel
end
private
def process(action, options = {})
options = options.reverse_merge(
token: @subscription.paypal_payment_token,
payer_id: @subscription.paypal_customer_token,
description: @subscription.plan.name,
amount: @subscription.plan.monthly_price,
currency: "JPY"
)
response = PayPal::Recurring.new(options).send(action)
raise response.errors.inspect if response.errors.present?
response
end
end
PaymentNotifications コントローラ
class PaymentNotificationsController < ApplicationController
protect_from_forgery :except => [:create]
def create
PaymentNotification.create!(:params => params, :status => params[:payment_status], :transaction_id => params[:txn_id])
render :nothing => true
end
end