pic_vert_app/app/controllers/public/joins_controller.rb
Nicolas Bally 9ae944bde3 suite
2019-06-11 16:26:52 +02:00

309 lines
8.5 KiB
Ruby

# -*- 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 = Renew.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