我正在使用paypal-recurring gem来处理 Rails 应用程序中的定期付款。我的大部分代码来自这个优秀的Railscast,但我还想添加一个 payment_notification 模型来接受 IPN 回调并存储任何相关数据。这个Railscast介绍了如何设置通知。但是,我很难弄清楚如何将 paypal-recurring 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:未经授权
编辑
我已经能够成功模拟将 IPN 传送到我的 payment_notifications_url。现在我只需要弄清楚如何指向重复出现的 gem 将 ipn 发送到那里。
任何指针将不胜感激。以下是我当前的一些代码。如果我忘记了任何相关部分,请告诉我。
贝宝支付模式
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