flexpay 0.1.0 → 0.2.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.
@@ -11,6 +11,7 @@ require 'flexpay/api_module'
11
11
 
12
12
  require 'flexpay/cobranding_api/v2009_01_09'
13
13
  require 'flexpay/fps_api/v2008_09_17'
14
+ require 'flexpay/simple_pay_api/v2009_04_17'
14
15
 
15
16
  require 'flexpay/util'
16
17
  require 'flexpay/exceptions'
@@ -22,28 +23,34 @@ module Flexpay
22
23
  API_SANDBOX_ENDPOINT = 'https://fps.sandbox.amazonaws.com/'.freeze
23
24
  PIPELINE_URL = 'https://authorize.payments.amazon.com/cobranded-ui/actions/start'.freeze
24
25
  PIPELINE_SANDBOX_URL = 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start'.freeze
25
- API_VERSION = Date.new(2008, 9, 17).to_s.freeze
26
+ SIMPLEPAY_ENDPOINT = 'https://authorize.payments.amazon.com/pba/paypipeline'.freeze
27
+ SIMPLEPAY_SANDBOX_ENDPOINT = "https://authorize.payments-sandbox.amazon.com/pba/paypipeline".freeze
26
28
  SIGNATURE_VERSION = 2.freeze
27
29
 
28
30
  attr_reader :access_key
29
31
  attr_reader :secret_key
30
32
  attr_reader :fps_url
31
33
  attr_reader :pipeline_url
34
+ attr_reader :simplepay_url
32
35
  attr_reader :cobranding_version
33
36
  attr_reader :fps_version
37
+ attr_reader :simple_pay_version
34
38
 
35
39
  def initialize(params)
36
40
  @access_key = params[:access_key]
37
41
  @secret_key = params[:secret_key]
38
42
  @cobranding_version = params[:cobranding_version] || "2009-01-09"
39
43
  @fps_version = params[:fps_version] || "2008-09-17"
44
+ @simple_pay_version = params[:simple_pay_version] || "2009-04-17"
40
45
 
41
46
  if params[:sandbox].nil? or params[:sandbox] == true
42
47
  @pipeline_url = PIPELINE_SANDBOX_URL
43
48
  @fps_url = API_SANDBOX_ENDPOINT
49
+ @simplepay_url = SIMPLEPAY_SANDBOX_ENDPOINT
44
50
  else
45
51
  @pipeline_url = PIPELINE_URL
46
52
  @fps_url = API_ENDPOINT
53
+ @simplepay_url = SIMPLEPAY_ENDPOINT
47
54
  end
48
55
 
49
56
  end
@@ -53,6 +60,11 @@ module Flexpay
53
60
  supply_defaults_for_pipeline_and_return(obj)
54
61
  end
55
62
 
63
+ def get_recipient_token
64
+ obj = cobranding_constant_lookup(:RecipientToken).new
65
+ supply_defaults_for_pipeline_and_return(obj)
66
+ end
67
+
56
68
  def get_verify_signature
57
69
  obj = fps_constant_lookup(:VerifySignature).new
58
70
  supply_defaults_for_fps_and_return(obj)
@@ -63,10 +75,15 @@ module Flexpay
63
75
  supply_defaults_for_fps_and_return(obj)
64
76
  end
65
77
 
66
- # def version
67
- # raise APINotConfigured if @version.nil? || @version.empty?
68
- # @version
69
- # end
78
+ def get_subscription_button
79
+ obj = simple_pay_constant_lookup(:SubscriptionButton).new
80
+ supply_defaults_for_simple_pay_and_return(obj)
81
+ end
82
+
83
+ def get_cancel_subscription_and_refund
84
+ obj = fps_constant_lookup(:CancelSubscriptionAndRefund).new
85
+ supply_defaults_for_fps_and_return(obj)
86
+ end
70
87
 
71
88
  def access_key
72
89
  raise APINotConfigured if @access_key.nil? || @access_key.empty?
@@ -88,6 +105,10 @@ module Flexpay
88
105
  Flexpay::FpsAPI.const_get("V#{@fps_version.gsub(/-/,'_')}".to_sym).specific_class(sym)
