samurai 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,221 @@
1
+ Samurai
2
+ =======
3
+
4
+ The Samurai merchant gem give you a nice set of ruby object to play with
5
+ instead of hacking the Samurai API yourself. You'll need a merchant account
6
+ with samurai.feefighters.com and your credentials and you'll need your
7
+ application to track a few identifying tokens with your.
8
+
9
+
10
+ Installation
11
+ ------------
12
+
13
+ Install Samurai just like any other gem. In Rails3 add the gem to your Gemfile:
14
+
15
+ gem "samurai"
16
+
17
+ then run:
18
+
19
+ bundle install
20
+
21
+ In Rails2 add the gem to your environment.rb:
22
+
23
+ config.gem "samurai"
24
+
25
+ then run:
26
+
27
+ rake gems:install
28
+
29
+
30
+ Configuration
31
+ -------------
32
+
33
+ Set the Samurai.options hash, after the gem has loaded and before you'll use
34
+ it. Typically this belongs in your environment.rb file or it's own initializer.
35
+
36
+ config.after_initialize do
37
+ Samurai.options = {
38
+ :merchant_key => 'your_merchant_key',
39
+ :merchant_password => 'your_merchant_password',
40
+ :gateway_token => 'your_default_gateway_token'
41
+ }
42
+ end
43
+
44
+ The :gateway_token param is optional. If you set it,
45
+ `Samurai::Gateway.the_gateway` will return the gateway with this token. You
46
+ can always call `Samurai::Gateway.find('an_arbitrary_gateway_token')` to
47
+ retrieve any of your gateways.
48
+
49
+
50
+ Payment Methods
51
+ ---------------
52
+
53
+ A Payment Method is created each time a user stores their billing information
54
+ in Samurai.
55
+
56
+ ### Creating Payment Methods
57
+
58
+ To let your customers create a Payment Method, place a credit card
59
+ entry form on your site like the one below.
60
+
61
+ <form action="https://api.ubergateway.com/v1/payment_methods" method="POST">
62
+ <fieldset>
63
+ <input name="redirect_url" type="hidden" value="http://yourdomain.com/anywhere" />
64
+ <input name="merchant_key" type="hidden" value="[Your Merchant Key]" />
65
+
66
+ <!-- Before populating the ‘custom’ parameter, remember to escape reserved xml characters
67
+ like <, > and & into their safe counterparts like &lt;, &gt; and &amp; -->
68
+ <input name="custom" type="hidden" value="Any value you want us to save with this payment method" />
69
+
70
+ <label for="credit_card_first_name">First name</label>
71
+ <input id="credit_card_first_name" name="credit_card[first_name]" type="text" />
72
+
73
+ <label for="credit_card_last_name">Last name</label>
74
+ <input id="credit_card_last_name" name="credit_card[last_name]" type="text" />
75
+
76
+ <label for="credit_card_address_1">Address 1</label>
77
+ <input id="credit_card_address_1" name="credit_card[address_1]" type="text" />
78
+
79
+ <label for="credit_card_address_2">Address 2</label>
80
+ <input id="credit_card_address_2" name="credit_card[address_2]" type="text" />
81
+
82
+ <label for="credit_card_city">City</label>
83
+ <input id="credit_card_city" name="credit_card[city]" type="text" />
84
+
85
+ <label for="credit_card_state">State</label>
86
+ <input id="credit_card_state" name="credit_card[state]" type="text" />
87
+
88
+ <label for="credit_card_zip">Zip</label>
89
+ <input id="credit_card_zip" name="credit_card[zip]" type="text" />
90
+
91
+ <label for="credit_card_card_type">Card Type</label>
92
+ <select id="credit_card_card_type" name="credit_card[card_type]">
93
+ <option value="visa">Visa</option>
94
+ <option value="master">MasterCard</option>
95
+ </select>
96
+
97
+ <label for="credit_card_card_number">Card Number</label>
98
+ <input id="credit_card_card_number" name="credit_card[card_number]" type="text" />
99
+
100
+ <label for="credit_card_verification_value">Security Code</label>
101
+ <input id="credit_card_verification_value" name="credit_card[cvv]" type="text" />
102
+
103
+ <label for="credit_card_month">Expires on</label>
104
+ <input id="credit_card_month" name="credit_card[expiry_month]" type="text" />
105
+ <input id="credit_card_year" name="credit_card[expiry_year]" type="text" />
106
+
107
+ <button type="submit">Submit Payment</button>
108
+ </fieldset>
109
+ </form>
110
+
111
+ After the form submits to Samurai, the user's browser will be returned to the
112
+ URL that you specify in the redirect_url field, with an additional query
113
+ parameter containing the `payment_method_token`. You should save the
114
+ `payment_method_token` and use it from this point forward.
115
+
116
+ ### Fetching a Payment Method
117
+
118
+ To retrieve the payment method and ensure that the sensitive data is valid:
119
+
120
+ payment_method = Samurai::PaymentMethod.find(payment_method_token)
121
+ payment_method.is_sensitive_data_valid # => true if the credit_card[card_number] passed checksum
122
+ # and the cvv (if included) is a number of 3 or 4 digits
123
+
124
+ **NB:** Samurai will not validate any non-sensitive data so it is up to your
125
+ application to perform any additional validation on the payment_method.
126
+
127
+ ### Updating Payment Methods
128
+
129
+ You can update the payment method by directly updating its properties or by
130
+ loading it from a set of attributes and then saving the object:
131
+
132
+ payment_method.first_name = 'Graeme'
133
+ payment_method.save
134
+
135
+ OR
136
+
137
+ payment_method.load(hash_of_credit_card_values)
138
+ payment_method.save
139
+
140
+ ### Retaining and Redacting Payment Methods
141
+
142
+ Unless you create a transaction on a payment method right away, that payment
143
+ method will be purged from Samurai. If you want to hang on to a payment method
144
+ for a while before making an authorization or purchase on it, you must retain it:
145
+
146
+ payment_method.retain
147
+
148
+ If you are finished with a payment method that you have either previously retained
149
+ or done one or more transactions with, you may redact the payment method. This
150
+ removes any sensitive information from Samurai related to the payment method,
151
+ but it still keeps the transaction data for reference. No further transactions
152
+ can be processed on a redacted payment method.
153
+
154
+ payment_method.redact
155
+
156
+
157
+ Processing Transactions
158
+ -----------------------
159
+
160
+ Your application needs to be prepared to track several identifiers. The payment_method_token
161
+ identifies a payment method stored in Samurai. Each transaction processed
162
+ has a transaction_token that identifies a group of transactions (initiated with
163
+ a purchase or authorization) and a reference_id that identifies the specific
164
+ transaction.
165
+
166
+ ### Purchases and Authorizations
167
+
168
+ When you want to start to process a new purchase or authorization on a payment
169
+ method, Samurai needs to know which of your gateways you want to use. You can
170
+ initiate a purchase (if your gateway supports it) or an authorization against
171
+ a gateway by:
172
+
173
+ gateway = Samurai::Gateway.the_gateway # if you set Samurai.options[:gateway_token]
174
+ gateway = Samurai::Gateway.find('a_gateway_token') # if you have multiple gateways
175
+ purchase = gateway.purchase(payment_method_token, amount, options)
176
+ purchase_reference_id = purchase.reference_id # save this value, you can find the transaction with it later
177
+
178
+ An authorization is created the same way:
179
+
180
+ authorization = gateway.authorize(payment_method_token, amount, options)
181
+ authorization_reference_id = authorization.reference_id # save this value, you can find the transaction with it later
182
+
183
+ You can specify options for either transaction type. Options is a hash that may contain:
184
+
185
+ * descriptor: a string description of the charge
186
+ * billing_reference: a string reference for the transaction
187
+ * customer_reference: a string that identifies the customer to your application
188
+ * custom: a custom value that Samurai will store but not forward to the gateway
189
+
190
+ ### Capturing an Authorization
191
+
192
+ An authorization only puts a hold on the funds that you specified. It won't
193
+ capture the money. You'll need to call capture on the authorization to do this.
194
+
195
+ authorization = Samurai::Transaction.find(authorization_reference_id) # get the authorization created previously
196
+ capture = authorization.capture # captures the full amount of the authorization
197
+
198
+ ### Voiding a Transaction
199
+
200
+ A transaction that was recently created can be voided, if is has not been
201
+ settled. A transaction that has settled has already deposited funds into your
202
+ merchant account.
203
+
204
+ transaction = Samurai::Transaction.find(purchase_reference_id) # gets the purchase created before previously
205
+ void_transaction = transaction.void # voids the transaction
206
+
207
+ ### Crediting a Transaction
208
+
209
+ Once a captured authorization or purchase has settled, you need to credit the
210
+ transaction if you want to reverse a charge.
211
+
212
+ purchase = Samurai::Transaction.find(purchase_reference_id)
213
+ credit = purchse.credit # credits the full amount of the original purchase
214
+
215
+
216
+ ActiveResource::Base
217
+ --------------------
218
+
219
+ Samurai is dependent on the ActiveResource gem version 2.2.2 or greater. Any
220
+ Samurai::Base objects descend from ActiveResource::Base, so you can call any
221
+ ActiveResource instance or class methods on the object or their classes.
@@ -6,6 +6,7 @@ class Samurai::PaymentMethod < Samurai::Base
6
6
  self.token
