remit 0.0.6 → 2.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 (102) hide show
  1. data/README.markdown +36 -5
  2. data/lib/remit.rb +35 -39
  3. data/lib/remit/common.rb +79 -24
  4. data/lib/remit/data_types.rb +118 -17
  5. data/lib/remit/get_pipeline.rb +160 -80
  6. data/lib/remit/inbound_request.rb +85 -0
  7. data/lib/remit/ipn_request.rb +4 -39
  8. data/lib/remit/operations/cancel.rb +20 -0
  9. data/lib/remit/operations/cancel_subscription_and_refund.rb +5 -1
  10. data/lib/remit/operations/cancel_token.rb +1 -0
  11. data/lib/remit/operations/fund_prepaid.rb +6 -4
  12. data/lib/remit/operations/get_account_activity.rb +5 -34
  13. data/lib/remit/operations/get_account_balance.rb +14 -11
  14. data/lib/remit/operations/get_all_credit_instruments.rb +2 -0
  15. data/lib/remit/operations/get_all_prepaid_instruments.rb +2 -0
  16. data/lib/remit/operations/get_debt_balance.rb +9 -4
  17. data/lib/remit/operations/get_outstanding_debt_balance.rb +8 -5
  18. data/lib/remit/operations/get_payment_instruction.rb +2 -0
  19. data/lib/remit/operations/get_prepaid_balance.rb +9 -5
  20. data/lib/remit/operations/get_recipient_verification_status.rb +25 -0
  21. data/lib/remit/operations/get_token_by_caller.rb +5 -1
  22. data/lib/remit/operations/get_token_usage.rb +5 -1
  23. data/lib/remit/operations/get_tokens.rb +5 -1
  24. data/lib/remit/operations/get_total_prepaid_liability.rb +9 -5
  25. data/lib/remit/operations/get_transaction.rb +1 -25
  26. data/lib/remit/operations/get_transaction_status.rb +28 -0
  27. data/lib/remit/operations/install_payment_instruction.rb +8 -1
  28. data/lib/remit/operations/pay.rb +5 -9
  29. data/lib/remit/operations/refund.rb +20 -11
  30. data/lib/remit/operations/reserve.rb +2 -4
  31. data/lib/remit/operations/settle.rb +2 -1
  32. data/lib/remit/operations/settle_debt.rb +2 -4
  33. data/lib/remit/operations/subscribe_for_caller_notification.rb +2 -0
  34. data/lib/remit/operations/unsubscribe_for_caller_notification.rb +2 -0
  35. data/lib/remit/operations/write_off_debt.rb +2 -4
  36. data/lib/remit/pipeline_response.rb +8 -41
  37. data/lib/remit/signature_utils_for_outbound.rb +74 -0
  38. data/lib/remit/verify_signature.rb +21 -0
  39. data/spec/integrations/get_account_activity_spec.rb +25 -19
  40. data/spec/integrations/get_tokens_spec.rb +9 -7
  41. data/spec/integrations/integrations_helper.rb +7 -0
  42. data/spec/integrations/ipn_request_spec.rb +28 -20
  43. data/spec/integrations/pipeline_response_spec.rb +27 -0
  44. data/spec/integrations/verify_signature_spec.rb +140 -0
  45. data/spec/mocks/CancelResponse.xml +13 -0
  46. data/spec/mocks/CancelSubscriptionAndRefundResponse.xml +10 -0
  47. data/spec/mocks/CancelTokenResponse.xml +6 -0
  48. data/spec/mocks/ErrorResponse.xml +15 -0
  49. data/spec/mocks/FundPrepaidResponse.xml +11 -0
  50. data/spec/mocks/GetAccountActivityResponse.xml +68 -0
  51. data/spec/mocks/GetAccountBalanceResponse.xml +34 -0
  52. data/spec/mocks/GetDebtBalanceResponse.xml +21 -0
  53. data/spec/mocks/GetOutstandingDebtBalanceResponse.xml +21 -0
  54. data/spec/mocks/GetPaymentInstructionResponse.xml +25 -0
  55. data/spec/mocks/GetPrepaidBalanceResponse.xml +21 -0
  56. data/spec/mocks/GetRecipientVerificationStatusResponse.xml +9 -0
  57. data/spec/mocks/GetTokenByCallerResponse.xml +22 -0
  58. data/spec/mocks/GetTokenUsageResponse.xml +28 -0
  59. data/spec/mocks/GetTokensResponse.xml +22 -0
  60. data/spec/mocks/GetTotalPrepaidLiabilityResponse.xml +21 -0
  61. data/spec/mocks/GetTransactionResponse.xml +76 -0
  62. data/spec/mocks/GetTransactionStatusResponse.xml +16 -0
  63. data/spec/mocks/InstallPaymentInstructionResponse.xml +10 -0
  64. data/spec/mocks/PayResponse.xml +11 -0
  65. data/spec/mocks/RefundResponse.xml +11 -0
  66. data/spec/mocks/ReserveResponse.xml +11 -0
  67. data/spec/mocks/SettleDebtResponse.xml +11 -0
  68. data/spec/mocks/SettleResponse.xml +11 -0
  69. data/spec/mocks/VerifySignatureResponse.xml +11 -0
  70. data/spec/mocks/WriteOffDebtResponse.xml +11 -0
  71. data/spec/mocks/errors/InvalidParameterValue.xml +10 -0
  72. data/spec/mocks/errors/InvalidParams_certificateUrl.xml +2 -0
  73. data/spec/mocks/errors/RequestExpired.xml +10 -0
  74. data/spec/spec_helper.rb +59 -10
  75. data/spec/units/cancel_subscription_and_refund_spec.rb +29 -0
  76. data/spec/units/cancel_token_spec.rb +24 -0
  77. data/spec/units/fund_prepaid_spec.rb +28 -0
  78. data/spec/units/get_account_activity_spec.rb +58 -0
  79. data/spec/units/get_account_balance_spec.rb +28 -0
  80. data/spec/units/get_debt_balance_spec.rb +29 -0
  81. data/spec/units/get_outstanding_debt_balance_spec.rb +29 -0
  82. data/spec/units/get_pipeline_spec.rb +16 -0
  83. data/spec/units/get_prepaid_balance_spec.rb +29 -0
  84. data/spec/units/get_recipient_verification_status_spec.rb +26 -0
  85. data/spec/units/get_token_by_caller_spec.rb +56 -0
  86. data/spec/units/get_token_usage_spec.rb +51 -0
  87. data/spec/units/get_tokens_spec.rb +56 -0
  88. data/spec/units/get_total_prepaid_liability_spec.rb +26 -0
  89. data/spec/units/get_transaction_spec.rb +103 -0
  90. data/spec/units/get_transaction_status_spec.rb +44 -0
  91. data/spec/units/pay_spec.rb +36 -57
  92. data/spec/units/refund_spec.rb +41 -0
  93. data/spec/units/reserve_spec.rb +41 -0
  94. data/spec/units/settle_debt_spec.rb +41 -0
  95. data/spec/units/settle_spec.rb +41 -0
  96. data/spec/units/units_helper.rb +23 -2
  97. data/spec/units/write_off_debt_spec.rb +41 -0
  98. metadata +116 -12
  99. data/lib/remit/operations/discard_results.rb +0 -18
  100. data/lib/remit/operations/get_results.rb +0 -27
  101. data/lib/remit/operations/retry_transaction.rb +0 -18
  102. data/spec/units/get_results_spec.rb +0 -49
