presto_api 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d398e4d89667403cd394bd7750bb2376673842eb
4
- data.tar.gz: d5de7828f581707d280f191fe243665e3110e013
3
+ metadata.gz: 31fe1a9517eb0077ce1eaa5a96dd7c98ccdb50eb
4
+ data.tar.gz: 68bd2862a4d157fc638eb7aeab60dd8bf0219d31
5
5
  SHA512:
6
- metadata.gz: 74d0fb76457db31f595cc71719136f933409006000851f0772da70c7e0c73e50cc04332395369a4ef2fe4ac2451f64c5484afc7f639d319ecb03102f43b25f7f
7
- data.tar.gz: 1e6bded2c7d248b9f747fc681de8487a8253da6ea4650d3b037613be2331d53f15c5d29ea53c4294d368295f3e028b31c833ba1a2485825b9f1e078385875335
6
+ metadata.gz: aed6204106e66a72529e8e00006cf7949eeec924152c0eb82982bbd454048c1d9914a4b6e86b730a62d229df21597d27b49e3a5593eb0df2bebb191fae8e37c3
7
+ data.tar.gz: 9362ada4ff9cfd99f4414445025789436a0fb6b66e0efaeffcc1680180f0333e6e50c36ea6f7e24191ec800ff390ee7f6cbe1ac86484f11612fff91af66de748
@@ -1,3 +1,3 @@
1
1
  module PrestoAPI
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/presto_api.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'mechanize'
3
+ require 'open-uri'
4
+ require 'json'
5
+ require 'base64'
3
6
 
4
7
  module PrestoAPI
5
8
  class Base
@@ -53,6 +56,13 @@ module PrestoAPI
53
56
  :loyalty_discount
54
57
  end
55
58
 
59
+ class CreditCard
60
+ attr_accessor :name,
61
+ :number,
62
+ :expiry_month,
63
+ :expiry_year
64
+ end
65
+
56
66
  class Client
57
67
  def user_with_username_password(username, password)
58
68
  card_number = card_number_from_page(login_with_username_password(username, password))
@@ -74,6 +84,16 @@ module PrestoAPI
74
84
  card_status_from_page(login_with_card_number(card_number))
75
85
  end
76
86
 
87
+ def load_registered_card(username, password, email, amount, credit_card)
88
+ login_with_username_password(username, password)
89
+ load_card(amount, email, credit_card)
90
+ end
91
+
92
+ def load_unregistered_card(card_number, email, amount, credit_card)
93
+ login_with_card_number(card_number)
94
+ load_card(amount, email, credit_card)
95
+ end
96
+
77
97
  private
78
98
 
79
99
  def login_with_username_password(username, password)
@@ -181,6 +201,79 @@ module PrestoAPI
181
201
  transaction_history
182
202
  end
183
203
 