89
106
  end
90
107
 
108
+ def simple_pay_constant_lookup(sym)
109
+ Flexpay::SimplePayAPI.const_get("V#{@simple_pay_version.gsub(/-/,'_')}".to_sym).specific_class(sym)
110
+ end
111
+
91
112
  def supply_defaults_for_pipeline_and_return(obj)
92
113
  obj.access_key = @access_key
93
114
  obj.secret_key = @secret_key
@@ -103,5 +124,12 @@ module Flexpay
103
124
  obj
104
125
  end
105
126
 
127
+ def supply_defaults_for_simple_pay_and_return(obj)
128
+ obj.access_key = @access_key
129
+ obj.secret_key = @secret_key
130
+ obj.endpoint = @simplepay_url
131
+ obj
132
+ end
133
+
106
134
  end
107
135
  end
@@ -13,6 +13,26 @@ module Flexpay
13
13
  self.version = "2009-01-09"
14
14
  end
15
15
 
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ module Flexpay
22
+ module CobrandingAPI
23
+ module V2009_01_09
24
+ class RecipientToken
25
+ include Flexpay::CobrandingAPI::V2009_01_09
26
+ include Flexpay::AmazonFPSRequest
27
+
28
+ required_parameters "pipelineName","callerReference", "returnURL", "version", "callerKey",
29
+ "maxFixedFee", "maxVariableFee", "paymentMethod", "recipientPaysFee"
30
+
31
+ def initialize
32
+ self.pipelineName = "Recipient"
33
+ self.version = "2009-01-09"
34
+ end
35
+
16
36
  end
17
37
  end
18
38
  end
@@ -7,4 +7,5 @@ module Flexpay
7
7
  end
8
8
 
9
9
  require 'flexpay/fps_api/v2008_09_17/verify_signature'
10
- require 'flexpay/fps_api/v2008_09_17/pay'
10
+ require 'flexpay/fps_api/v2008_09_17/pay'
11
+ require 'flexpay/fps_api/v2008_09_17/cancel_subscription_and_refund'
@@ -0,0 +1,20 @@
1
+ module Flexpay
2
+ module FpsAPI
3
+ module V2008_09_17
4
+ class CancelSubscriptionAndRefund
5
+ include Flexpay::FpsAPI::V2008_09_17
6
+ include Flexpay::AmazonFPSRequest
7
+
8
+ required_parameters "CallerReference", "CancelReason", "RefundAmount", "SubscriptionId", "Action", "AWSAccessKeyId", "Timestamp", "Version"
9
+
10
+ response_parameters :RefundTransactionId => "/'CancelSubscriptionAndRefundResponse'/'CancelSubscriptionAndRefundResult'/'RefundTransactionId'"
11
+
12
+ def initialize
13
+ self.Action = "CancelSubscriptionAndRefund"
14
+ self.Version = "2008-09-17"
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -51,12 +51,24 @@ module Flexpay
51
51
  def go!(signed=true)
52
52
  url = generate_url(signed)
53
53
 
54
- RestClient.log = "stdout"
55
- response = RestClient.get url
54
+ RestClient.log = Logger.new(STDOUT)
55
+ result = {}
56
+
57
+ begin
58
+ RestClient.log.info url
59
+ response = RestClient.get url
60
+ rescue Exception => e
61
+ result["Exception"] = e
62
+ result["Response"] = e.response
63
+ return result
64
+ end
56
65
 
57
- doc = Hpricot.XML(response)
66
+ if response.respond_to?(:body)
67
+ doc = Hpricot.XML(response.body)
68
+ else
69
+ doc = Hpricot.XML(response)
70
+ end
58
71
 
59
- result = {}
60
72
  self.class.get_response_parameters.each do |k,v|
61
73
  result[k] = eval("(doc#{v}).innerHTML")
62
74
  end
@@ -91,7 +103,7 @@ module Flexpay
91
103
  params = {}
92
104
  self.class.get_required_parameters.each do |p|
93
105
  val = self.send(p)