data/README.markdown CHANGED
@@ -38,13 +38,18 @@ make a simple call to get the tokens stored on the account:
38
38
  puts response.tokens.first.token_id
39
39
 
40
40
 
41
+ VerifySignature API
42
+ -------------------
43
+ See spec/integrations/verify_signature_spec.rb for examples on correct and incorrect usage!
44
+
45
+
41
46
  Using with Rails
42
47
  ----------------
43
48
 
44
49
  To use Remit in a Rails application, you must first specify a dependency on the
45
- Remit gem in your config/environment.rb file:
50
+ Remit gem in your Gemfile:
46
51
 
47
- config.gem 'remit', :version => '~> 0.0.1'
52
+ gem 'remit', :git => "git://github.com/nyc-ruby-meetup/remit.git"
48
53
 
49
54
  Then you should create an initializer to configure your Amazon keys. Create the
50
55
  file config/initializers/remit.rb with the following contents:
@@ -84,8 +89,34 @@ Sites Using Remit
84
89
 
85
90
  The following production sites are currently using Remit:
86
91
 
87
- * http://www.storenvy.com/
88
- * http://www.obsidianportal.com/
89
-
92
+ * [Storyenvy](http://www.storenvy.com/)
93
+ * [ObsidianPortal](http://www.obsidianportal.com/)
94
+
95
+
96
+ Amazon API Compliance
97
+ ---------------------
98
+ These are the changes summarized by Amazon from the previous API, and the level of compliance in this branch:
99
+
100
+ 1. You don't have to use InstallPaymentInstruction API to create Caller and Recipient tokens for your account. A Recipient token is now required only in Marketplace applications. We have completely removed the Caller token.
101
+ Compliance: Caller token references removed.
102
+ 2. We removed parameters that are not being used by you today. For example, we removed metadata and recipient description, but we retained sender description and caller description.
103
+ Compliance: DONE! recipient_description and metadata have been removed from the code.
104
+ 3. We simplified the transaction response object.
105
+ Compliance: The former Remit::TransactionResponse object has been accordingly simplified.
106
+ 4. We simplified the GetTransaction response by removing unnecessary parameters.
107
+ Compliance: ?
108
+ 5. By default, implicit retry and cancel will be the method used to handle temporary declines rather than the current explicit retry process.
109
+ Compliance: Removed deprecated statuses
110
+ 6. GetResults, DiscardResults are replaced with GetTransactionStatus API.
111
+ Compliance: GetResults and Discard Results are gone. GetTransactionStatus takes their place.
112
+ 7. Temporary decline status is not exposed to customers as we provide a simpler way to handle this status.
113
+ Compliance: Temporary decline status can no longer be tested for, as it will never be a status.
114
+ 8. Web Service notification is removed and replaced with simplified IPN (Instant Payment Notification) mechanism.
115
+
116
+ Running Specification Suite
117
+ ---------------------------
118
+ 1. Copy test.sh.example to test.sh
119
+ 2. Edit test.sh to have valid Amazon developer account access and secret keys
120
+ 3. Run ./test.sh from the command line.
90
121
 
91
122
  Copyright (c) 2007-2009 Tyler Hunt, released under the MIT license
data/lib/remit.rb CHANGED
@@ -6,22 +6,27 @@ require 'uri'
6
6
  require 'date'
7
7
  require 'base64'
8
8
  require 'erb'
9
+ require 'cgi'
9
10
 
10
11
  require 'rubygems'
11
12
 
12
13
  gem 'relax', '0.0.7'
13
14
  require 'relax'
14
15
 
15
- require 'remit/common'
16
+
16
17
  require 'remit/data_types'
18
+ require 'remit/common'
17
19
  require 'remit/error_codes'
20
+ require 'remit/signature_utils_for_outbound'
21
+ require 'remit/verify_signature'
22
+ require 'remit/inbound_request'
18
23
  require 'remit/ipn_request'
19
24
  require 'remit/get_pipeline'
20
25
  require 'remit/pipeline_response'
21
26
 
22
27
  require 'remit/operations/cancel_subscription_and_refund'
23
28
  require 'remit/operations/cancel_token'
24
- require 'remit/operations/discard_results'
29
+ require 'remit/operations/cancel'
25
30
  require 'remit/operations/fund_prepaid'
26
31
  require 'remit/operations/get_account_activity'
27
32
  require 'remit/operations/get_account_balance'
@@ -31,17 +36,17 @@ require 'remit/operations/get_debt_balance'
31
36
  require 'remit/operations/get_outstanding_debt_balance'
32
37
  require 'remit/operations/get_payment_instruction'
33
38
  require 'remit/operations/get_prepaid_balance'
34
- require 'remit/operations/get_results'
39
+ require 'remit/operations/get_recipient_verification_status'
35
40
  require 'remit/operations/get_token_by_caller'
36
41
  require 'remit/operations/get_token_usage'
37
42
  require 'remit/operations/get_tokens'
38
43
  require 'remit/operations/get_total_prepaid_liability'
39
44
  require 'remit/operations/get_transaction'
45
+ require 'remit/operations/get_transaction_status'
40
46
  require 'remit/operations/install_payment_instruction'
41
47
  require 'remit/operations/pay'
42
48
  require 'remit/operations/refund'
43
49
  require 'remit/operations/reserve'
44
- require 'remit/operations/retry_transaction'
45
50
  require 'remit/operations/settle'
46
51
  require 'remit/operations/settle_debt'
47
52
  require 'remit/operations/subscribe_for_caller_notification'
@@ -50,9 +55,11 @@ require 'remit/operations/write_off_debt'
50
55
 
51
56
  module Remit
52
57
  class API < Relax::Service
58
+
59
+ include VerifySignature
53
60
  include CancelSubscriptionAndRefund
54
61
  include CancelToken
55
- include DiscardResults
62
+ include Cancel
56
63
  include FundPrepaid
57
64
  include GetAccountActivity
58
65
  include GetAccountBalance
@@ -63,7 +70,7 @@ module Remit
63
70
  include GetPaymentInstruction
64
71
  include GetPipeline
65
72
  include GetPrepaidBalance
66
- include GetResults
73
+ include GetRecipientVerificationStatus
67
74
  include GetTokenUsage
68
75
  include GetTokens
69
76
  include GetTokenByCaller
@@ -73,7 +80,6 @@ module Remit
73
80
  include Pay
74
81
  include Refund
75
82
  include Reserve
76
- include RetryTransaction
77
83
  include Settle
78
84
  include SettleDebt
79
85
  include SubscribeForCallerNotification
@@ -84,53 +90,43 @@ module Remit
84
90
  API_SANDBOX_ENDPOINT = 'https://fps.sandbox.amazonaws.com/'.freeze
85
91
  PIPELINE_URL = 'https://authorize.payments.amazon.com/cobranded-ui/actions/start'.freeze
86
92
  PIPELINE_SANDBOX_URL = 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start'.freeze
87
- API_VERSION = Date.new(2007, 1, 8).to_s.freeze
93
+ API_VERSION = Date.new(2008, 9, 17).to_s.freeze
94
+ PIPELINE_VERSION = Date.new(2009, 1, 9).to_s.freeze
88
95
  SIGNATURE_VERSION = 2.freeze
96
+ SIGNATURE_METHOD = "HmacSHA256".freeze
89
97
 
98
+ #attr_reader :pipeline # kickstarter
99
+ attr_reader :pipeline_url # nyc
90
100
  attr_reader :access_key
91
101
  attr_reader :secret_key
92
- attr_reader :pipeline_url
102
+ attr_reader :api_endpoint
93
103
 
94
104
  def initialize(access_key, secret_key, sandbox=false)
95
105
  @access_key = access_key
96
106
  @secret_key = secret_key
97
107
  @pipeline_url = sandbox ? PIPELINE_SANDBOX_URL : PIPELINE_URL
98
-
99
- super(sandbox ? API_SANDBOX_ENDPOINT : API_ENDPOINT)
108
+ @api_endpoint = sandbox ? API_SANDBOX_ENDPOINT : API_ENDPOINT
109
+ super(@api_endpoint)
100
110
  end
101
-
102
- def new_query(query={})
103
- SignedQuery.new(@endpoint, @secret_key, query)
111
+
112
+ # generates v1 signatures, for historical purposes.
113
+ def self.signature_v1(path, params, secret_key)
114
+ params = params.reject {|key, val| ['awsSignature', 'action', 'controller', 'id'].include?(key) }.sort_by{ |k,v| k.to_s.downcase }.map{|k,v| "#{CGI::escape(k)}=#{Remit::SignedQuery.escape_value(v)}"}.join('&')
115
+ signable = path + '?' + params
116
+ Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, secret_key, signable)).strip
104
117
  end
