ruby-on-rails – 使用Devise和Paypal进行用户注册
发布时间:2020-12-17 03:35:40 所属栏目:百科 来源:网络整理
导读:我想在Devise用户注册过程中集成Paypal.我想要的是拥有一个基于设计资源的标准rails表单,该表单还具有属于用户模型的自定义字段. 当用户填写这些字段并点击注册时,它将被重定向到Paypal,当他从paypal清除并返回我们的网站时,必须创建用户数据. 对于用户填写P
我想在Devise用户注册过程中集成Paypal.我想要的是拥有一个基于设计资源的标准rails表单,该表单还具有属于用户模型的自定义字段.
当用户填写这些字段并点击注册时,它将被重定向到Paypal,当他从paypal清除并返回我们的网站时,必须创建用户数据. 对于用户填写PayPal表格但未返回我们网站的情况,我们必须在重定向到Paypal之前保留用户记录. 为此,我们可以在用户模型中创建一个标志并使用Paypal IPN,并在通知用户事务时设置该标志. 但是,如果用户被重定向到Paypal但未完成交易,如果用户返回注册并再次注册,我们的模型不应抛出错误,表示输入的电子邮件已存在于表中. 我们如何处理所有这些场景,是否有可用的gem或插件? 解决方法
在这里,我发布了执行整个过程的详细代码.
registration_controller.rb module Auth class RegistrationController < Devise::RegistrationsController include Auth::RegistrationHelper def create @user = User.new params[:user] if @user.valid? redirect_to get_subscribe_url(@user,request) else super end end end end registration_helper.rb module Auth::RegistrationHelper def get_subscribe_url(user,request) url = Rails.env == "production" ? "https://www.paypal.com/cgi-bin/webscr/?" : "https://www.sandbox.paypal.com/cgi-bin/webscr/?" url + { :ip => request.remote_ip,:cmd => '_s-xclick',:hosted_button_id => (Rails.env == "production" ? "ID_FOR_BUTTON" : "ID_FOR_BUTTON"),:return_url => root_url,:cancel_return_url => root_url,:notify_url => payment_notifications_create_url,:allow_note => true,:custom => Base64.encode64("#{user.email}|#{user.organization_type_id}|#{user.password}") }.to_query end end payment_notification_controller.rb class PaymentNotificationsController < ApplicationController protect_from_forgery :except => [:create] layout "single_column",:only => :show def create @notification = PaymentNotification.new @notification.transaction_id = params[:ipn_track_id] @notification.params = params @notification.status = "paid" @custom = Base64.decode64(params[:custom]) @custom = @custom.split("|") @user = User.new @user.email = @custom[0] @user.organization_type_id = @custom[1].to_i @user.password = @custom[2] if @user.valid? @user.save @notification.user = @user @notification.save @user.send_confirmation_instructions end render :nothing => true end def show end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |