authorizenet_blaq 1.9.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/app/helpers/authorize_net_helper.rb +24 -0
- data/lib/authorize_net/addresses/address.rb +29 -0
- data/lib/authorize_net/addresses/shipping_address.rb +26 -0
- data/lib/authorize_net/aim/response.rb +131 -0
- data/lib/authorize_net/aim/transaction.rb +190 -0
- data/lib/authorize_net/api/api_transaction.rb +123 -0
- data/lib/authorize_net/api/constants.yml +1 -0
- data/lib/authorize_net/api/schema.rb +4985 -0
- data/lib/authorize_net/api/transaction.rb +258 -0
- data/lib/authorize_net/arb/fields.rb +24 -0
- data/lib/authorize_net/arb/paging.rb +33 -0
- data/lib/authorize_net/arb/response.rb +34 -0
- data/lib/authorize_net/arb/sorting.rb +43 -0
- data/lib/authorize_net/arb/subscription.rb +72 -0
- data/lib/authorize_net/arb/subscription_detail.rb +14 -0
- data/lib/authorize_net/arb/subscription_list_response.rb +43 -0
- data/lib/authorize_net/arb/transaction.rb +177 -0
- data/lib/authorize_net/authorize_net.rb +154 -0
- data/lib/authorize_net/cim/customer_profile.rb +19 -0
- data/lib/authorize_net/cim/payment_profile.rb +37 -0
- data/lib/authorize_net/cim/response.rb +116 -0
- data/lib/authorize_net/cim/transaction.rb +727 -0
- data/lib/authorize_net/customer.rb +27 -0
- data/lib/authorize_net/email_receipt.rb +24 -0
- data/lib/authorize_net/fields.rb +779 -0
- data/lib/authorize_net/key_value_response.rb +117 -0
- data/lib/authorize_net/key_value_transaction.rb +291 -0
- data/lib/authorize_net/line_item.rb +25 -0
- data/lib/authorize_net/order.rb +42 -0
- data/lib/authorize_net/payment_methods/credit_card.rb +62 -0
- data/lib/authorize_net/payment_methods/echeck.rb +72 -0
- data/lib/authorize_net/reporting/batch.rb +19 -0
- data/lib/authorize_net/reporting/batch_statistics.rb +19 -0
- data/lib/authorize_net/reporting/fds_filter.rb +11 -0
- data/lib/authorize_net/reporting/response.rb +163 -0
- data/lib/authorize_net/reporting/returned_item.rb +46 -0
- data/lib/authorize_net/reporting/transaction.rb +133 -0
- data/lib/authorize_net/reporting/transaction_details.rb +25 -0
- data/lib/authorize_net/response.rb +27 -0
- data/lib/authorize_net/sim/hosted_payment_form.rb +38 -0
- data/lib/authorize_net/sim/hosted_receipt_page.rb +37 -0
- data/lib/authorize_net/sim/response.rb +142 -0
- data/lib/authorize_net/sim/transaction.rb +138 -0
- data/lib/authorize_net/transaction.rb +66 -0
- data/lib/authorize_net/xml_response.rb +172 -0
- data/lib/authorize_net/xml_transaction.rb +298 -0
- data/lib/authorize_net.rb +107 -0
- data/lib/authorizenet_blaq.rb +4 -0
- data/lib/generators/authorize_net/direct_post/direct_post_generator.rb +53 -0
- data/lib/generators/authorize_net/direct_post/templates/README-AuthorizeNet +49 -0
- data/lib/generators/authorize_net/direct_post/templates/config.yml.erb +8 -0
- data/lib/generators/authorize_net/direct_post/templates/config.yml.rails3.erb +8 -0
- data/lib/generators/authorize_net/direct_post/templates/controller.rb.erb +31 -0
- data/lib/generators/authorize_net/direct_post/templates/initializer.rb +4 -0
- data/lib/generators/authorize_net/direct_post/templates/layout.erb +18 -0
- data/lib/generators/authorize_net/direct_post/templates/payment.erb +10 -0
- data/lib/generators/authorize_net/direct_post/templates/payment.rails3.erb +10 -0
- data/lib/generators/authorize_net/direct_post/templates/receipt.erb +1 -0
- data/lib/generators/authorize_net/direct_post/templates/relay_response.erb +1 -0
- data/lib/generators/authorize_net/sim/sim_generator.rb +47 -0
- data/lib/generators/authorize_net/sim/templates/README-AuthorizeNet +52 -0
- data/lib/generators/authorize_net/sim/templates/config.yml.erb +8 -0
- data/lib/generators/authorize_net/sim/templates/config.yml.rails3.erb +8 -0
- data/lib/generators/authorize_net/sim/templates/controller.rb.erb +21 -0
- data/lib/generators/authorize_net/sim/templates/initializer.rb +4 -0
- data/lib/generators/authorize_net/sim/templates/layout.erb +18 -0
- data/lib/generators/authorize_net/sim/templates/payment.erb +6 -0
- data/lib/generators/authorize_net/sim/templates/payment.rails3.erb +6 -0
- data/lib/generators/authorize_net/sim/templates/thank_you.erb +1 -0
- data/lib/generators/generator_extensions.rb +75 -0
- metadata +196 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
# The SDK initialization enters here. Loads all needed libraries and files. Inspects
|
2
|
+
# the current runtime to see if Rails is present. If it is, we inject our helper into
|
3
|
+
# ActiveSupport.
|
4
|
+
|
5
|
+
#coverall
|
6
|
+
# require 'coveralls'
|
7
|
+
# Coveralls.wear!
|
8
|
+
|
9
|
+
require "cgi"
|
10
|
+
require "net/https"
|
11
|
+
require "uri"
|
12
|
+
require "openssl"
|
13
|
+
require 'bigdecimal'
|
14
|
+
require 'nokogiri'
|
15
|
+
require 'date'
|
16
|
+
|
17
|
+
# TODO: Add local data validation where possible
|
18
|
+
|
19
|
+
$:.unshift File.dirname(__FILE__)
|
20
|
+
|
21
|
+
require "authorize_net/authorize_net"
|
22
|
+
require "authorize_net/payment_methods/credit_card"
|
23
|
+
require "authorize_net/payment_methods/echeck"
|
24
|
+
require "authorize_net/addresses/address"
|
25
|
+
require "authorize_net/addresses/shipping_address"
|
26
|
+
require "authorize_net/customer"
|
27
|
+
require "authorize_net/email_receipt"
|
28
|
+
require "authorize_net/order"
|
29
|
+
require "authorize_net/line_item"
|
30
|
+
require "authorize_net/cim/payment_profile"
|
31
|
+
require "authorize_net/cim/customer_profile"
|
32
|
+
require "authorize_net/reporting/batch"
|
33
|
+
require "authorize_net/reporting/batch_statistics"
|
34
|
+
require "authorize_net/reporting/transaction_details"
|
35
|
+
require "authorize_net/reporting/fds_filter"
|
36
|
+
require "authorize_net/reporting/returned_item"
|
37
|
+
require "authorize_net/response"
|
38
|
+
require "authorize_net/key_value_response"
|
39
|
+
require "authorize_net/xml_response"
|
40
|
+
require "authorize_net/transaction"
|
41
|
+
require "authorize_net/key_value_transaction"
|
42
|
+
require "authorize_net/xml_transaction"
|
43
|
+
require "authorize_net/fields"
|
44
|
+
|
45
|
+
# AIM
|
46
|
+
|
47
|
+
require "authorize_net/aim/transaction"
|
48
|
+
require "authorize_net/aim/response"
|
49
|
+
|
50
|
+
# API
|
51
|
+
require "authorize_net/api/schema"
|
52
|
+
require "authorize_net/api/api_transaction"
|
53
|
+
require "authorize_net/api/transaction"
|
54
|
+
|
55
|
+
# SIM
|
56
|
+
|
57
|
+
require "authorize_net/sim/hosted_payment_form"
|
58
|
+
require "authorize_net/sim/hosted_receipt_page"
|
59
|
+
require "authorize_net/sim/transaction"
|
60
|
+
require "authorize_net/sim/response"
|
61
|
+
|
62
|
+
# ARB
|
63
|
+
|
64
|
+
require "authorize_net/arb/paging"
|
65
|
+
require "authorize_net/arb/sorting"
|
66
|
+
require "authorize_net/arb/subscription_list_response"
|
67
|
+
require "authorize_net/arb/subscription_detail"
|
68
|
+
require "authorize_net/arb/fields"
|
69
|
+
require "authorize_net/arb/subscription"
|
70
|
+
require "authorize_net/arb/response"
|
71
|
+
require "authorize_net/arb/transaction"
|
72
|
+
|
73
|
+
# CIM
|
74
|
+
|
75
|
+
require "authorize_net/cim/response"
|
76
|
+
require "authorize_net/cim/transaction"
|
77
|
+
|
78
|
+
# Reporting
|
79
|
+
|
80
|
+
require "authorize_net/reporting/response"
|
81
|
+
require "authorize_net/reporting/transaction"
|
82
|
+
|
83
|
+
# Load our Rails plugin
|
84
|
+
|
85
|
+
if defined?(Rails)
|
86
|
+
if defined?(Rails::Railtie)
|
87
|
+
module AuthorizeNet
|
88
|
+
class Railtie < Rails::Railtie
|
89
|
+
initializer "authorize_net.load_path_initialize" do |app|
|
90
|
+
%w{ models controllers helpers }.each do |dir|
|
91
|
+
path = File.join(File.dirname(__FILE__), 'app', dir)
|
92
|
+
$LOAD_PATH << path
|
93
|
+
ActiveSupport::Dependencies.autoload_paths << path
|
94
|
+
ActiveSupport::Dependencies.autoload_once_paths.delete(path)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
else
|
100
|
+
%w{ models controllers helpers }.each do |dir|
|
101
|
+
path = File.join(File.dirname(__FILE__), 'app', dir)
|
102
|
+
$LOAD_PATH << path
|
103
|
+
ActiveSupport::Dependencies.load_paths << path
|
104
|
+
ActiveSupport::Dependencies.load_once_paths.delete(path)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
|
4
|
+
module AuthorizeNet
|
5
|
+
module Generators
|
6
|
+
class DirectPostGenerator < Rails::Generators::NamedBase
|
7
|
+
source_root File.expand_path("../templates", __FILE__)
|
8
|
+
p '__FILE__:' + __FILE__
|
9
|
+
p 'source_root:' + source_root
|
10
|
+
argument :api_login_id, :type => :string, :desc => 'Your Authorize.Net API login ID.', :optional => true
|
11
|
+
argument :api_transaction_key, :type => :string, :desc => 'Your Authorize.Net API transaction key.', :optional => true
|
12
|
+
argument :merchant_hash_value, :type => :string, :desc => 'Your Authorize.Net merchant hash value.', :optional => true
|
13
|
+
desc <<-DESC
|
14
|
+
Description
|
15
|
+
Generates a simple implementation of Authorize.Net's Direct Post Method integration method.
|
16
|
+
|
17
|
+
Example:
|
18
|
+
rails generate authorize_net:direct_post payments API_LOGIN_ID API_TRANSACTION_KEY MERCHANT_HASH_VALUE
|
19
|
+
|
20
|
+
This will create:
|
21
|
+
create README-AuthorizeNet
|
22
|
+
create app/views/payments
|
23
|
+
create app/views/payments/payment.erb
|
24
|
+
create app/views/payments/receipt.erb
|
25
|
+
create app/views/payments/relay_response.erb
|
26
|
+
create app/views/layouts/authorize_net.erb
|
27
|
+
create config/authorize_net.yml
|
28
|
+
create config/initializers/authorize_net.rb
|
29
|
+
create app/controllers/payments_controller.rb
|
30
|
+
route match '/payments/receipt', :to => 'payments#receipt', :as => 'payments_receipt', :via => [:get]
|
31
|
+
route match '/payments/relay_response', :to => 'payments#relay_response', :as => 'payments_relay_response', :via => [:post]
|
32
|
+
route match '/payments/payment', :to => 'payments#payment', :as => 'paymentspayment', :via => [:get]
|
33
|
+
|
34
|
+
DESC
|
35
|
+
|
36
|
+
def manifest
|
37
|
+
copy_file "README-AuthorizeNet", "README-AuthorizeNet"
|
38
|
+
empty_directory "app/views/#{file_name}"
|
39
|
+
copy_file "payment.rails3.erb", "app/views/#{file_name}/payment.erb"
|
40
|
+
copy_file "receipt.erb", "app/views/#{file_name}/receipt.erb"
|
41
|
+
copy_file "relay_response.erb", "app/views/#{file_name}/relay_response.erb"
|
42
|
+
copy_file "layout.erb", "app/views/layouts/authorize_net.erb"
|
43
|
+
template "config.yml.rails3.erb", "config/authorize_net.yml"
|
44
|
+
copy_file "initializer.rb", "config/initializers/authorize_net.rb"
|
45
|
+
template "controller.rb.erb", "app/controllers/#{file_name}_controller.rb"
|
46
|
+
route "match '/#{plural_name}/receipt', :to => '#{file_name}#receipt', :as => '#{singular_name}_receipt', :via => [:get]"
|
47
|
+
route "match '/#{plural_name}/relay_response', :to => '#{file_name}#relay_response', :as => '#{singular_name}_relay_response', :via => [:post]"
|
48
|
+
route "match '/#{plural_name}/payment', :to => '#{file_name}#payment', :as => '#{singular_name}payment', :via => [:get]"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
= Authorize.Net Ruby SDK
|
2
|
+
|
3
|
+
The Authorize.Net Ruby SDK is meant to offer an alternate object-oriented
|
4
|
+
model of development with the Authorize.net APIs (Version 3.1). The SDK is
|
5
|
+
based entirely off the name-value pair API, but performs the core payment
|
6
|
+
activities (such as error handling/parsing, network communication, and data
|
7
|
+
encoding) behind the scenes. Providing the end developer with this allows the
|
8
|
+
developer to start integrating immediately without having to write out a mass
|
9
|
+
of boiler plate code.
|
10
|
+
|
11
|
+
== Prerequisites
|
12
|
+
|
13
|
+
* Ruby 1.8.7 or higher
|
14
|
+
* RubyGem 1.3.7 or higher (to build the gem)
|
15
|
+
* RDoc 1.0 or higher (to build documentation)
|
16
|
+
* Rake 0.8.7 or higher (to use the rake tasks)
|
17
|
+
|
18
|
+
== Installation
|
19
|
+
|
20
|
+
Goto the Authorize.Net SDK download page and download the Ruby gem. Then
|
21
|
+
|
22
|
+
> gem install authorize-net-1.0.0.gem
|
23
|
+
|
24
|
+
== Usage
|
25
|
+
|
26
|
+
A generator is provided to aid in setting up a Direct Post Method application. In the example below 'payments' is the name of the controller to generate.
|
27
|
+
|
28
|
+
> sudo gem install rails -v '~> 2.1'
|
29
|
+
> rails my_direct_post_app
|
30
|
+
> cd my_direct_post_app
|
31
|
+
> script/generate authorize_net_direct_post payments YOUR_API_LOGIN_ID YOUR_TRANSACTION_KEY MERCH_HASH_KEY
|
32
|
+
> script/server
|
33
|
+
|
34
|
+
After running the generator you will probably want to customize the payment form found in 'app/views/payments/payment.erb' and the receipt found in 'app/views/payments/receipt.erb'.
|
35
|
+
|
36
|
+
There is also a default layout generated, 'app/views/layouts/authorize_net.erb'. If you already have your own layout, you can delete that file and the reference to it in the controller ('app/controllers/payments_controller.rb').
|
37
|
+
|
38
|
+
|
39
|
+
== Credit Card Test Numbers
|
40
|
+
|
41
|
+
For your reference, you can use the following test credit card numbers.
|
42
|
+
The expiration date must be set to the present date or later. Use 123 for
|
43
|
+
the CCV code.
|
44
|
+
|
45
|
+
American Express:: 370000000000002
|
46
|
+
Discover:: 6011000000000012
|
47
|
+
Visa:: 4007000000027
|
48
|
+
JCB:: 3088000000000017
|
49
|
+
Diners Club/ Carte Blanche:: 38000000000006
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class <%= class_name %>Controller < ApplicationController
|
2
|
+
|
3
|
+
layout 'authorize_net'
|
4
|
+
helper :authorize_net
|
5
|
+
protect_from_forgery :except => :relay_response
|
6
|
+
|
7
|
+
# GET
|
8
|
+
# Displays a payment form.
|
9
|
+
def payment
|
10
|
+
@amount = 10.00
|
11
|
+
@sim_transaction = AuthorizeNet::SIM::Transaction.new(AUTHORIZE_NET_CONFIG['api_login_id'], AUTHORIZE_NET_CONFIG['api_transaction_key'], @amount, :relay_url => <%= singular_name %>_relay_response_url(:only_path => false))
|
12
|
+
end
|
13
|
+
|
14
|
+
# POST
|
15
|
+
# Returns relay response when Authorize.Net POSTs to us.
|
16
|
+
def relay_response
|
17
|
+
sim_response = AuthorizeNet::SIM::Response.new(params)
|
18
|
+
if sim_response.success?(AUTHORIZE_NET_CONFIG['api_login_id'], AUTHORIZE_NET_CONFIG['merchant_hash_value'])
|
19
|
+
render :text => sim_response.direct_post_reply(<%= singular_name %>_receipt_url(:only_path => false), :include => true)
|
20
|
+
else
|
21
|
+
render
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# GET
|
26
|
+
# Displays a receipt.
|
27
|
+
def receipt
|
28
|
+
@auth_code = params[:x_auth_code]
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Direct Post Sample App</title>
|
5
|
+
<style>
|
6
|
+
body {
|
7
|
+
text-align: center;
|
8
|
+
font-family: Helvetica;
|
9
|
+
}
|
10
|
+
label {
|
11
|
+
display: block;
|
12
|
+
}
|
13
|
+
</style>
|
14
|
+
</head>
|
15
|
+
<body>
|
16
|
+
<%= yield %>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% form_for :sim_transaction, :url => AuthorizeNet::SIM::Transaction::Gateway::TEST do |f| %>
|
2
|
+
<%= sim_fields(@sim_transaction) %>
|
3
|
+
<%= label_tag 'x_amount', "Total: #{number_to_currency(@amount)}" %>
|
4
|
+
<%= label_tag 'x_card_num', 'Credit Card Number'%>
|
5
|
+
<%= text_field_tag 'x_card_num' %>
|
6
|
+
<%= label_tag 'x_exp_date', 'Expiration Date (MMYY)'%>
|
7
|
+
<%= text_field_tag 'x_exp_date' %>
|
8
|
+
<br />
|
9
|
+
<%= f.submit 'Purchase'%>
|
10
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= form_for :sim_transaction, :url => AuthorizeNet::SIM::Transaction::Gateway::TEST do |f| %>
|
2
|
+
<%= sim_fields(@sim_transaction) %>
|
3
|
+
<%= label_tag 'x_amount', "Total: #{number_to_currency(@amount)}" %>
|
4
|
+
<%= label_tag 'x_card_num', 'Credit Card Number'%>
|
5
|
+
<%= text_field_tag 'x_card_num' %>
|
6
|
+
<%= label_tag 'x_exp_date', 'Expiration Date (MMYY)'%>
|
7
|
+
<%= text_field_tag 'x_exp_date' %>
|
8
|
+
<br />
|
9
|
+
<%= f.submit 'Purchase'%>
|
10
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
Thanks for your purchase! Your authorization code is <%=h @auth_code %>.
|
@@ -0,0 +1 @@
|
|
1
|
+
Sorry, something went wrong, please try your transaction again.
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
|
4
|
+
module AuthorizeNet
|
5
|
+
module Generators
|
6
|
+
class SimGenerator < Rails::Generators::NamedBase
|
7
|
+
source_root File.expand_path("../templates", __FILE__)
|
8
|
+
argument :api_login_id, :type => :string, :desc => 'Your Authorize.Net API login ID.', :optional => true
|
9
|
+
argument :api_transaction_key, :type => :string, :desc => 'Your Authorize.Net API transaction key.', :optional => true
|
10
|
+
argument :merchant_hash_value, :type => :string, :desc => 'Your Authorize.Net merchant hash value.', :optional => true
|
11
|
+
desc <<-DESC
|
12
|
+
Description
|
13
|
+
Generates a simple implementation of Authorize.Net's SIM integration method.
|
14
|
+
|
15
|
+
Example:
|
16
|
+
rails generate authorize_net:sim payments API_LOGIN_ID API_TRANSACTION_KEY MERCHANT_HASH_VALUE
|
17
|
+
|
18
|
+
This will create:
|
19
|
+
create README-AuthorizeNet
|
20
|
+
create app/views/payments
|
21
|
+
create app/views/payments/payment.erb
|
22
|
+
create app/views/payments/thank_you.erb
|
23
|
+
create app/views/layouts/authorize_net.erb
|
24
|
+
create config/authorize_net.yml
|
25
|
+
create config/initializers/authorize_net.rb
|
26
|
+
create app/controllers/payments_controller.rb
|
27
|
+
route match '/payments/thank_you', :to => 'payments#thank_you', :as => 'payments_thank_you', :via => [:get]
|
28
|
+
route match '/payments/payment', :to => 'payments#payment', :as => 'paymentspayment', :via => [:get]
|
29
|
+
|
30
|
+
DESC
|
31
|
+
|
32
|
+
def manifest
|
33
|
+
copy_file "README-AuthorizeNet", "README-AuthorizeNet"
|
34
|
+
empty_directory "app/views/#{file_name}"
|
35
|
+
copy_file "payment.rails3.erb", "app/views/#{file_name}/payment.erb"
|
36
|
+
copy_file "thank_you.erb", "app/views/#{file_name}/thank_you.erb"
|
37
|
+
copy_file "layout.erb", "app/views/layouts/authorize_net.erb"
|
38
|
+
template "config.yml.rails3.erb", "config/authorize_net.yml"
|
39
|
+
copy_file "initializer.rb", "config/initializers/authorize_net.rb"
|
40
|
+
template "controller.rb.erb", "app/controllers/#{file_name}_controller.rb"
|
41
|
+
route "match '/#{plural_name}/thank_you', :to => '#{file_name}#thank_you', :as => '#{singular_name}_thank_you', :via => [:get]"
|
42
|
+
route "match '/#{plural_name}/payment', :to => '#{file_name}#payment', :as => '#{singular_name}payment', :via => [:get]"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
= Authorize.Net Ruby SDK
|
2
|
+
|
3
|
+
The Authorize.Net Ruby SDK is meant to offer an alternate object-oriented
|
4
|
+
model of development with the Authorize.net APIs (Version 3.1). The SDK is
|
5
|
+
based entirely off the name-value pair API, but performs the core payment
|
6
|
+
activities (such as error handling/parsing, network communication, and data
|
7
|
+
encoding) behind the scenes. Providing the end developer with this allows the
|
8
|
+
developer to start integrating immediately without having to write out a mass
|
9
|
+
of boiler plate code.
|
10
|
+
|
11
|
+
== Prerequisites
|
12
|
+
|
13
|
+
* Ruby 1.8.7 or higher
|
14
|
+
* RubyGem 1.3.7 or higher (to build the gem)
|
15
|
+
* RDoc 1.0 or higher (to build documentation)
|
16
|
+
* Rake 0.8.7 or higher (to use the rake tasks)
|
17
|
+
|
18
|
+
== Installation
|
19
|
+
|
20
|
+
Goto the Authorize.Net SDK download page and download the Ruby gem. Then
|
21
|
+
|
22
|
+
> gem install authorize-net-1.0.0.gem
|
23
|
+
|
24
|
+
== Usage
|
25
|
+
|
26
|
+
=== Server Integration Method (SIM)
|
27
|
+
|
28
|
+
A generator is provided to aid in setting up a Server Integration Method application. In the example below 'payments' is the name of the controller to generate.
|
29
|
+
|
30
|
+
> sudo gem install rails -v '~> 2.1'
|
31
|
+
> rails my_sim_app
|
32
|
+
> cd my_sim_app
|
33
|
+
> script/generate authorize_net_sim payments YOUR_API_LOGIN_ID YOUR_TRANSACTION_KEY MERCH_HASH_KEY
|
34
|
+
> script/server
|
35
|
+
|
36
|
+
After running the generator you will probably want to customize the payment page found in 'app/views/payments/payment.erb' and the thank you page found in 'app/views/payments/thank_you.erb'.
|
37
|
+
|
38
|
+
You may also want to customize the actual payment form and receipt pages. That can be done by making the necessary changes to the AuthorizeNet::SIM::Transaction object ('@sim_transaction') found in the +payment+ action in 'app/controllers/payments_controller.rb'. The styling of those hosted pages are controlled by the AuthorizeNet::SIM::HostedReceiptPage and AuthorizeNet::SIM::HostedPaymentForm objects (which are passed to the AuthorizeNet::SIM::Transaction).
|
39
|
+
|
40
|
+
There is also a default layout generated, 'app/views/layouts/authorize_net.erb'. If you already have your own layout, you can delete that file and the reference to it in the controller ('app/controllers/payments_controller.rb').
|
41
|
+
|
42
|
+
== Credit Card Test Numbers
|
43
|
+
|
44
|
+
For your reference, you can use the following test credit card numbers.
|
45
|
+
The expiration date must be set to the present date or later. Use 123 for
|
46
|
+
the CCV code.
|
47
|
+
|
48
|
+
American Express:: 370000000000002
|
49
|
+
Discover:: 6011000000000012
|
50
|
+
Visa:: 4007000000027
|
51
|
+
JCB:: 3088000000000017
|
52
|
+
Diners Club/ Carte Blanche:: 38000000000006
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class <%= class_name %>Controller < ApplicationController
|
2
|
+
|
3
|
+
layout 'authorize_net'
|
4
|
+
helper :authorize_net
|
5
|
+
protect_from_forgery :except => :relay_response
|
6
|
+
|
7
|
+
# GET
|
8
|
+
# Displays a payment form.
|
9
|
+
def payment
|
10
|
+
@amount = 10.00
|
11
|
+
@sim_transaction = AuthorizeNet::SIM::Transaction.new(AUTHORIZE_NET_CONFIG['api_login_id'], AUTHORIZE_NET_CONFIG['api_transaction_key'], @amount, :hosted_payment_form => true)
|
12
|
+
@sim_transaction.set_hosted_payment_receipt(AuthorizeNet::SIM::HostedReceiptPage.new(:link_method => AuthorizeNet::SIM::HostedReceiptPage::LinkMethod::GET, :link_text => 'Continue', :link_url => <%= singular_name %>_thank_you_url(:only_path => false)))
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET
|
16
|
+
# Displays a thank you page.
|
17
|
+
def thank_you
|
18
|
+
@auth_code = params[:x_auth_code]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Thanks for your purchase! Your authorization code is <%=h @auth_code %>.
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Extends the Rails::Generator::Commands classes to add support for route and gem configuration generation.
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Generator
|
5
|
+
module Commands
|
6
|
+
|
7
|
+
class Base
|
8
|
+
def route_code(route_options)
|
9
|
+
route_options[:path] = route_options[:name] unless route_options.has_key? :path
|
10
|
+
code = "map.#{route_options[:name]} '#{route_options[:path]}', :controller => '#{route_options[:controller]}', :action => '#{route_options[:action]}'"
|
11
|
+
code += ", :conditions => #{route_options[:conditions]}" if route_options.has_key? :conditions
|
12
|
+
end
|
13
|
+
|
14
|
+
def gsub_file_check(relative_destination, regexp, *args, &block)
|
15
|
+
path = destination_path(relative_destination)
|
16
|
+
content = File.read(path)
|
17
|
+
!(content =~ regexp).nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
def gem_code(gem_options)
|
21
|
+
gem_options[:lib] = gem_options[:name] unless gem_options.has_key? :lib
|
22
|
+
code = "config.gem '#{gem_options[:name]}', :lib => '#{gem_options[:lib]}'"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Here's a readable version of the long string used above in route_code;
|
27
|
+
# but it should be kept on one line to avoid inserting extra whitespace
|
28
|
+
# into routes.rb when the generator is run:
|
29
|
+
# "map.#{route_options[:name]} '#{route_options[:name]}',
|
30
|
+
# :controller => '#{route_options[:controller]}',
|
31
|
+
# :action => '#{route_options[:action]}'"
|
32
|
+
|
33
|
+
class Create
|
34
|
+
def route(route_options)
|
35
|
+
sentinel = 'ActionController::Routing::Routes.draw do |map|'
|
36
|
+
unless gsub_file_check 'config/routes.rb', /(#{Regexp.escape(route_code(route_options))})/mi
|
37
|
+
logger.route route_code(route_options)
|
38
|
+
gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |m|
|
39
|
+
"#{m}\n #{route_code(route_options)}"
|
40
|
+
end
|
41
|
+
else
|
42
|
+
logger.identical route_code(route_options)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def gem(gem_options)
|
47
|
+
sentinel = 'Rails::Initializer.run do |config|'
|
48
|
+
unless gsub_file_check 'config/environment.rb', /(#{Regexp.escape(gem_code(gem_options))})/mi
|
49
|
+
logger.gem gem_code(gem_options)
|
50
|
+
gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |m|
|
51
|
+
"#{m}\n #{gem_code(gem_options)}"
|
52
|
+
end
|
53
|
+
else
|
54
|
+
logger.identical gem_code(gem_options)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class Destroy
|
60
|
+
def route(route_options)
|
61
|
+
logger.remove_route route_code(route_options)
|
62
|
+
to_remove = "\n #{Regexp.escape(route_code(route_options))}"
|
63
|
+
gsub_file 'config/routes.rb', /(#{to_remove})/mi, ''
|
64
|
+
end
|
65
|
+
|
66
|
+
def gem(gem_options)
|
67
|
+
logger.remove_gem gem_code(gem_options)
|
68
|
+
to_remove = "\n #{Regexp.escape(gem_code(gem_options))}"
|
69
|
+
gsub_file 'config/environment.rb', /(#{to_remove})/mi, ''
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|