105
- private :new_query
106
118
 
107
- def default_query
108
- new_query({
119
+ private
120
+
121
+ # called from Relax::Service#call
122
+ def query(request)
123
+ params = request.to_query.merge(
109
124
  :AWSAccessKeyId => @access_key,
110
- :SignatureVersion => SIGNATURE_VERSION,
111
- Amazon::FPS::SignatureUtils::SIGNATURE_METHOD_KEYNAME => Amazon::FPS::SignatureUtils::HMAC_SHA256_ALGORITHM,
112
125
  :Version => API_VERSION,
113
126
  :Timestamp => Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
114
- })
115
- end
116
- private :default_query
117
-
118
- def query(request)
119
- query = super
120
- query[:Signature] = sign(query)
121
- query
127
+ )
128
+ ApiQuery.new(@endpoint, @secret_key, params)
122
129
  end
123
- private :query
124
-
125
- def sign(values)
126
- signature = Amazon::FPS::SignatureUtils.sign_parameters({
127
- :parameters => values,
128
- :aws_secret_key => @secret_key,
129
- :host => @endpoint.host,
130
- :verb => "GET",
131
- :uri => @endpoint.path })
132
- return signature
133
- end
134
- private :sign
135
130
  end
136
131
  end
132
+
data/lib/remit/common.rb CHANGED
@@ -9,14 +9,19 @@ require File.dirname(__FILE__) + '/../amazon/fps/signatureutils'
9
9
  require File.dirname(__FILE__) + '/../amazon/fps/signatureutilsforoutbound'
10
10
 
11
11
  module Remit
12
+
13
+ module ConvertKey
14
+ def convert_key(key)
15
+ key.to_s.gsub(/(^|_)(.)/) { $2.upcase }.to_sym
16
+ end
17
+ end
18
+
12
19
  class Request < Relax::Request
13
20
  def self.action(name)
14
21
  parameter :action, :value => name
15
22
  end
16
23
 
17
- def convert_key(key)
18
- key.to_s.gsub(/(^|_)(.)/) { $2.upcase }.to_sym
19
- end
24
+ include ConvertKey
20
25
  protected :convert_key
21
26
  end
22
27
 
@@ -26,24 +31,38 @@ module Remit
26
31
  end
27
32
  end
28
33
 
34
+ class ResponseMetadata < BaseResponse
35
+ # Amazon FPS returns a RequestId element for every API call accepted for processing
36
+ # that means not *every* call will have a request ID.
37
+ parameter :request_id#, :required => true
38
+ parameter :signature_version
39
+ parameter :signature_method
40
+ end
41
+
29
42
  class Response < BaseResponse
30
- parameter :request_id
43
+ parameter :response_metadata, :type => Remit::ResponseMetadata, :required => true
31
44
 
32
45
  attr_accessor :status
33
46
  attr_accessor :errors
34
47
 
48
+ def request_id
49
+ self.response_metadata.respond_to?(:request_id) ? self.response_metadata.request_id : nil
50
+ end
51
+
35
52
  def initialize(xml)
36
53
  super
37
54
 
38
- if is?(:Response) && has?(:Errors)
39
- @errors = elements(:Errors).collect do |error|
55
+ # TODO: How to differentiate between Error and Service Error properly? - pboling
56
+ # TODO: Is this ServiceError still relevant? - pboling
57
+ if is?(:Response) and has?(:Errors)
58
+ @errors = elements('errors/error').collect do |error|
40
59
  Error.new(error)
41
60
  end
42
61
  else
43
62
  @status = text_value(element(:Status))
44
- @errors = elements('Errors/Errors').collect do |error|
63
+ @errors = elements('errors/errors').collect do |error|
45
64
  ServiceError.new(error)
46
- end unless successful?
65
+ end if not successful?
47
66
  end
48
67
  end
49
68
 
@@ -59,42 +78,78 @@ module Remit
59
78
  end
60
79
 
61
80
  class SignedQuery < Relax::Query
62
- def initialize(uri, secret_key, query={})
81
+ def initialize(uri, secret_key, query = {})
63
82
  super(query)
64
83
  @uri = URI.parse(uri.to_s)
65
84
  @secret_key = secret_key
85
+ sign
66
86
  end
