# -*- encoding : utf-8 -*-
class Public::OrdersController < ApplicationController
layout "ebook"
skip_before_filter :verify_authenticity_token, :only => [:ipn]
def new
@order = Order.new
end
def create
@order = Order.new(params.require(:order).permit!)
@order.order_products << OrderProduct.new(:name => "Observer et photographier la faune sans déranger", :description => "Exemplaire personnel", :price => 10.0, :slug => "observer-et-photographier-la-faune-sans-deranger")
if @order.save
respond_to do |format|
format.html { redirect_to paid_by_paypal_public_order_path(@order.token)}
format.js { }
end
else
render :action => :new
end
end
def download
@order = Order.find_by_token(params[:id])
if @order and @order.paid
if params[:file] == "pdf"
@order.downloads_count = @order.downloads_count.to_i+1
@order.save
@temp_file = "#{Rails.root}/pdf/#{@order.token}_temp.pdf"
@final_file = "#{Rails.root}/pdf/#{@order.token}.pdf"
spacing = 5
pdf = WickedPdf.new.pdf_from_string("
",
:no_background => true,
:page_size => "A4",
:footer => {:spacing => 19, :content => "
Exemplaire personnel de #{@order.firstname} #{@order.name}
" }, :margin => { :top => 0, :bottom => 30, :left =>20, :right => 13 } ) File.open(@temp_file, 'wb') do |file| file << pdf end require 'posix/spawn' child = ::POSIX::Spawn::Child.new 'pdftk', Rails.root.to_s+'/pdf/plaquette-cabane.pdf', 'background', @temp_file, 'output', @final_file @data_to_send = File.open( @final_file).read File.delete(@temp_file) File.delete(@final_file) # @data_to_send = File.open( @temp_file).read send_data @data_to_send, :filename => "plaquette-cabane-#{@order.token}.pdf" , :type => 'application/pdf' end end end def paid @order = Order.find_by_token(params[:id]) if @order.paid redirect_to public_order_path(@order.token) else respond_to do |format| format.html { redirect_to paid_by_paypal_public_order_path(@order.token)} end end end def show @order = Order.find_by_token(params[:id]) end def paid_by_paypal @order = Order.find_by_token(params[:id]) if @order.paid redirect_to public_order_path(@order.token) end products = [] @order.order_products.each do |order_product| products << {:Name => order_product.name,:Quantity => 1,:Amount => {:currencyID => "EUR",:value => order_product.price } } end require 'paypal-sdk-merchant' @api = PayPal::SDK::Merchant::API.new @set_express_checkout = @api.build_set_express_checkout({ :SetExpressCheckoutRequestDetails => { :custom => @order.token, :ReturnURL => do_paypal_payment_public_order_url(@order), :CancelURL => paid_public_order_url(@order), :NoShipping => 1, :PaymentDetails => [{ :OrderTotal => { :currencyID => "EUR", :value =>@order.total }, :NotifyURL => "http fdgdgf"+ipn_public_order_path(@order), :ShipToAddress => { :Name => @order.name+" "+@order.firstname.to_s, :Street1 => @order.street1, :Street2 => @order.street2, :CityName => @order.cityname, :StateOrProvince => "", :Country => @order.country, :PostalCode => @order.postal_code }, :PaymentDetailsItem => products, :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 => @order.token }) @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 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? @order = Order.find_by_token(@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 => @order.total }, :NotifyURL => "http:// "+ipn_public_order_path(@order) }] } }) # 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" @order.payment_type = "1" @order.paid = true @order.paid_at = Time.now @order.save EbookMailer.confirm(@order.email, public_order_url(:id => @order.token)).deliver redirect_to public_order_path(:id => @order.token, :download => true) 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 @order = Order.find_by_token(params[:custom].to_s) if params[:payment_status] == "Completed" @order.payment_type= 1 @order.paid = true @order.paid_at = Time.now @order.paypal_test_ipn= params[:test_ipn] @order.paypal_txn_type = params[:txn_type] @order.paypal_txn_id = params[:txn_id] @order.paypal_payment_date = params[:payment_date] @order.paypal_payment_status = params[:payment_status] @order.paypal_reason_code = params[:reason_code] @order.paypal_payment_type = params[:payment_type] @order.paypal_mc_currency = params[:mc_currency] @order.paypal_mc_fee = params[:mc_fee] @order.paypal_mc_gross = params[:mc_gross] @order.paypal_residence_country = params[:residence_country] @order.paypal_last_name = params[:last_name] @order.paypal_first_name = params[:first_name] @order.paypal_payer_email = params[:payer_email] @order.paypal_payer_id = params[:payer_id] @order.paypal_payer_status = params[:payer_status] @order.paypal_receiver_id = params[:receiver_id] @order.paypal_receiver_email = params[:receiver_email] @order.paypal_protection_eligibility = params[:protection_eligibility] @order.paypal_ipn_track_id = params[:ipn_track_id] @order.save puts "le paiement de la commande #{@order.id} par paypal est validé" else @order.paypal_test_ipn= params[:test_ipn] @order.paypal_txn_type = params[:txn_type] @order.paypal_txn_id = params[:txn_id] @order.paypal_payment_date = params[:payment_date] @order.paypal_payment_status = params[:payment_status] @order.paypal_reason_code = params[:reason_code] @order.paypal_payment_type = params[:payment_type] @order.paypal_mc_currency = params[:mc_currency] @order.paypal_mc_fee = params[:mc_fee] @order.paypal_mc_gross = params[:mc_gross] @order.paypal_residence_country = params[:residence_country] @order.paypal_last_name = params[:last_name] @order.paypal_first_name = params[:first_name] @order.paypal_payer_email = params[:payer_email] @order.paypal_payer_id = params[:payer_id] @order.paypal_payer_status = params[:payer_status] @order.paypal_receiver_id = params[:receiver_id] @order.paypal_receiver_email = params[:receiver_email] @order.paypal_protection_eligibility = params[:protection_eligibility] @order.paypal_ipn_track_id = params[:ipn_track_id] @order.paid_at = nil @order.paid = false @order.save end else end render :inline => "test" end end