我正在使用Rails创建一个应用程序,在其中可以通过使用Paypal进行硬币使用。 我正在使用在Paypal网站上创建的通用“立即购买”按钮。 我已将按钮设置为为我的网站上的URL提供IPN。 以前我在身份验证方面遇到问题,但是使用下面的代码已经解决了。 现在的问题是,当IPN通知控制器但会话被破坏时,我无法使用硬币。 因此,我的问题是如何检索/保留会话或用户,以便可以将硬币添加到正确的帐户?

用户模型(相关部分):

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :omniauthable

# Gets the amount of coins the user currently has.
# @return The amount of coins the user has.
def get_coins
self.coins
end

# Adds an amount of coins to the user and saves to the database.
# @param amount The amount of coins to add to the user.
def add_coins(amount)
full_amount = amount + self.coins
self.coins = full_amount
self.save
end

IPN的控制器指向:

class PaymentNotificationsController < ApplicationController
before_action :authenticate_user!, :except => [:create]
# POST /payment_notifications
# POST /payment_notifications.json

def create
puts "made it here"
#PaymentNotification.create!(:params => params)
user =User.find(session[:user_id])
user.coins += 100
user.save!
render :nothing => true
end
end

当前,上面的代码有一个错误,提示“无法找到id =“的用户

应用控制器:

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
skip_before_filter :verify_authenticity_token
end

===============>>#1 票数:0 已采纳

IPN从PayPal服务器发送到您的服务器,与用户会话分开。 这将是它自己的会话,因此这就是为什么您没有获取任何会话数据的原因。 它没有被摧毁。 这只是一个完全不同的会话。

如果要传递用户ID以便它返回IPN,则可以在按钮代码中使用“ custom”参数。 它实际上称为“自定义”,您可以发送最多256个字符的内容。

因此,将以下内容添加到您的按钮代码中...

<input type="hidden" name="custom" value="{user_id_value}" />

然后它将在IPN中返回为$_POST['custom']

处理它的另一种方法(这是我推荐的建议)是,您可以在系统中创建发票记录,然后在将用户发送到PayPal之前具有相关的客户记录。 然后,您可以使用“发票”参数将发票ID传递给PayPal。 这样,它将包含在PayPal交易详细信息中,并且在PayPal详细信息中提供了很好的参考。

再一次,它将以$_POST['invoice']返回IPN中,因此您可以访问数据库以提取所需的任何发票或相关客户详细信息,以便可以在IPN脚本中使用它。

  ask by Noob translate from so

未解决问题?本站智能推荐:

1回复

PayPal IPN无法通过网站登录

我正在研究ruby on rails项目,需要使用Paypal来允许用户购买一些可在网站上使用的硬币。 为了使过程尽可能简单,我仅使用贝宝提供的立即购买按钮。 该按钮设置为通知URL,该URL在访问时会将硬币添加到当前用户。 该网站已建立,因此,如果您未登录,则无法访问该网站上的任何页
1回复

如何将IPN处理程序与Pay操作配合使用并接收消息?

我有功能,付费用户: 从文档结束: 因此,我应该添加到数据变量中: 我应该在此字段中输入我的网站网址吗? 如何从此通知中获取信息? 如果交易成功,如何发送电子邮件并采取一些措施? 我不能在本地测试,是吗? 如何在沙盒中对其进行测试?
4回复

贝宝(Paypal)订阅IPN-用户多次订阅的问题

我正在使用Paypal订阅和即时付款通知(IPN)处理我网站上的订阅者。 在大多数情况下,它运行良好,但偶尔会遇到一个问题。 通常,如果用户取消其订阅,则在禁用对我的网站的访问之前,我会等待“期限终止”(subscr_eot)通知。 因此,如果他们预付了整个月的费用,然后立即取
3回复

为PayPal创建IPN URL

我使用paypal重复宝石设置PayPal。 我需要帮助了解如何实施PayPal IPN。 任何帮助将不胜感激,因为这是我的项目的最后一步。 我需要设置IPN,以便当用户从其PayPal帐户取消/暂停结算时,它将显示为从我的数据库中取消。 Paypal_payment.rb:
1回复

将订阅模型与用户模型相关联

我在订阅模型上有Stripe和PayPal设置。 我需要帮助来了解如何在订阅和用户模型之间创建关联。 任何帮助,将不胜感激。 订阅模式:
1回复

贝宝自适应支付IPN回调:如何返回完整的,未更改的ipn消息

我在一个市场上(买方和卖方)工作,中间人每次购买都会得到一部分。 我想让买家在将购买按钮重定向到Paypal之后立即购买商品。 这很好并且可以正常工作。 下一步是使用ipn验证交易。 我确实收到了贝宝回调,但是不清楚应返回什么? SO上的大多数示例都不会呈现任何内容(REN
1回复

Rails 3.0.10和Heroku的Paypal IPN 503错误

我正在尝试将Paypal IPN通知集成到已部署到Heroku(bamboo-mri-1.9.2)的Rails 3.0.10应用程序中。 这不是我第一次将IPN集成到Rails应用程序中,但是我遇到了一个让我发疯的问题,此刻我一无所知。 我在config / routes.rb中为IPN
1回复

Rails 4:PayPal IPN,各种卖家的付款

我正在开发一个Rails应用程序,用户可以在其中购买以前共享的其他用户的项目。 付款应灵活,以允许共享项目的用户获得买家付款。 1)是否可以创建灵活的贝宝付款方式(不同的卖方,每个商品的价格不同)? 2)您可以使用“ PayPal IPN捐赠”来检查买家是否付款? 3)如果没
1回复

Paypal IPN不会告诉我我的订单信息

我成功使用以下参数从Paypal IPN获得了退货,但是没有一个参数告诉我可以找到和更新哪个顺序。 可能有用的唯一可能参数是payer_id,payer_email,mc_gross,但是如果一个付款人购买相同金额的相同商品怎么办? 我应该有一些独特的东西,例如令牌,该令牌是在我向Paypa
2回复

Rails侦听器Paypal IPN始终返回INVALID

我已经为我的IPN建立了一个监听器。 我可以通过IPN Simulator接收请求,并且所有参数都是正确的,但是当我将其发送回链接以发送请求以进行验证时 ,它将始终返回INVALID。 我尝试将我的PayPal帐户上的编码更改为UTF-8,但没有用。 我没有为此使用任何宝石,也没有