簡體   English   中英

用戶注冊Devise和Paypal

[英]User Registration with Devise and Paypal

我想在Devise用戶注冊過程中集成Paypal 我想要的是擁有一個基於devise resource的標准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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM