payson_api 0.4.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/MIT-LICENSE +16 -17
  3. data/README.md +228 -0
  4. data/lib/payson_api.rb +55 -22
  5. data/lib/payson_api/v1/client.rb +80 -0
  6. data/lib/payson_api/v1/config.rb +63 -0
  7. data/lib/payson_api/v1/envelope.rb +27 -0
  8. data/lib/payson_api/v1/errors/unknown_currency_error.rb +13 -0
  9. data/lib/payson_api/v1/errors/unknown_fees_payer_error.rb +13 -0
  10. data/lib/payson_api/v1/errors/unknown_funding_constraint_error.rb +13 -0
  11. data/lib/payson_api/v1/errors/unknown_guarantee_offering_error.rb +13 -0
  12. data/lib/payson_api/v1/errors/unknown_locale_error.rb +13 -0
  13. data/lib/payson_api/v1/errors/unknown_payment_action_error.rb +13 -0
  14. data/lib/payson_api/v1/funding.rb +38 -0
  15. data/lib/payson_api/v1/order_item.rb +43 -0
  16. data/lib/payson_api/v1/receiver.rb +46 -0
  17. data/lib/payson_api/v1/remote_error.rb +36 -0
  18. data/lib/payson_api/v1/requests/ipn.rb +19 -0
  19. data/lib/payson_api/v1/requests/payment.rb +68 -0
  20. data/lib/payson_api/v1/requests/payment_details.rb +19 -0
  21. data/lib/payson_api/v1/requests/payment_update.rb +27 -0
  22. data/lib/payson_api/v1/responses/ipn.rb +43 -0
  23. data/lib/payson_api/v1/responses/payment.rb +25 -0
  24. data/lib/payson_api/v1/responses/payment_details.rb +50 -0
  25. data/lib/payson_api/v1/responses/payment_update.rb +20 -0
  26. data/lib/payson_api/v1/responses/validate.rb +19 -0
  27. data/lib/payson_api/v1/sender.rb +28 -0
  28. data/lib/payson_api/v1/shipping_address.rb +34 -0
  29. data/lib/payson_api/v2/client.rb +67 -0
  30. data/lib/payson_api/v2/config.rb +51 -0
  31. data/lib/payson_api/v2/errors/unauthorized_error.rb +10 -0
  32. data/lib/payson_api/v2/errors/validation_error.rb +16 -0
  33. data/lib/payson_api/v2/models/account.rb +23 -0
  34. data/lib/payson_api/v2/models/checkout.rb +28 -0
  35. data/lib/payson_api/v2/models/customer.rb +27 -0
  36. data/lib/payson_api/v2/models/merchant.rb +24 -0
  37. data/lib/payson_api/v2/models/order.rb +32 -0
  38. data/lib/payson_api/v2/models/order_item.rb +33 -0
  39. data/lib/payson_api/v2/requests/create_checkout.rb +26 -0
  40. data/lib/payson_api/v2/requests/customer.rb +23 -0
  41. data/lib/payson_api/v2/requests/list_checkouts.rb +23 -0
  42. data/lib/payson_api/v2/requests/merchant.rb +25 -0
  43. data/lib/payson_api/v2/requests/order.rb +22 -0
  44. data/lib/payson_api/v2/requests/order_item.rb +27 -0
  45. data/lib/payson_api/v2/requests/update_checkout.rb +25 -0
  46. data/lib/payson_api/version.rb +3 -1
  47. metadata +70 -53
  48. data/.gitignore +0 -7
  49. data/.travis.yml +0 -5
  50. data/Gemfile +0 -2
  51. data/Guardfile +0 -9
  52. data/README.rdoc +0 -155
  53. data/Rakefile +0 -24
  54. data/lib/payson_api/client.rb +0 -79
  55. data/lib/payson_api/config.rb +0 -50
  56. data/lib/payson_api/envelope.rb +0 -21
  57. data/lib/payson_api/funding.rb +0 -34
  58. data/lib/payson_api/order_item.rb +0 -52
  59. data/lib/payson_api/receiver.rb +0 -52
  60. data/lib/payson_api/remote_error.rb +0 -31
  61. data/lib/payson_api/request/ipn.rb +0 -15
  62. data/lib/payson_api/request/payment.rb +0 -68
  63. data/lib/payson_api/request/payment_details.rb +0 -15
  64. data/lib/payson_api/request/payment_update.rb +0 -22
  65. data/lib/payson_api/response/ipn.rb +0 -36
  66. data/lib/payson_api/response/payment.rb +0 -22
  67. data/lib/payson_api/response/payment_details.rb +0 -43
  68. data/lib/payson_api/response/payment_update.rb +0 -16
  69. data/lib/payson_api/response/validate.rb +0 -15
  70. data/lib/payson_api/sender.rb +0 -29
  71. data/lib/payson_api/shipping_address.rb +0 -36
  72. data/payson_api.gemspec +0 -23
  73. data/test/fixtures/config.yml +0 -2
  74. data/test/fixtures/payment_data.yml +0 -37
  75. data/test/integration/config_test.rb +0 -15
  76. data/test/integration/payment_details_test.rb +0 -21
  77. data/test/integration/payment_test.rb +0 -65
  78. data/test/test_helper.rb +0 -76