67
87
 
68
88
  def sign
69
- self[Amazon::FPS::SignatureUtils::SIGNATURE_VERSION_KEYNAME] = Remit::API::SIGNATURE_VERSION
70
- self[Amazon::FPS::SignatureUtils::SIGNATURE_METHOD_KEYNAME] = Amazon::FPS::SignatureUtils::HMAC_SHA256_ALGORITHM
71
-
72
- signature = Amazon::FPS::SignatureUtils.sign_parameters({
73
- :parameters => self,
74
- :aws_secret_key => @secret_key,
75
- :host => @uri.host,
76
- :verb => "GET",
77
- :uri => @uri.path })
89
+ store(:signatureVersion, Remit::API::SIGNATURE_VERSION)
90
+ store(:signatureMethod, Remit::API::SIGNATURE_METHOD)
91
+ store(:signature, signature)
92
+ end
78
93
 
79
- store(Amazon::FPS::SignatureUtilsForOutbound::SIGNATURE_KEYNAME.to_sym, signature)
94
+ def signature
95
+ Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, @secret_key, signable_string)).strip
80
96
  end
81
97
 
82
- def to_s(signed=true)
83
- sign if signed
84
- super()
98
+ def signable_string
99
+ [ 'GET',
100
+ @uri.host,
101
+ @uri.path,
102
+ to_s # the query string, sans :signature (but with :signatureVersion and :signatureMethod)
103
+ ].join("\n")
85
104
  end
86
105
 
87
106
  class << self
88
107
  def parse(uri, secret_key, query_string)
89
108
  query = self.new(uri, secret_key)
90
-
91
109
  query_string.split('&').each do |parameter|
92
110
  key, value = parameter.split('=', 2)
93
111
  query[key] = unescape_value(value)
94
112
  end
95
-
96
113
  query
97
114
  end
115
+
116
+ UNSAFE = /[^A-Za-z0-9_.~-]/
117
+ # Amazon is very specific about what chars should be escaped, and which should not.
118
+ def escape_value(value)
119
+ # note that URI.escape(' ') => '%20', and CGI.escape(' ') => '+'
120
+ URI.escape(value.to_s, UNSAFE)
121
+ end
122
+ end
123
+ end
124
+
125
+ # Frustratingly enough, API requests want the signature params with slightly different casing.
126
+ class ApiQuery < SignedQuery
127
+ def sign
128
+ store(:SignatureVersion, Remit::API::SIGNATURE_VERSION)
129
+ store(:SignatureMethod, 'HmacSHA256')
130
+ store(:Signature, signature)
131
+ end
132
+ end
133
+ end
134
+
135
+ #Hack on Hash to make it s rocket
136
+ class Hash
137
+ def to_url_params
138
+ elements = []
139
+ keys.size.times do |i|
140
+ elements << "#{(keys[i])}=#{Remit::SignedQuery.escape_value(values[i])}"
141
+ end
142
+ elements.join('&')
143
+ end
144
+
145
+ def self.from_url_params(url_params)
146
+ result = {}
147
+ url_params.split('&').each do |element|
148
+ element = element.split('=')
149
+ # BJM - need to unescape the values in the param string
150
+ #result[element[0]] = element[1]
151
+ result[element[0]] = CGI.unescape(element[1])
98
152
  end
153
+ result
99
154
  end
100
155
  end
@@ -3,10 +3,32 @@ require 'relax'
3
3
 
4
4
  require 'remit/common'
5
5
 
6
+ def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
7
+ if first_letter_in_uppercase
8
+ lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
9
+ else
10
+ lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
11
+ end
12
+ end
13
+
14
+ module Relax
15
+ class Response
16
+ class << self
17
+ alias_method :alias_for_parameter, :parameter
18
+ def parameter(name, options = {})
19
+ opts = {
20
+ :element => camelize(name)
21
+ }.merge!(options)
22
+ alias_for_parameter(name, opts)
23
+ end
24
+ end
25
+ end
26
+ end
27
+
6
28
  module Remit
7
29
  class Amount < BaseResponse
8
30
  parameter :currency_code
9
- parameter :amount, :type => :float
31
+ parameter :value, :type => :float
10
32
  end