94
- params[p.gsub('_','.')] = val unless val.nil? || val.empty?
106
+ params[p.gsub('_','.')] = val unless val.nil? || ( val.respond_to?(:empty) ? val.empty? : false )
95
107
  end
96
108
  params
97
109
  end
@@ -0,0 +1,9 @@
1
+ module Flexpay
2
+ module SimplePayAPI
3
+ module V2009_04_17
4
+ include Flexpay::APIModule
5
+ end
6
+ end
7
+ end
8
+
9
+ require 'flexpay/simple_pay_api/v2009_04_17/subscription_button'
@@ -0,0 +1,20 @@
1
+ module Flexpay
2
+ module SimplePayAPI
3
+ module V2009_04_17
4
+
5
+ ## This is pseudo-versioned. Amazon intends for a button to be placed on the webpage
6
+ ## but you can just as easily forward the user programatically.
7
+
8
+ class SubscriptionButton
9
+ include Flexpay::SimplePayAPI::V2009_04_17
10
+ include Flexpay::AmazonFPSRequest
11
+
12
+ required_parameters "accessKey", "amount", "description", "recurringFrequency", "returnURL", "immediateReturn"
13
+
14
+ def initialize
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -19,7 +19,7 @@ module Flexpay
19
19
 
20
20
  ## These are the modified encoding rules proposed by Amazon. Not quite URL encoding
21
21
  def self.modified_URL_encoding(string)
