453 lines
11 KiB
Ruby
453 lines
11 KiB
Ruby
# -*- encoding : utf-8 -*-
|
|
|
|
class Public::PaymentsController < ApplicationController
|
|
|
|
layout "public"
|
|
|
|
skip_before_filter :verify_authenticity_token, :only => [:payplug_ipn, :paypal_ipn, :ogone_ipn]
|
|
|
|
def paid
|
|
@payment = current_customer.payments.find(params[:id])
|
|
|
|
if params[:orderID]
|
|
if @payment.ogone_payid? and !@payment.element.paid
|
|
@abonnement = @payment.element
|
|
@payment = @abonnement.payments.create(:amount => @abonnement.total_price_ttc, :payment_type_id => 1, :customer_id => current_customer.id)
|
|
end
|
|
end
|
|
|
|
end
|
|
def paid_by_ogone
|
|
|
|
@payment = current_customer.payments.find(params[:id])
|
|
|
|
if @payment.paid
|
|
render :inline => "paiement déjà enregistré"
|
|
#redirect_to new_public_donator_transaction_path(:paid => true)
|
|
else
|
|
|
|
|
|
|
|
@ogone_options = {
|
|
:amount => @payment.amount,
|
|
:accept_url => "http://#{HOSTNAME}"+paid_by_ogone_confirm_public_payment_path(@payment.id),
|
|
:decline_url => "http://#{HOSTNAME}"+paid_public_payment_path(@payment.id),
|
|
:exception_url => "http://#{HOSTNAME}"+paid_public_payment_path(@payment.id),
|
|
:cancel_url => "http://#{HOSTNAME}"+paid_public_payment_path(@payment.id),
|
|
:orderid => @payment.token,
|
|
:PARAMVAR => "ogoneipn",
|
|
:PSPID => OgoneRails::pspid,
|
|
:currency => OgoneRails::currency,
|
|
:language => OgoneRails::language,
|
|
|
|
}
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def paid_by_ogone_confirm
|
|
|
|
@check = OgoneRails::CheckAuth.new( request )
|
|
|
|
if @check.valid?
|
|
|
|
@payment = Payment.find_by_token(params[:orderID])
|
|
|
|
|
|
|
|
end
|
|
|
|
if !@payment.paid
|
|
update_ogone_infos()
|
|
|
|
end
|
|
|
|
|
|
|
|
if !@payment.paid
|
|
|
|
#render :inline => "pas payé"
|
|
#redirect_to paid_public_payment_path(@payment)
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
def ogone_ipn
|
|
|
|
update_ogone_infos()
|
|
|
|
render :inline => "ok"
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
#------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
def paid_by_paypal
|
|
@donator_transaction = DonatorTransaction.find(session[:donator_transaction_id])
|
|
|
|
if @donator_transaction.paid
|
|
redirect_to new_public_donator_transaction_path(:paid => true)
|
|
else
|
|
@payment = Payment.create(:tr_payment_type_id => 6)
|
|
@donator_transaction.tr_payments << @payment
|
|
|
|
require 'paypal-sdk-merchant'
|
|
@api = PayPal::SDK::Merchant::API.new
|
|
|
|
|
|
@set_express_checkout = @api.build_set_express_checkout({
|
|
:SetExpressCheckoutRequestDetails => {
|
|
:custom => @payment.token,
|
|
:ReturnURL => do_paypal_payment_public_donator_transaction_url(@donator_transaction.id),
|
|
:CancelURL => edit_public_donator_transaction_url(@donator_transaction.id),
|
|
:NoShipping => 1,
|
|
:PaymentDetails => [{
|
|
:OrderTotal => {
|
|
:currencyID => "EUR",
|
|
:value =>@donator_transaction.total },
|
|
|
|
:NotifyURL => "http://#{HOSTNAME}"+paypal_ipn_public_donator_transaction_path(@donator_transaction),
|
|
:ShipToAddress => {
|
|
:Name => @donator_transaction.particular_bill.name.to_s+" "+@donator_transaction.particular_bill.firstname.to_s,
|
|
:Street1 => @donator_transaction.particular_bill.address_2,
|
|
:Street2 => @donator_transaction.particular_bill.address_3,
|
|
:CityName => @donator_transaction.particular_bill.city.upcase,
|
|
:StateOrProvince => "",
|
|
:Country => @donator_transaction.particular_bill.country.upcase,
|
|
:PostalCode => @donator_transaction.particular_bill.cp.upcase },
|
|
|
|
: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 => @donator_transaction.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
|
|
end
|
|
|
|
|
|
|
|
def do_paypal_payment
|
|
load_specific_page if @new_site
|
|
|
|
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?
|
|
|
|
|
|
@payment = Payment.find_by_token(@get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.Custom.to_s)
|
|
|
|
|
|
@order = @payment.donator_transaction
|
|
|
|
|
|
|
|
|
|
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://#{HOSTNAME}"+paypal_ipn_public_donator_transaction_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"
|
|
|
|
params[:payment_status] ="Completed"
|
|
update_paypal_infos()
|
|
|
|
|
|
else
|
|
redirect_to select_payment_public_donator_transaction_path(@donator_transaction.id)
|
|
#render :file => 'public/500.html', :status => 500, :layout => false
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
render :file => 'public/500.html', :status => 500, :layout => false
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
def paypal_ipn
|
|
|
|
|
|
@api = PayPal::SDK::Merchant.new
|
|
if @api.ipn_valid?(request.raw_post) # return true or false
|
|
@payment = Payment.find_by_token(params[:custom].to_s)
|
|
|
|
@order = @payment.donator_transaction
|
|
|
|
|
|
|
|
# @order.payment_type= 6
|
|
# @order.paid = true
|
|
# @order.paid_at = Time.now
|
|
|
|
@payment.paypal_test_ipn= params[:test_ipn]
|
|
|
|
@payment.paypal_txn_type = params[:txn_type]
|
|
@payment.paypal_txn_id = params[:txn_id]
|
|
@payment.paypal_payment_date = params[:payment_date]
|
|
|
|
@payment.paypal_payment_status = params[:payment_status]
|
|
@payment.paypal_reason_code = params[:reason_code]
|
|
@payment.paypal_payment_type = params[:payment_type]
|
|
|
|
@payment.paypal_mc_currency = params[:mc_currency]
|
|
@payment.paypal_mc_fee = params[:mc_fee]
|
|
@payment.paypal_mc_gross = params[:mc_gross]
|
|
|
|
@payment.paypal_residence_country = params[:residence_country]
|
|
|
|
|
|
if params[:charset] == "windows-1252"
|
|
|
|
else
|
|
@payment.paypal_last_name = params[:last_name]
|
|
@payment.paypal_first_name = params[:first_name]
|
|
@payment.paypal_payer_email = params[:payer_email]
|
|
end
|
|
@payment.paypal_payer_id = params[:payer_id]
|
|
@payment.paypal_payer_status = params[:payer_status]
|
|
|
|
@payment.paypal_receiver_id = params[:receiver_id]
|
|
@payment.paypal_receiver_email = params[:receiver_email]
|
|
|
|
@payment.paypal_protection_eligibility = params[:protection_eligibility]
|
|
@payment.paypal_ipn_track_id = params[:ipn_track_id]
|
|
|
|
|
|
update_paypal_infos()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
end
|
|
render :inline => "test"
|
|
end
|
|
|
|
|
|
|
|
#------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected
|
|
|
|
def update_ogone_infos
|
|
|
|
@check = OgoneRails::CheckAuth.new( request )
|
|
|
|
if @check.valid?
|
|
|
|
@payment = Payment.find_by_token(params[:orderID])
|
|
|
|
|
|
|
|
|
|
####
|
|
@payment.payment_type_id = 1
|
|
@payment.amount = params[:amount].to_f
|
|
|
|
@payment.ogone_payid = params[:PAYID]
|
|
@payment.ogone_pm = params[:PM]
|
|
@payment.ogone_status = params[:STATUS]
|
|
@payment.ogone_acceptance = params[:ACCEPTANCE]
|
|
@payment.ogone_cardno = params[:CARDNO]
|
|
@payment.ogone_ed = params[:ED]
|
|
@payment.ogone_cn = params[:CN]
|
|
@payment.ogone_trxdate = params[:TRXDATE]
|
|
@payment.ogone_ncerror = params[:NCERROR]
|
|
@payment.ogone_brand = params[:BRAND]
|
|
@payment.ogone_subbrand = params[:SUBBRAND]
|
|
@payment.ogone_eci = params[:ECI]
|
|
@payment.ogone_ip = params[:IP]
|
|
@payment.ogone_alias = params[:ALIAS]
|
|
@payment.ogone_cb_expiration = Date.parse(params[:ED][2..3].to_s+"/"+params[:ED][0..1].to_s+"/01") if params[:ED]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if params["STATUS"].to_i == 9
|
|
if !@payment.paid
|
|
@payment.paid_at = Time.now
|
|
|
|
|
|
|
|
@payment.paid = true
|
|
|
|
|
|
end
|
|
|
|
else
|
|
@payment.paid = false
|
|
|
|
end
|
|
|
|
@payment.save
|
|
|
|
if @payment.paid and @payment.element
|
|
|
|
@payment.element.after_paid
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
def update_paypal_infos
|
|
|
|
if params[:payment_status] == "Completed"
|
|
if !@order.paid
|
|
@payment.paid_at = Time.now
|
|
|
|
@order.paid_at = @payment.paid_at
|
|
|
|
@order.paid = true
|
|
|
|
if @order.recurrent
|
|
|
|
@order = true
|
|
|
|
DonateTransactionsMails.general("fr", "confirmation_paypal_rec", @order).deliver
|
|
else
|
|
@gen_recu = true
|
|
DonateTransactionsMails.general("fr", "confirmation_paypal", @order).deliver
|
|
end
|
|
@order.check_newsletter
|
|
|
|
end
|
|
|
|
else
|
|
@order.paid = false
|
|
|
|
end
|
|
@order.completed_finish = true
|
|
|
|
@payment.save
|
|
@order.tr_payment_ok = @payment if @order.paid
|
|
@order.save
|
|
|
|
|
|
|
|
if @generate_recurrent
|
|
|
|
@order.create_recurrent_payment
|
|
@order.generated_recurrent_payment.generate_infos
|
|
|
|
|
|
end
|
|
|
|
if @gen_recu
|
|
@order.generate_recu
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end |