11
33
 
12
34
  class TemporaryDeclinePolicy < BaseResponse
@@ -16,7 +38,7 @@ module Remit
16
38
 
17
39
  class DescriptorPolicy < BaseResponse
18
40
  parameter :soft_descriptor_type
19
- parameter :CS_number_of
41
+ parameter :CS_owner
20
42
  end
21
43
 
22
44
  class ChargeFeeTo
@@ -27,6 +49,12 @@ module Remit
27
49
  class Error < BaseResponse
28
50
  parameter :code
29
51
  parameter :message
52
+ def error_code
53
+ self.code
54
+ end
55
+ def reason_text
56
+ self.message
57
+ end
30
58
  end
31
59
 
32
60
  class InstrumentStatus
@@ -36,7 +64,7 @@ module Remit
36
64
  end
37
65
 
38
66
  class PaymentMethods
39
- BALANCE_TRANSFER = 'abt'
67
+ BALANCE_aFER = 'abt'
40
68
  BANK_ACCOUNT = 'ach'
41
69
  CREDIT_CARD = 'credit card'
42
70
  PREPAID = 'prepaid'
@@ -63,9 +91,9 @@ module Remit
63
91
  class Token < BaseResponse
64
92
  parameter :token_id
65
93
  parameter :friendly_name
66
- parameter :status
94
+ parameter :token_status
67
95
  parameter :date_installed, :type => :time
68
- parameter :caller_installed
96
+ #parameter :caller_installed
69
97
  parameter :caller_reference
70
98
  parameter :token_type
71
99
  parameter :old_token_id
@@ -84,27 +112,65 @@ module Remit
84
112
  parameter :last_reset_count
85
113
  parameter :last_reset_time_stamp
86
114
  end
115
+
116
+ class TransactionPart < Remit::BaseResponse
117
+ parameter :account_id
118
+ parameter :role
119
+ parameter :name
120
+ parameter :reference
121
+ parameter :description
122
+ parameter :fee_paid, :type => Amount
123
+ end
124
+
125
+ class Transaction < BaseResponse
126
+
127
+ parameter :caller_name
128
+ parameter :caller_reference
129
+ parameter :caller_description
130
+ parameter :caller_transaction_date, :type => :time
131
+ parameter :date_completed, :type => :time
132
+ parameter :date_received, :type => :time
133
+ parameter :error_code
134
+ parameter :error_message
135
+ parameter :fees, :element=>"FPSFees", :type => Amount
136
+ parameter :fps_fees_paid_by, :element=>"FPSFeesPaidBy"
137
+ parameter :fps_operation, :element=>"FPSOperation"
138
+ parameter :meta_data
139
+ parameter :payment_method
140
+ parameter :recipient_name
141
+ parameter :recipient_email
142
+ parameter :recipient_token_id
143
+ parameter :related_transactions
144
+ parameter :sender_email
145
+ parameter :sender_name
146
+ parameter :sender_token_id
147
+ parameter :transaction_status
148
+ parameter :status_code
149
+ parameter :status_history
150
+ parameter :status_message
151
+ parameter :transaction_amount, :type => Amount
152
+ parameter :transaction_id
153
+ parameter :transaction_parts, :collection => TransactionPart, :element=>"TransactionPart"
154
+ end
87
155
 
88
156
  class TransactionResponse < BaseResponse
89
157
  parameter :transaction_id
90
- parameter :status
91
- parameter :status_detail
92
- parameter :new_sender_token_usage, :type => TokenUsageLimit
158
+ parameter :transaction_status
93
159
 
94
- %w(reserved success failure initiated reinitiated temporary_decline).each do |status_name|
160
+ %w(cancelled failure pending reserved success).each do |status_name|
95
161
  define_method("#{status_name}?") do
96
- self.status == Remit::TransactionStatus.const_get(status_name.sub('_', '').upcase)
162
+ self.transaction_status == Remit::TransactionStatus.const_get(status_name.sub('_', '').upcase)
97
163
  end
98
164
  end
99
165
  end
100
166
 
101
167
  class TransactionStatus