22
- URI.escape(string).gsub(/\+/, '%20').gsub(/\*/, '%2A').gsub("%7E","~").gsub(/:/,'%3A').gsub(/\//,'%2F')
22
+ URI.escape(string).gsub(/\+/, '%20').gsub(/\*/, '%2A').gsub("%7E","~").gsub(/:/,'%3A').gsub(/\//,'%2F').gsub(/,/, '%2C')
23
23
  end
24
24
 
25
25
  end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/units_helper'
2
+
3
+ describe 'CancelSubscriptionAndRefund' do
4
+ before(:each) do
5
+ end
6
+
7
+ it "should correctly build a request" do
8
+ pay = Flexpay::API.new(:access_key => ACCESS_KEY, :secret_key => SECRET_KEY).get_cancel_subscription_and_refund
9
+
10
+ body =<<HEREDOC
11
+ <CancelSubscriptionAndRefundResponse
12
+ xmlns="http://fps.amazonaws.com/doc/2008-09-17/">
13
+ <CancelSubscriptionAndRefundResult>
14
+ <RefundTransactionId>
15
+ 14GKE3B85HCMF1BTSH5C4PD2IHZL95RJ2LM
16
+ </RefundTransactionId>
17
+ </CancelSubscriptionAndRefundResult>
18
+ <ResponseMetadata>
19
+ <RequestId>bfbc0b1e-3430-4a74-a75e-5292f59107ca:0</RequestId>
20
+ </ResponseMetadata>
21
+ </CancelSubscriptionAndRefundResponse>
22
+ HEREDOC
23
+
24
+ RestClient.stub!(:get).and_return(body)
25
+
26
+ pay.CallerReference = Time.now.to_i.to_s
27
+ pay.CancelReason = "UserRequestOnSite"
28
+ pay.SubscriptionId = "123"
29
+ pay.Timestamp = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
30
+ pay.AWSAccessKeyId = ACCESS_KEY
31
+
32
+ result = pay.go!
33
+ result.should have_key(:RefundTransactionId)
34
+ end
35
+
36
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/units_helper'
2
+
3
+ describe "Recipient token" do
4
+ before(:each) do
5
+ end
6
+
7
+ it "should respond to all required parameters" do
8
+ pipeline = Flexpay::API.new(:access_key => ACCESS_KEY, :secret_key => SECRET_KEY).get_recipient_token
9
+
10
+ Flexpay::CobrandingAPI::V2009_01_09::RecipientToken::get_required_parameters.each do |p|
11
+ pipeline.should respond_to(p)
12
+ end
13
+ end
14
+
15
+ it "should correctly build a parameter hash" do
16
+ pipeline = Flexpay::API.new(:access_key => ACCESS_KEY, :secret_key => SECRET_KEY).get_recipient_token
17
+
18
+ pipeline.callerReference = Time.now.to_i.to_s
19
+ pipeline.returnURL = "http://127.0.0.1:3000"
20
+ pipeline.callerKey = ACCESS_KEY
21
+ pipeline.recipientPaysFee = true
22
+
23
+ url = pipeline.generate_url
24
+ url.should_not be_empty
25
+ end
26
+
27
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/units_helper'
2
+
3
+ describe 'Subscription button' do
4
+ before(:each) do
5
+ end
6
+
7
+ it "should correctly build a request" do
8
+ subscription = Flexpay::API.new(:access_key => ACCESS_KEY, :secret_key => SECRET_KEY).get_subscription_button
9
+
10
+ subscription.accessKey = ACCESS_KEY
11
+ subscription.amount = "USD 10"
12
+ subscription.description = "Unit test"
13
+ subscription.recurringFrequency = "1 month"
14
+ subscription.returnURL = "http://localhost:3000"
15
+ subscription.immediateReturn = 1
16
+
17
+ subscription.generate_url.should_not be_empty
18
+ end
19
+
20
+ end
@@ -1,5 +1,6 @@
1
1
  ACCESS_KEY = 'foo'
2
2
  SECRET_KEY = 'bar'
3
+
3
4
  API_VERSION = "2009-01-09"
4
5
 
5
- require File.dirname(__FILE__) + '/../spec_helper'
6
+ require File.dirname(__FILE__) + '/../spec_helper'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 2
7
8
  - 1
8
- - 0
9
- version: 0.1.0
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Chris Chandler
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-19 00:00:00 -05:00
17
+ date: 2010-05-27 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +26,9 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
28
  - 0
29
- version: "0"
29
+ - 8
30
+ - 1
31
+ version: 0.8.1
30
32
  type: :runtime
31
33
  version_requirements: *id001
32
34
  - !ruby/object:Gem::Dependency
@@ -37,8 +39,10 @@ dependencies:
37
39
  - - ">="
38
40
  - !ruby/object:Gem::Version
39
41
  segments:
40
- - 0
41
- version: "0"
42
+ - 1
43
+ - 4
44
+ - 2
45
+ version: 1.4.2
42
46
  type: :runtime
43
47
  version_requirements: *id002
44
48
  description:
@@ -56,9 +60,12 @@ files:
56
60
  - lib/flexpay/cobranding_api/v2009_01_09/pipelines.rb
57
61
  - lib/flexpay/exceptions.rb
58
62
  - lib/flexpay/fps_api/v2008_09_17.rb
63
+ - lib/flexpay/fps_api/v2008_09_17/cancel_subscription_and_refund.rb
59
64
  - lib/flexpay/fps_api/v2008_09_17/pay.rb
60
65
  - lib/flexpay/fps_api/v2008_09_17/verify_signature.rb
61
66
  - lib/flexpay/request.rb
67
+ - lib/flexpay/simple_pay_api/v2009_04_17.rb
68
+ - lib/flexpay/simple_pay_api/v2009_04_17/subscription_button.rb
62
69
  - lib/flexpay/util.rb
63
70
  has_rdoc: true
64
71
  homepage: http://github.com/cchandler/flexpay
@@ -92,9 +99,12 @@ specification_version: 3
92
99
  summary: An API for using the Amazon Flexible Payment Service (FPS).
93
100
  test_files:
94
101
  - spec/units/api_spec.rb
102
+ - spec/units/cancel_subscription_and_refund_spec.rb
95
103
  - spec/units/pay_spec.rb
104
+ - spec/units/recipient_token_spec.rb
96
105
  - spec/units/recurring_pipeline_spec.rb
97
106
  - spec/units/signature_spec.rb
107
+ - spec/units/subscription_button_spec.rb
98
108
  - spec/units/verify_signature_spec.rb
99
109
  - spec/integrations/integrations_helper.rb
100
110
  - spec/spec_helper.rb