Paypal is now working

This commit is contained in:
Godwin 2014-07-24 21:12:39 -06:00
parent 5352749e68
commit 534b9303e9
11 changed files with 133 additions and 77 deletions

View File

@ -28,24 +28,32 @@
padding: 0.5em 1em;
vertical-align: middle;
&.organization, &.secondary {
&.organization, &.secondary, &.best {
background-color: $organization-color;
}
&.article {
&.article, &.good {
background-color: $article-color;
}
&.better {
background-color: darken($warning-color, 2);
}
&:hover {
color: $primary-color;
border: 0.15em solid;
background-color: transparent;
&.organization {
&.organization, &.secondary, &.best {
color: $organization-color;
}
&.article {
&.better {
color: darken($warning-color, 2);
}
&.article, &.good {
color: $article-color;
}
}
@ -625,3 +633,24 @@ article {
p.help {
font-size: 1.1em;
}
.small-form {
> .field {
display: inline-block;
vertical-align: baseline;
width: 10em;
input {
text-align: right;
}
label {
display: none;
}
}
.actions {
display: inline-block;
vertical-align: middle;
}
}

View File

@ -354,7 +354,21 @@ class ConferencesController < ApplicationController
when 'already_registered'
send_confirmation
next_step = 'thanks'
when 'pay_now', 'payment-confirmed', 'payment-cancelled'
when 'paypal-confirmed'
@registration = ConferenceRegistration.find(session[:registration][:registration_id])
next_step = 'confirm_payment'
when 'confirm_payment'
@registration = ConferenceRegistration.find(session[:registration][:registration_id])
if params[:confirm_payment]
info = YAML.load(@registration.payment_info)
paypal = PayPal!.checkout!(info[:token], info[:payer_id], PayPalRequest(info[:amount]))
if paypal.payment_info.first.payment_status == 'Completed'
@registration.registration_fees_paid = paypal.payment_info.first.amount.total
@registration.save!
end
end
next_step = 'thanks'
when 'pay_now', 'payment-confirmed', 'paypal-cancelled'
next_step = 'thanks'
end
session.delete(:registration_step)
@ -415,6 +429,8 @@ class ConferencesController < ApplicationController
@actions = [:cancel, :submit]
when 'cancel'
@actions = [:no, :yes]
when 'confirm_payment'
@actions = [:cancel_payment, :confirm_payment]
when 'already_registered'
@registration = ConferenceRegistration.find_by(:email => session[:registration][:email])
if !@registration.complete
@ -472,92 +488,50 @@ class ConferencesController < ApplicationController
@conference_registration = ConferenceRegistration.find_by(confirmation_token: params[:confirmation_token])
host = "#{request.protocol}#{request.host_with_port}"
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete
if params[:payment_amount].nil?
amount = (params[:auto_payment_amount] || params[:payment_amount]).to_f
if amount > 0
response = PayPal!.setup(
PayPalRequest(amount),
host + (@conference.url + "/register/paypal-confirm/#{@conference_registration.payment_confirmation_token}/").gsub(/\/\/+/, '/'),
host + (@conference.url + "/register/paypal-cancel/#{@conference_registration.confirmation_token}/").gsub(/\/\/+/, '/')
)
redirect_to response.redirect_uri
else
session[:registration] = YAML.load(@conference_registration.data)
session[:registration][:registration_id] = @conference_registration.id
session[:registration][:path] = Array.new
session[:registration_step] = 'pay_now'
redirect_to action: 'register'
else
begin
paypal_info = get_secure_info(:paypal)
request = Paypal::Express::Request.new(
:username => paypal_info[:username],
:password => paypal_info[:password],
:signature => paypal_info[:signature]
)
payment_request = Paypal::Payment::Request.new(
:currency_code => 'USD', # if nil, PayPal use USD as default
:description => 'Conference Registration', # item description
:quantity => 1, # item quantity
:amount => params[:payment_amount].to_f, # item value
:custom_fields => {
CARTBORDERCOLOR: "00ADEF",
LOGOIMG: "https://cdn.bikebike.org/assets/bblogo-paypal.png"
}
)
response = request.setup(
payment_request,
host + (@conference.url + "/register/confirm-payment/#{@conference_registration.payment_confirmation_token}/").gsub(/\/\/+/, '/'),
host + (@conference.url + "/register/cancel-payment/#{@conference_registration.confirmation_token}/").gsub(/\/\/+/, '/')
)
redirect_to response.redirect_uri
rescue Exception => e
ddd
end
end
elsif params[:test]
paypal_info = get_secure_info(:paypal)
request = Paypal::Express::Request.new(
:username => paypal_info[:username],
:password => paypal_info[:password],
:signature => paypal_info[:signature]
)
payment_request = Paypal::Payment::Request.new(
:currency_code => 'USD', # if nil, PayPal use USD as default
:description => 'Conference Registration Test', # item description
:quantity => 1, # item quantity
:amount => 25.0, # item value
:custom_fields => {
CARTBORDERCOLOR: "00ADEF",
LOGOIMG: "https://cdn.bikebike.org/assets/bblogo-paypal.png"
}
)
response = request.setup(
payment_request,
host + @conference.url,
host + @conference.url
)
redirect_to response.redirect_uri
else
do_404
end
end
def register_confirm_payment
def register_paypal_confirm
set_conference
@conference_registration = ConferenceRegistration.find_by(payment_confirmation_token: params[:confirmation_token])
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete && @conference_registration.payment_info.nil?
@conference_registration.payment_info = "#{params[:PayerID]}:#{params[:token]}"
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete && @conference_registration.registration_fees_paid.nil?
@conference_registration.payment_info = {:payer_id => params[:PayerID], :token => params[:token], :amount => PayPal!.details(params[:token]).amount.total}.to_yaml
@conference_registration.save!
session[:registration] = YAML.load(@conference_registration.data)
session[:registration][:registration_id] = @conference_registration.id
session[:registration][:path] = Array.new
session[:registration_step] = 'payment-confirmed'
session[:registration_step] = 'paypal-confirmed'
redirect_to action: 'register'
else
do_404
end
end
def register_cancel_payment
def register_paypal_cancel
set_conference
@conference_registration = ConferenceRegistration.find_by(confirmation_token: params[:confirmation_token])
if !@conference_registration.nil? && @conference_registration.conference_id == @conference.id && @conference_registration.complete && @conference_registration.payment_info.nil?
session[:registration] = YAML.load(@conference_registration.data)
session[:registration][:registration_id] = @conference_registration.id
session[:registration][:path] = Array.new
session[:registration_step] = 'payment-cancelled'
session[:registration_step] = 'paypal-cancelled'
redirect_to action: 'register'
end
end
@ -789,4 +763,26 @@ class ConferencesController < ApplicationController
data ||= YAML.load(registration.data)
UserMailer.conference_registration_payment_received(@conference, data, registration).deliver
end
def PayPal!
paypal_info = get_secure_info(:paypal)
Paypal::Express::Request.new(
:username => paypal_info[:username],
:password => paypal_info[:password],
:signature => paypal_info[:signature]
)
end
def PayPalRequest(amount)
Paypal::Payment::Request.new(
:currency_code => 'USD', # if nil, PayPal use USD as default
:description => 'Conference Registration', # item description
:quantity => 1, # item quantity
:amount => amount.to_f, # item value
:custom_fields => {
CARTBORDERCOLOR: "00ADEF",
LOGOIMG: "https://cdn.bikebike.org/assets/bblogo-paypal.png"
}
)
end
end

View File

@ -41,6 +41,7 @@ module BikeBikeFormHelper
end
def number_field_tag(name, value = nil, options = {})
options[:_no_wrapper] = true
render_field(name, options = get_options(name, options), super(name, value, options), value)
end
@ -77,6 +78,10 @@ module BikeBikeFormHelper
end
def text_field_tag(name, value = nil, options = {})
if options[:_no_wrapper]
options.delete(:_no_wrapper)
options[:no_wrapper] = true
end
render_field(name, options = get_options(name, options), super(name, value, options), value)
end
@ -148,6 +153,7 @@ module BikeBikeFormHelper
end
def number_field(object_name, method, options = {})
options[:_no_wrapper] = true
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
end
@ -180,6 +186,10 @@ module BikeBikeFormHelper
end
def text_field(object_name, method, options = {})
if options[:_no_wrapper]
options.delete(:_no_wrapper)
options[:no_wrapper] = true
end
render_field(method, options = get_options(method, options), super(object_name, method, options), get_value(method, options))
end

View File

@ -0,0 +1,5 @@
- if @registration && @registration.is_participant && @registration.complete && @registration.payment_info.present?
- info = YAML.load(@registration.payment_info)
%h3=_'registration.payment_confirm.title','Please confirm your payment'
.columns
%p=_'registration.payment_confirm.help',"You are about to confirm your payment of #{number_to_currency(info[:amount], :unit => '$')} USD for registration.", vars: {:amount => number_to_currency(info[:amount], :unit => '$')}

View File

@ -4,14 +4,24 @@
.columns
- if !@registration.is_participant
%p=_'registration.thanks.all_done.volunteer','Thanks for submitting your volunteer infomation. We\'ll see you at Bike!Bike!'
- elsif @registration.payment_info.nil?
- elsif @registration.registration_fees_paid.nil?
%p=_'registration.thanks.all_done.please_pay',"Thank you for completing your registration. We'll see you at Bike!Bike! If you have not already done so, we ask that you pay the registration donation as soon as you can."
= form_tag ("#{@conference.url}/register/pay-registration/#{@registration.confirmation_token}/").gsub(/\/\/+/, '/'), :method => :post, :class => 'row' do
= form_tag ("#{@conference.url}/register/pay-registration/#{@registration.confirmation_token}/").gsub(/\/\/+/, '/'), :method => :post do
= hidden_field_tag :confirmation_token, @registration.confirmation_token
.columns.small-4.small-offset-2
= number_field_tag :payment_amount, 25.00, :step => 0.01, :min => 0.01
.columns.small-4.end
= form_actions :submit_payment
.row
.columns.small-12.centered
%p=_'registration.thanks.all_done.please_pay.currency','(amounts are in $USD)'
%button{name: 'auto_payment_amount', type: 'submit', value: '25.0', :class => 'good'}
= number_to_currency(25, :unit => '$')
%button{name: 'auto_payment_amount', type: 'submit', value: '50.0', :class => 'better'}
= number_to_currency(50, :unit => '$')
%button{name: 'auto_payment_amount', type: 'submit', value: '100.0', :class => 'best'}
= number_to_currency(100, :unit => '$')
.row
.columns.small-12.centered
.small-form
= number_field_tag :payment_amount, :step => 0.01, :min => 0.01, :label => false
= form_actions :custom_amount
- else
%p=_'registration.thanks.all_done.paid',"You're all done and paid up! We'll see you in #{city}.", vars: {:city => city}
%p=_'register.email.registration_confirmed.info',"We'll have housing, loaner bikes, and food arranged for your arrival. If you have any other questions or concerns, please email bikebike2014columbus@gmail.com."

View File

@ -54,6 +54,6 @@ BikeBike::Application.configure do
#PerfTools::CpuProfiler.start('/tmp/dev_prof')
config.serve_static_assets = true
#config.assets.precompile = false
#Paypal.sandbox!
Paypal.sandbox!
#Paypal.sandbox = false
end

View File

@ -17,8 +17,8 @@ BikeBike::Application.routes.draw do
match 'register(/:step)' => 'conferences#register', via: [:get, :post]
get 'register/confirm/:confirmation_token' => 'conferences#register_confirm'
match 'register/pay-registration/:confirmation_token' => 'conferences#register_pay_registration', via: [:get, :post]
get 'register/confirm-payment/:confirmation_token' => 'conferences#register_confirm_payment'
get 'register/cancel-payment/:confirmation_token' => 'conferences#register_cancel_payment'
get 'register/paypal-confirm/:confirmation_token' => 'conferences#register_paypal_confirm'
get 'register/paypal-cancel/:confirmation_token' => 'conferences#register_paypal_cancel'
#patch 'register/step/:step' => 'conferences#register_step'
#resources :registrations, :path => 'registration' do
# get :form, on: :collection

View File

@ -0,0 +1,5 @@
class AddRegistrationFeesPaidToConferenceRegistration < ActiveRecord::Migration
def change
add_column :conference_registrations, :registration_fees_paid, :integer
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140723183557) do
ActiveRecord::Schema.define(version: 20140725001300) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -71,6 +71,7 @@ ActiveRecord::Schema.define(version: 20140723183557) do
t.boolean "completed"
t.string "payment_confirmation_token"
t.string "payment_info"
t.integer "registration_fees_paid"
end
create_table "conference_types", force: true do |t|

View File

@ -181,7 +181,7 @@ end
Then (/^my registration (should( not)? be|is( not)?) (confirmed|completed?|paid)$/) do |state, x, y, field|
ConferenceRegistration.find_by!(:email => @last_email_entered).
send(field == 'confirmed' ? 'is_confirmed' : (field == 'paid' ? 'payment_info' : field)).
send(field == 'confirmed' ? 'is_confirmed' : (field == 'paid' ? 'registration_fees_paid' : field)).
send(state =~ / not/ ? 'should_not' : 'should', be)
end

View File

@ -8,10 +8,10 @@ module NavigationHelpers
path = "/conferences/bikebike/#{@last_conference.slug}/register/confirm/#{@last_registration.confirmation_token}"
when /^pay registration$/i
path = "/conferences/bikebike/#{@last_conference.slug}/register/pay-registration/#{@last_registration.confirmation_token}"
when /^confirm payment$/i
path = "/conferences/bikebike/#{@last_conference.slug}/register/confirm-payment/#{@last_registration.payment_confirmation_token}"
when /^cancel payment$/i
path = "/conferences/bikebike/#{@last_conference.slug}/register/cancel-payment/#{@last_registration.confirmation_token}"
when /^paypal confirm$/i
path = "/conferences/bikebike/#{@last_conference.slug}/register/paypal-confirm/#{@last_registration.payment_confirmation_token}"
when /^paypal cancel$/i
path = "/conferences/bikebike/#{@last_conference.slug}/register/paypal-cancel/#{@last_registration.confirmation_token}"
when /^translation list$/i
path = '/translations/'
when /^(.+) translations?$/i