168
+ #For IPN operations these strings are upcased. For Non-IPN operations they are not upcased
169
+ CANCELLED = 'Cancelled'
170
+ FAILURE = 'Failure'
171
+ PENDING = 'Pending'
102
172
  RESERVED = 'Reserved'
103
173
  SUCCESS = 'Success'
104
- FAILURE = 'Failure'
105
- INITIATED = 'Initiated'
106
- REINITIATED = 'Reinitiated'
107
- TEMPORARYDECLINE = 'TemporaryDecline'
108
174
  end
109
175
 
110
176
  class TokenType
@@ -121,11 +187,13 @@ module Remit
121
187
  RECIPIENT = 'Recipient'
122
188
  SETUP_PREPAID = 'SetupPrepaid'
123
189
  SETUP_POSTPAID = 'SetupPostpaid'
190
+ EDIT_TOKEN = 'EditToken'
124
191
  end
125
192
 
126
193
  class PipelineStatusCode
127
194
  CALLER_EXCEPTION = 'CE' # problem with your code
128
195
  SYSTEM_ERROR = 'SE' # system error, try again
196
+ SUCCESS_UNCHANGED = 'SU' # edit token pipeline finished, but token is unchanged
129
197
  SUCCESS_ABT = 'SA' # successful payment with Amazon balance
130
198
  SUCCESS_ACH = 'SB' # successful payment with bank transfer
131
199
  SUCCESS_CC = 'SC' # successful payment with credit card
@@ -138,10 +206,10 @@ module Remit
138
206
 
139
207
  module RequestTypes
140
208
  class Amount < Remit::Request
141
- parameter :amount
209
+ parameter :value
142
210
  parameter :currency_code
143
211
  end
144
-
212
+
145
213
  class TemporaryDeclinePolicy < Remit::Request
146
214
  parameter :temporary_decline_policy_type
147
215
  parameter :implicit_retry_timeout_in_mins
@@ -149,10 +217,42 @@ module Remit
149
217
 
150
218
  class DescriptorPolicy < Remit::Request
151
219
  parameter :soft_descriptor_type
152
- parameter :CS_number_of
220
+ parameter :CS_owner
153
221
  end
222
+
223
+ end
224
+
225
+ class SoftDescriptorType
226
+ STATIC = 'Static'
227
+ DYNAMIC = 'Dynamic'
228
+ end
229
+
230
+ #MarketplaceRefundPolicy is available in these APIs:
231
+ # Amazon FPS Advanced Quick Start
232
+ # Amazon FPS Marketplace Quick Start
233
+ # Amazon FPS Aggregated Payments Quick Start
234
+ # i.e. Not Basic Quick Start
235
+ #It really should be listed under Enumerated DataTypes:
236
+ #MarketplaceTxnOnly Caller refunds his fee to the recipient. String
237
+ #MasterAndMarketplaceTxn Caller and Amazon FPS refund their fees to the String
238
+ # sender, and the recipient refunds his amount
239
+ #MasterTxnOnly Caller does not refund his fee. Amazon FPS String
240
+ # refunds its fee and the recipient refunds his amount
241
+ # plus the caller's fee to the sender.
242
+ class MarketplaceRefundPolicy
243
+ POLICY = {
244
+ :marketplace_txn_only => 'MarketplaceTxnOnly',
245
+ :master_and_marketplace_txn => 'MasterAndMarketplaceTxn',
246
+ :master_txn_only => 'MasterTxnOnly' #default if not specified, set by Amazon FPS
247
+ }
154
248
  end
155
249
 
250
+ class TemporaryDeclinePolicyType
251
+ EXPLICIT_RETRY = 'ExplicitRetry'
252
+ IMPLICIT_RETRY = 'ImplicitRetry'
253
+ FAILURE = 'Failure'
254
+ end
255
+
156
256
  class Operation
157
257
  PAY = "Pay"
158
258
  REFUND = "Refund"
@@ -161,4 +261,5 @@ module Remit
161
261
  WRITE_OFF_DEBT = "WriteOffDebt"
162
262
  FUND_PREPAID = "FundPrepaid"
163
263
  end
264
+
164
265
  end