@@ -1,52 +0,0 @@
1
- require 'cgi'
2
-
3
- module PaysonAPI
4
- class Receiver
5
- FORMAT_STRING = "receiverList.receiver(%d).%s"
6
- attr_accessor :email, :amount, :first_name, :last_name, :primary
7
-
8
- def initialize(email, amount, first_name = nil, last_name = nil, primary = true)
9
- @email = email
10
- @amount = amount
11
- @first_name = first_name
12
- @last_name = last_name
13
- @primary = primary
14
- end
15
-
16
- def self.to_hash(receivers)
17
- {}.tap do |hash|
18
- receivers.each_with_index do |receiver, index|
19
- raise "Invalid receiver" unless receiver.instance_of?(self)
20
- hash.merge!({
21
- FORMAT_STRING % [index, 'email'] => receiver.email,
22
- FORMAT_STRING % [index, 'amount'] => receiver.amount,
23
- FORMAT_STRING % [index, 'firstName'] => receiver.first_name,
24
- FORMAT_STRING % [index, 'lastName'] => receiver.last_name,
25
- FORMAT_STRING % [index, 'primary'] => receiver.primary
26
- })
27
- if receiver.first_name
28
- hash[FORMAT_STRING % [index, 'firstName']] = receiver.first_name
29
- end
30
- if receiver.last_name
31
- hash[FORMAT_STRING % [index, 'lastName']] = receiver.last_name
32
- end
33
- end
34
- end
35
- end
36
-
37
- def self.parse(data)
38
- [].tap do |receivers|
39
- i = 0
40
- while data[FORMAT_STRING % [i, 'email']]
41
- email = CGI.unescape(data[FORMAT_STRING % [i, 'email']].to_s)
42
- amount = data[FORMAT_STRING % [i, 'amount']]
43
- first_name = CGI.unescape(data[FORMAT_STRING % [i, 'firstName']].to_s)
44
- last_name = CGI.unescape(data[FORMAT_STRING % [i, 'lastName']].to_s)
45
- primary = data[FORMAT_STRING % [i, 'primary']]
46
- receivers << self.new(email, amount, first_name, last_name, primary)
47
- i += 1
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,31 +0,0 @@
1
- require 'cgi'
2
-
3
- module PaysonAPI
4
- class RemoteError
5
- attr_accessor :id, :message, :parameter
6
- FORMAT_STRING = "errorList.error(%d).%s"
7
-
8
- def initialize(id, message, parameter)
9
- @id = id
10
- @message = message
11
- @parameter = parameter
12
- end
13
-
14
- def self.parse(data)
15
- [].tap do |errors|
16
- i = 0
17
- while data[FORMAT_STRING % [i, 'errorId']]
18
- id = data[FORMAT_STRING % [i, 'errorId']]
19
- message = CGI.unescape(data[FORMAT_STRING % [i, 'message']])
20
- parameter = CGI.unescape(data[FORMAT_STRING % [i, 'parameter']])
21
- errors << self.new(id, message, parameter)
22
- i += 1
23
- end
24
- end
25
- end
26
-
27
- def to_s
28
- "ID: #{@id}, Message: #{@message}, Parameter: #{@parameter}"
29
- end
30
- end
31
- end
@@ -1,15 +0,0 @@
1
- module PaysonAPI
2
- module Request
3
- class IPN
4
- attr_accessor :data
5
-
6
- def initialize(data)
7
- @data = data
8
- end
9
-
10
- def to_s
11
- @data
12
- end
13
- end
14
- end
15
- end
@@ -1,68 +0,0 @@
1
- module PaysonAPI
2
- module Request
3
- class Payment
4
- attr_accessor :return_url, :cancel_url, :ipn_url, :memo, :sender, :receivers,
5
- :locale, :currency, :tracking_id, :invoice_fee, :order_items, :fundings,
6
- :fees_payer, :guarantee_offered, :custom
7
-
8
- def initialize(return_url, cancel_url, ipn_url, memo, sender, receivers, custom = nil)
9
- @return_url = return_url
10
- @cancel_url = cancel_url
11
- @ipn_url = ipn_url
12
- @memo = memo
13
- @sender = sender
14
- @receivers = receivers
15
- @custom = custom
16
- end
17
-
18
- def to_hash
19
- {}.tap do |hash|
20
- # Append mandatory params
21
- hash['returnUrl'] = @return_url
22
- hash['cancelUrl'] = @cancel_url
23
- hash['memo'] = @memo
24
- hash.merge!(@sender.to_hash)
25
- hash.merge!(Receiver.to_hash(@receivers))
26
-
27
- # Append optional params
28
- append_locale(hash, @locale) if @locale
29
- append_currency(hash, @currency) if @currency
30
- append_fees_payer(hash, @fees_payer) if @fees_payer
31
- append_guarantee(hash, @guarantee_offered) if @guarantee_offered
32
- hash.merge!(OrderItem.to_hash(@order_items)) if @order_items
33
- hash.merge!(Funding.to_hash(@fundings)) if @fundings
34
- hash['ipnNotificationUrl'] = @ipn_url if @ipn_url
35
- hash['invoiceFee'] = @invoice_fee if @invoice_fee
36
- hash['trackingId'] = @tracking_id if @tracking_id
37
- hash['custom'] = @custom if @custom
38
- end
39
- end
40
-
41
- private
42
-
43
- def append_locale(hash, locale)
44
- raise "Unknown locale: #{locale}" if !LOCALES.include?(locale)
45
- hash['localeCode'] = locale
46
- end
47
-
48
- def append_currency(hash, currency)
49
- raise "Unknown currency: #{currency}" if !CURRENCIES.include?(currency)
50
- hash['currencyCode'] = currency
51
- end
52
-
53
- def append_guarantee(hash, guarantee_offered)
54
- if !GUARANTEE_OFFERINGS.include?(guarantee_offered)
55
- raise "Unknown guarantee offering: #{guarantee_offered}"
56
- end
57
- hash['guaranteeOffered'] = guarantee_offered
58
- end
59
-
60
- def append_fees_payer(hash, fees_payer)
61
- if !FEES_PAYERS.include?(fees_payer)
62
- raise "Unknown fees payer: #{fees_payer}"
63
- end
64
- hash['feesPayer'] = fees_payer
65
- end
66
- end
67
- end
68
- end
@@ -1,15 +0,0 @@
1
- module PaysonAPI
2
- module Request
3
- class PaymentDetails
4
- attr_accessor :token
5
-
6
- def initialize(token)
7
- @token = token
8
- end
9
-
10
- def to_hash
11
- { 'token' => @token }
12
- end
13
- end
14
- end
15
- end
@@ -1,22 +0,0 @@
1
- module PaysonAPI
2
- module Request
3
- class PaymentUpdate
4
- attr_accessor :token, :action
5
-
6
- def initialize(token, action)
7
- @token = token
8
- if !PAYMENT_ACTIONS.include?(action)
9
- raise "Unknown payment update action: #{action}"
10
- end
11
- @action = action
12
- end
13
-
14
- def to_hash
15
- {}.tap do |hash|
16
- hash['token'] = @token
17
- hash['action'] = @action
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,36 +0,0 @@
1
- module PaysonAPI
2
- module Response
3
- class IPN
4
- attr_accessor :purchase_id, :sender_email, :status,
5
- :payment_type, :guarantee_status, :guarantee_deadline_at,
6
- :invoice_status, :custom, :tracking_id, :receivers, :currency,
7
- :order_items, :fundings, :token, :shipping_address, :raw, :hash
8
-
9
- def initialize(raw_data)
10
- @raw = raw_data
11
- data_hash = PaysonAPI::Client.params_to_hash(raw_data)
12
- @purchase_id = data_hash['purchaseId']
13
- @payment_type = data_hash['type']
14
- @comment = data_hash['custom']
15
- @tracking_id = data_hash['trackingId']
16
- @currency = data_hash['currencyCode']
17
- @sender_email = data_hash['senderEmail']
18
- @status = data_hash['status']
19
- @token = data_hash['token']
20
- @fundings = Funding.parse(data_hash)
21
- @receivers = Receiver.parse(data_hash)
22
- @order_items = OrderItem.parse(data_hash)
23
- @hash = data_hash['HASH']
24
-
25
- case @payment_type
26
- when 'GUARANTEE'
27
- @guarantee_status = data_hash['guaranteeStatus']
28
- @guarantee_deadline_at = Time.parse(data_hash['guaranteeDeadlineTimestamp'])
29
- when 'INVOICE'
30
- @invoice_status = data_hash['invoiceStatus']
31
- @shipping_address = ShippingAddress.parse(data_hash)
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,22 +0,0 @@
1
- module PaysonAPI
2
- module Response
3
- class Payment
4
- attr_accessor :envelope, :token, :errors
5
-
6
- def initialize(data)
7
- @envelope = Envelope.parse(data)
8
- @token = data['TOKEN']
9
- @errors = RemoteError.parse(data)
10
- end
11
-
12
- def success?
13
- @envelope.ack == 'SUCCESS'
14
- end
15
-
16
- def forward_url
17
- PAYSON_WWW_HOST % (PaysonAPI.test? ? 'test-www' : 'www') +
18
- PAYSON_WWW_PAY_FORWARD_URL % @token
19
- end
20
- end
21
- end
22
- end
@@ -1,43 +0,0 @@
1
- require 'cgi'
2
-
3
- module PaysonAPI
4
- module Response
5
- class PaymentDetails
6
- attr_accessor :envelope, :purchase_id, :sender_email, :status,
7
- :payment_type, :guarantee_status, :guarantee_deadline_at,
8
- :invoice_status, :custom, :tracking_id, :receivers, :currency,
9
- :order_items, :errors, :fundings, :token, :shipping_address
10
-
11
- def initialize(data)
12
- @envelope = Envelope.parse(data)
13
- @purchase_id = data['purchaseId']
14
- @payment_type = data['type']
15
- @comment = data['custom']
16
- @tracking_id = data['trackingId']
17
- @currency = data['currencyCode']
18
- @sender_email = data['senderEmail']
19
- @status = data['status']
20
- @token = data['token']
21
- @fundings = Funding.parse(data)
22
- @receivers = Receiver.parse(data)
23
- @order_items = OrderItem.parse(data)
24
- @errors = RemoteError.parse(data)
25
-
26
- case @payment_type
27
- when 'GUARANTEE'
28
- @guarantee_status = data['guaranteeStatus']
29
- @guarantee_deadline_at = Time.parse(CGI.unescape(data['guaranteeDeadlineTimestamp']))
30
- when 'INVOICE'
31
- @invoice_status = data['invoiceStatus']
32
- if %w[ORDERCREATED SHIPPED DONE CREDITED].include?(@invoice_status)
33
- @shipping_address = ShippingAddress.parse(data)
34
- end
35
- end
36
- end
37
-
38
- def success?
39
- @envelope.ack == 'SUCCESS'
40
- end
41
- end
42
- end
43
- end
@@ -1,16 +0,0 @@
1
- module PaysonAPI
2
- module Response
3
- class PaymentUpdate
4
- attr_accessor :envelope, :errors
5
-
6
- def initialize(data)
7
- @envelope = Envelope.parse(data)
8
- @errors = RemoteError.parse(data)
9
- end
10
-
11
- def success?
12
- @envelope.ack == 'SUCCESS'
13
- end
14
- end
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- module PaysonAPI
2
- module Response
3
- class Validate
4
- attr_accessor :data
5
-
6
- def initialize(data)
7
- @data = data
8
- end
9
-
10
- def verified?
11
- @data == 'VERIFIED'
12
- end
13
- end
14
- end
15
- end
@@ -1,29 +0,0 @@
1
- require 'cgi'
2
-
3
- module PaysonAPI
4
- class Sender
5
- FORMAT_STRING = "sender%s"
6
- attr_accessor :email, :first_name, :last_name
7
-
8
- def initialize(email, first_name, last_name)
9
- @email = email
10
- @first_name = first_name
11
- @last_name = last_name
12
- end
13
-
14
- def to_hash
15
- {}.tap do |hash|
16
- hash[FORMAT_STRING % 'Email'] = @email
17
- hash[FORMAT_STRING % 'FirstName'] = @first_name
18
- hash[FORMAT_STRING % 'LastName'] = @last_name
19
- end
20
- end
21
-
22
- def self.parse(data)
23
- email = data[FORMAT_STRING % 'email']
24
- first_name = CGI.unescape(data[FORMAT_STRING % 'FirstName'].to_s)
25
- last_name = CGI.unescape(data[FORMAT_STRING % 'LastName'].to_s)
26
- self.new(email, first_name, last_name)
27
- end
28
- end
29
- end
@@ -1,36 +0,0 @@
1
- require 'cgi'
2
-
3
- module PaysonAPI
4
- class ShippingAddress
5
- FORMAT_STRING = "shippingAddress.%s"
6
- attr_accessor :name, :street_address, :postal_code, :city, :country
7
-
8
- def initialize(name, street_address, postal_code, city, country)
9
- @name = name
10
- @street_address = street_address
11
- @postal_code = postal_code
12
- @city = city
13
- @country = country
14
- end
15
-
16
- def to_hash
17
- {}.tap do |hash|
18
- hash[FORMAT_STRING % 'name'] = @name
19
- hash[FORMAT_STRING % 'streetAddress'] = @street_address
20
- hash[FORMAT_STRING % 'postalCode'] = @postal_code
21
- hash[FORMAT_STRING % 'city'] = @city
22
- hash[FORMAT_STRING % 'country'] = @country
23
- end
24
- end
25
-
26
- def self.parse(data)
27
- return unless data[FORMAT_STRING % 'name']
28
- name = CGI.unescape(data[FORMAT_STRING % 'name'].to_s)
29
- street_address = CGI.unescape(data[FORMAT_STRING % 'streetAddress'].to_s)
30
- postal_code = CGI.unescape(data[FORMAT_STRING % 'postalCode'].to_s)
31
- city = CGI.unescape(data[FORMAT_STRING % 'city'].to_s)
32
- country = CGI.unescape(data[FORMAT_STRING % 'country'].to_s)
33
- self.new(name, street_address, postal_code, city, country)
34
- end
35
- end
36
- end
data/payson_api.gemspec DELETED
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- $:.push File.expand_path("../lib", __FILE__)
4
- require "payson_api/version"
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "payson_api"
8
- s.version = PaysonAPI::VERSION
9
- s.authors = ["Christopher Svensson"]
10
- s.email = ["stoffus@stoffus.com"]
11
- s.homepage = "https://github.com/stoffus/payson_api"
12
- s.summary = %q{Client for Payson API}
13
- s.description = %q{Client that enables access to the Payson payment gateway API.}
14
- s.license = 'MIT'
15
-
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
-
21
- s.add_development_dependency 'rake', '~> 0'
22
- s.add_development_dependency 'guard-test', '~> 0'
23
- end