204
+ def load_card(amount, email, credit_card)
205
+ # Check that we want to load a dollar value onto the card
206
+ page = agent.get('https://www.prestocard.ca/en-US/Pages/TransactionalPages/ReloadEpurse.aspx')
207
+ form = page.forms.first
208
+ radio_button = form.radiobutton_with(:id => 'ctl00_SPWebPartManager1_LoadePurseWebPartWebpartControl_ctl00_wizardLoadEPurse_webpartPeriodPassWebPart_ctl00_wizardPeriodPassSelection_radioButtonListProducts_0')
209
+ radio_button.check
210
+ button = form.button_with(:name => "ctl00$SPWebPartManager1$LoadePurseWebPartWebpartControl$ctl00$wizardLoadEPurse$webpartPeriodPassWebPart$ctl00$wizardPeriodPassSelection$buttonNextinProductSelection")
211
+ page = agent.submit(form, button)
212
+
213
+ # Enter the amount to add to the card and our email address
214
+ form = page.forms.first
215
+ amount_field = form.field_with(:id => "ctl00_SPWebPartManager1_LoadePurseWebPartWebpartControl_ctl00_wizardLoadEPurse_textBoxamountToReload")
216
+ amount_field.value = amount
217
+ email_field = form.field_with(:id => "ctl00_SPWebPartManager1_LoadePurseWebPartWebpartControl_ctl00_wizardLoadEPurse_textBoxemailAddress")
218
+ email_field.value = email
219
+ button = form.button_with(:name => "ctl00$SPWebPartManager1$LoadePurseWebPartWebpartControl$ctl00$wizardLoadEPurse$buttonConfirmReload")
220
+ page = agent.submit(form, button)
221
+
222
+ # Confirm Amount
223
+ form = page.forms.first
224
+ button = form.button_with(:name => "ctl00$SPWebPartManager1$LoadePurseWebPartWebpartControl$ctl00$wizardLoadEPurse$buttonConfirmInVerification")
225
+ page = agent.submit(form, button)
226
+
227
+ # Intermediate Moneris Submit
228
+ storeId = page.body[/storeId = '[^\s]*'/,0][/'.*'/,0][1..-2]
229
+ hppKey = page.body[/hppKey = '[^\s]*'/,0][/'.*'/,0][1..-2]
230
+ totalCharge = page.body[/totalCharge = '[^\s]*'/,0][/'.*'/,0][1..-2]
231
+ orderId = page.body[/orderId = '[^\s]*'/,0][/'.*'/,0][1..-2]
232
+ language = page.body[/language = '[^\s]*'/,0][/'.*'/,0][1..-2]
233
+
234
+ form = page.forms.first
235
+ form.field_with(:id => "ps_store_id").value = storeId
236
+ form.field_with(:id => "hpp_key").value = hppKey
237
+ form.field_with(:id => "charge_total").value = totalCharge
238
+ form.field_with(:id => "order_id").value = orderId
239
+ form.field_with(:id => "lang").value = language
240
+ form.action = "https://www3.moneris.com/HPPDP/index.php"
241
+ page = form.submit
242
+
243
+ # Enter Payment Details
244
+ callCCPurchase = page.body[/function callCCPurchase\(\)[^}]*/,0]
245
+
246
+ hpp_id = callCCPurchase[/hpp_id=[^"]+/,0]
247
+ hpp_id["hpp_id="] = ""
248
+ hpp_ticket = callCCPurchase[/hpp_ticket=[^"]+/,0]
249
+ hpp_ticket["hpp_ticket="] = ""
250
+ pan = credit_card.number
251
+ pan_mm = credit_card.expiry_month
252
+ pan_yy = credit_card.expiry_year
253
+ cardholder = credit_card.name
254
+
255
+ post_data = "hpp_id=" + CGI::escape(hpp_id) +
256
+ "&hpp_ticket=" + CGI::escape(hpp_ticket) +
257
+ "&pan=" + CGI::escape(pan) +
258
+ "&pan_mm=" + CGI::escape(pan_mm) +
259
+ "&pan_yy=" + CGI::escape(pan_yy) +
260
+ "&cardholder=" + CGI::escape(cardholder) +
261
+ "&doTransaction=cc_purchase"
262
+
263
+ # Send Payment
264
+ headers = { 'Content-Type' => 'application/x-www-form-urlencoded', 'Connection' => 'close', 'Content-length' => post_data.length }
265
+ page = agent.post( 'https://www3.moneris.com/HPPDP/hprequest.php', post_data, headers)
266
+
267
+ # Confirm with Credit Card Provider
268
+ parsed = JSON.parse(page.body)
269
+ form_text_encoded = parsed['response']['data']['form']
270
+ form_text_decoded = Base64.decode64(form_text_encoded)
271
+
272
+ # Send the decoded HTML back to the client so the user can
273
+ # confirm with their credit card provider
274
+ form_text_decoded
275
+ end
276
+
184
277
  def agent
185
278
  @agent ||= Mechanize.new
186
279
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Simard