7
7
  end
8
8
 
9
+ # Alias for +payment_method_token+
9
10
  def token
10
11
  self.payment_method_token
11
12
  end
@@ -16,11 +17,13 @@ class Samurai::PaymentMethod < Samurai::Base
16
17
  self.post(:retain)
17
18
  end
18
19
 
20
+ # Redacts sensitive information from the payment method, rendering it unusable.
19
21
  def redact
20
22
  self.post(:redact)
21
23
  end
22
24
 
23
- def custom_data
25
+ # Retrieves JSON formatted custom data that is encoded in the custom_data attribute
26
+ def custom_json_data
24
27
  @custom_data ||= self.custom && (JSON.parse(self.custom) rescue {}).symbolize_keys
25
28
  end
26
29
  end
@@ -1,3 +1,3 @@
1
1
  module Samurai
2
- VERSION = "0.2.1".freeze
2
+ VERSION = "0.2.2".freeze
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samurai
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Graeme Rouse
@@ -94,7 +94,7 @@ extra_rdoc_files: []
94
94
  files:
95
95
  - .gitignore
96
96
  - Gemfile
97
- - README.md
97
+ - README.markdown
98
98
  - Rakefile
99
99
  - lib/samurai.rb
100
100
  - lib/samurai/base.rb
data/README.md DELETED
@@ -1,9 +0,0 @@
1
- Samurai
2
- -------
3
-
4
- If you are an online merchant and using samurai.feefighers.com,
5
- this gem will make your life easy. Integrate with the
6
- samuari.feefighters.com portal and process transactions.
7
-
8
-
9
- Easy.