# -*- encoding : utf-8 -*- class Public::JoinsController < ApplicationController layout "public" skip_before_filter :verify_authenticity_token, :only => [:ipn] def select_sheet if !session[:sheet_id] or !(@sheet = Sheet.where(:id => session[:sheet_id]).first) @sheet = Sheet.new(:sheet_type => 1, :web => true) @sheet.people.build(:web => true) @sheet.sheet_years.build(:year => Renew::YEAR, :payment_type => 3) else end end def save_sheet if !session[:sheet_id] or !(@sheet = Sheet.where(:id => session[:sheet_id]).first) @sheet = Sheet.new(params.require(:sheet).permit!) if @sheet.save session[:sheet_id] = @sheet.id if @sheet.sheet_years.first.payment_type == 3 redirect_to paid_by_paypal_public_joins_path else redirect_to paid_public_joins_path end else render action: "select_sheet" end else if @sheet.update_attributes(params.require(:sheet).permit!) session[:sheet_id] = @sheet.id if @sheet.sheet_years.first.payment_type == 3 redirect_to paid_by_paypal_public_joins_path else redirect_to paid_public_joins_path end else render action: "select_sheet" end end end def paid @sheet = Sheet.where(:id => session[:sheet_id]).first if !@sheet or @sheet.ok redirect_to select_sheet_public_joins_path else respond_to do |format| format.html { } end end end def paid_by_paypal @sheet = Sheet.where(:id => session[:sheet_id]).first if @sheet and !@sheet.ok require 'paypal-sdk-merchant' @api = PayPal::SDK::Merchant::API.new @set_express_checkout = @api.build_set_express_checkout({ :SetExpressCheckoutRequestDetails => { :custom => @sheet.id, :ReturnURL => do_paypal_payment_public_joins_url, :CancelURL => select_sheet_public_joins_url(), :NoShipping => 1, :PaymentDetails => [{ :OrderTotal => { :currencyID => "EUR", :value =>@sheet.sheet_years.first.amount }, :NotifyURL => "http://lepicvert.org"+ipn_public_joins_path, :PaymentDetailsItem => [{:Name => "Nouvelle adhésion",:Quantity => 1,:Amount => {:currencyID => "EUR",:value => @sheet.sheet_years.first.amount } }], :PaymentAction => "Sale" }] } }) # Make API call & get response @set_express_checkout_response = @api.set_express_checkout(@set_express_checkout) # Access Response if @set_express_checkout_response.success? @get_express_checkout_details = @api.build_get_express_checkout_details({ :Token => @sheet.id }) @get_express_checkout_details_response = @api.get_express_checkout_details(@get_express_checkout_details) @payment_detail = @get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.PaymentDetails[0] redirect_to @api.express_checkout_url(@set_express_checkout_response.Token) else @set_express_checkout_response.Errors end else redirect_to select_sheet_public_joins_path() end end def do_paypal_payment require 'paypal-sdk-merchant' @api = PayPal::SDK::Merchant::API.new @get_express_checkout_details = @api.build_get_express_checkout_details({:Token => params[:token] }) @get_express_checkout_details_response = @api.get_express_checkout_details(@get_express_checkout_details) # Access Response if @get_express_checkout_details_response.success? @sheet = Sheet.find(@get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.Custom.to_s) puts "AAA" puts @get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.Custom.to_s else @get_express_checkout_details_response.Errors end # Build request object @do_express_checkout_payment = @api.build_do_express_checkout_payment({ :DoExpressCheckoutPaymentRequestDetails => { :PaymentAction => "Sale", :Token => params[:token], :PayerID => params[:PayerID], :PaymentDetails => [{ :OrderTotal => { :currencyID => "EUR", :value => @sheet.sheet_years.first.amount }, :NotifyURL => "http://lepicvert.org"+ipn_public_joins_path }] } }) # Make API call & get response @do_express_checkout_payment_response = @api.do_express_checkout_payment(@do_express_checkout_payment) # Access Response if @do_express_checkout_payment_response.success? @payment_info = @do_express_checkout_payment_response.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0] @do_express_checkout_payment_response.DoExpressCheckoutPaymentResponseDetails @do_express_checkout_payment_response.FMFDetails if @payment_info.PaymentStatus.to_s == "Completed" @sheet.ok = true @sheet.save @sheet.done_return session[:sheet_id] = nil redirect_to thanks_public_joins_url else render :file => 'public/500.html', :status => 500, :layout => false end else render :file => 'public/500.html', :status => 500, :layout => false end end def ipn @api = PayPal::SDK::Merchant.new if @api.ipn_valid?(request.raw_post) # return true or false @sheet = Sheet.find_by_token(params[:custom].to_s) if params[:payment_status] == "Completed" @sheet.paypal_test_ipn= params[:test_ipn] @sheet.paypal_txn_type = params[:txn_type] @sheet.paypal_txn_id = params[:txn_id] @sheet.paypal_payment_date = params[:payment_date] @sheet.paypal_payment_status = params[:payment_status] @sheet.paypal_reason_code = params[:reason_code] @sheet.paypal_payment_type = params[:payment_type] @sheet.paypal_mc_currency = params[:mc_currency] @sheet.paypal_mc_fee = params[:mc_fee] @sheet.paypal_mc_gross = params[:mc_gross] @sheet.paypal_residence_country = params[:residence_country] @sheet.paypal_last_name = params[:last_name] @sheet.paypal_first_name = params[:first_name] @sheet.paypal_payer_email = params[:payer_email] @sheet.paypal_payer_id = params[:payer_id] @sheet.paypal_payer_status = params[:payer_status] @sheet.paypal_receiver_id = params[:receiver_id] @sheet.paypal_receiver_email = params[:receiver_email] @sheet.paypal_protection_eligibility = params[:protection_eligibility] @sheet.paypal_ipn_track_id = params[:ipn_track_id] @sheet.save puts "le paiement de la commande #{@sheet.id} par paypal est validé" else @sheet.paypal_test_ipn= params[:test_ipn] @sheet.paypal_txn_type = params[:txn_type] @sheet.paypal_txn_id = params[:txn_id] @sheet.paypal_payment_date = params[:payment_date] @sheet.paypal_payment_status = params[:payment_status] @sheet.paypal_reason_code = params[:reason_code] @sheet.paypal_payment_type = params[:payment_type] @sheet.paypal_mc_currency = params[:mc_currency] @sheet.paypal_mc_fee = params[:mc_fee] @sheet.paypal_mc_gross = params[:mc_gross] @sheet.paypal_residence_country = params[:residence_country] @sheet.paypal_last_name = params[:last_name] @sheet.paypal_first_name = params[:first_name] @sheet.paypal_payer_email = params[:payer_email] @sheet.paypal_payer_id = params[:payer_id] @sheet.paypal_payer_status = params[:payer_status] @sheet.paypal_receiver_id = params[:receiver_id] @sheet.paypal_receiver_email = params[:receiver_email] @sheet.paypal_protection_eligibility = params[:protection_eligibility] @sheet.paypal_ipn_track_id = params[:ipn_track_id] @sheet.ok = false @sheet.save @sheet.done_return end else end render :inline => "test" end end