processout 2.20.0 → 2.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +52 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Dockerfile +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/Makefile +4 -0
- data/README.md +12 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/processout/activity.rb +206 -0
- data/lib/processout/addon.rb +401 -0
- data/lib/processout/alternative_merchant_certificate.rb +115 -0
- data/lib/processout/api_request.rb +295 -0
- data/lib/processout/api_version.rb +92 -0
- data/lib/processout/apple_pay_alternative_merchant_certificates.rb +121 -0
- data/lib/processout/balance.rb +92 -0
- data/lib/processout/balances.rb +111 -0
- data/lib/processout/card.rb +503 -0
- data/lib/processout/card_information.rb +164 -0
- data/lib/processout/coupon.rb +352 -0
- data/lib/processout/customer.rb +755 -0
- data/lib/processout/customer_action.rb +81 -0
- data/lib/processout/discount.rb +360 -0
- data/lib/processout/dunning_action.rb +81 -0
- data/lib/processout/errors/authentication_error.rb +9 -0
- data/lib/processout/errors/generic_error.rb +9 -0
- data/lib/processout/errors/internal_error.rb +9 -0
- data/lib/processout/errors/notfound_error.rb +9 -0
- data/lib/processout/errors/validation_error.rb +9 -0
- data/lib/processout/event.rb +237 -0
- data/lib/processout/gateway.rb +210 -0
- data/lib/processout/gateway_configuration.rb +346 -0
- data/lib/processout/gateway_request.rb +26 -0
- data/lib/processout/invoice.rb +984 -0
- data/lib/processout/invoice_detail.rb +235 -0
- data/lib/processout/invoice_device.rb +92 -0
- data/lib/processout/invoice_external_fraud_tools.rb +70 -0
- data/lib/processout/invoice_risk.rb +81 -0
- data/lib/processout/invoice_shipping.rb +202 -0
- data/lib/processout/invoice_tax.rb +81 -0
- data/lib/processout/networking/request.rb +102 -0
- data/lib/processout/networking/response.rb +67 -0
- data/lib/processout/payment_data_network_authentication.rb +70 -0
- data/lib/processout/payment_data_three_ds_authentication.rb +70 -0
- data/lib/processout/payment_data_three_ds_request.rb +103 -0
- data/lib/processout/payout.rb +379 -0
- data/lib/processout/payout_item.rb +238 -0
- data/lib/processout/plan.rb +368 -0
- data/lib/processout/product.rb +368 -0
- data/lib/processout/project.rb +353 -0
- data/lib/processout/refund.rb +277 -0
- data/lib/processout/subscription.rb +910 -0
- data/lib/processout/three_ds.rb +158 -0
- data/lib/processout/token.rb +493 -0
- data/lib/processout/transaction.rb +905 -0
- data/lib/processout/transaction_operation.rb +418 -0
- data/lib/processout/version.rb +3 -0
- data/lib/processout/webhook.rb +237 -0
- data/lib/processout/webhook_endpoint.rb +149 -0
- data/lib/processout.rb +263 -0
- data/processout.gemspec +26 -0
- metadata +66 -3
@@ -0,0 +1,81 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class InvoiceTax
|
10
|
+
|
11
|
+
attr_reader :amount
|
12
|
+
attr_reader :rate
|
13
|
+
|
14
|
+
|
15
|
+
def amount=(val)
|
16
|
+
@amount = val
|
17
|
+
end
|
18
|
+
|
19
|
+
def rate=(val)
|
20
|
+
@rate = val
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
# Initializes the InvoiceTax object
|
25
|
+
# Params:
|
26
|
+
# +client+:: +ProcessOut+ client instance
|
27
|
+
# +data+:: data that can be used to fill the object
|
28
|
+
def initialize(client, data = {})
|
29
|
+
@client = client
|
30
|
+
|
31
|
+
self.amount = data.fetch(:amount, nil)
|
32
|
+
self.rate = data.fetch(:rate, nil)
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
# Create a new InvoiceTax using the current client
|
37
|
+
def new(data = {})
|
38
|
+
InvoiceTax.new(@client, data)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Overrides the JSON marshaller to only send the fields we want
|
42
|
+
def to_json(options)
|
43
|
+
{
|
44
|
+
"amount": self.amount,
|
45
|
+
"rate": self.rate,
|
46
|
+
}.to_json
|
47
|
+
end
|
48
|
+
|
49
|
+
# Fills the object with data coming from the API
|
50
|
+
# Params:
|
51
|
+
# +data+:: +Hash+ of data coming from the API
|
52
|
+
def fill_with_data(data)
|
53
|
+
if data.nil?
|
54
|
+
return self
|
55
|
+
end
|
56
|
+
if data.include? "amount"
|
57
|
+
self.amount = data["amount"]
|
58
|
+
end
|
59
|
+
if data.include? "rate"
|
60
|
+
self.rate = data["rate"]
|
61
|
+
end
|
62
|
+
|
63
|
+
self
|
64
|
+
end
|
65
|
+
|
66
|
+
# Prefills the object with the data passed as parameters
|
67
|
+
# Params:
|
68
|
+
# +data+:: +Hash+ of data
|
69
|
+
def prefill(data)
|
70
|
+
if data.nil?
|
71
|
+
return self
|
72
|
+
end
|
73
|
+
self.amount = data.fetch(:amount, self.amount)
|
74
|
+
self.rate = data.fetch(:rate, self.rate)
|
75
|
+
|
76
|
+
self
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "net/https"
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module ProcessOut
|
6
|
+
class Request
|
7
|
+
def initialize(client)
|
8
|
+
@client = client
|
9
|
+
end
|
10
|
+
|
11
|
+
# ApplyHeaders applies the pre-defined headers to the request
|
12
|
+
def apply_headers(req, options)
|
13
|
+
req.basic_auth @client.project_id, @client.project_secret
|
14
|
+
req.content_type = "application/json"
|
15
|
+
req["API-Version"] = "1.4.0.0"
|
16
|
+
req["User-Agent"] = "ProcessOut Ruby-Bindings/2.21.0"
|
17
|
+
|
18
|
+
unless options.nil?
|
19
|
+
req["Idempotency-Key"] = options.fetch(:idempotency_key, "")
|
20
|
+
req["Disable-Logging"] = options.fetch(:disable_logging, "")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
protected :apply_headers
|
24
|
+
|
25
|
+
# ComputeData computes the data to be sent in the request
|
26
|
+
def compute_data(data, options)
|
27
|
+
unless options.nil?
|
28
|
+
data["expand"] = options.fetch(:expand, [])
|
29
|
+
data["filter"] = options.fetch(:filter, "")
|
30
|
+
data["limit"] = options.fetch(:limit, "")
|
31
|
+
data["end_before"] = options.fetch(:end_before, "")
|
32
|
+
data["start_after"] = options.fetch(:start_after, "")
|
33
|
+
end
|
34
|
+
data
|
35
|
+
end
|
36
|
+
protected :compute_data
|
37
|
+
|
38
|
+
# GET sends a get request to the API
|
39
|
+
def get(path, data, options)
|
40
|
+
uri = URI(@client.host + path)
|
41
|
+
uri.query = URI.encode_www_form(self.compute_data(data, options))
|
42
|
+
req = Net::HTTP::Get.new(uri)
|
43
|
+
self.apply_headers(req, options)
|
44
|
+
|
45
|
+
Net::HTTP.start(uri.hostname, uri.port,
|
46
|
+
:open_timeout => 5,
|
47
|
+
:read_timeout => 65,
|
48
|
+
:use_ssl => true) do |http|
|
49
|
+
|
50
|
+
http.request(req)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# POST sends a post request to the API
|
55
|
+
def post(path, data, options)
|
56
|
+
uri = URI(@client.host + path)
|
57
|
+
req = Net::HTTP::Post.new(uri)
|
58
|
+
req.body = self.compute_data(data, options).to_json
|
59
|
+
self.apply_headers(req, options)
|
60
|
+
|
61
|
+
Net::HTTP.start(uri.hostname, uri.port,
|
62
|
+
:open_timeout => 5,
|
63
|
+
:read_timeout => 65,
|
64
|
+
:use_ssl => true) do |http|
|
65
|
+
|
66
|
+
http.request(req)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# PUT sends a put request to the API
|
71
|
+
def put(path, data, options)
|
72
|
+
uri = URI(@client.host + path)
|
73
|
+
req = Net::HTTP::Put.new(uri)
|
74
|
+
req.body = self.compute_data(data, options).to_json
|
75
|
+
self.apply_headers(req, options)
|
76
|
+
|
77
|
+
Net::HTTP.start(uri.hostname, uri.port,
|
78
|
+
:open_timeout => 5,
|
79
|
+
:read_timeout => 65,
|
80
|
+
:use_ssl => true) do |http|
|
81
|
+
|
82
|
+
http.request(req)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# DELETE sends a delete request to the API
|
87
|
+
def delete(path, data, options)
|
88
|
+
uri = URI(@client.host + path)
|
89
|
+
uri.query = URI.encode_www_form(self.compute_data(data, options))
|
90
|
+
req = Net::HTTP::Delete.new(uri)
|
91
|
+
self.apply_headers(req, options)
|
92
|
+
|
93
|
+
Net::HTTP.start(uri.hostname, uri.port,
|
94
|
+
:open_timeout => 5,
|
95
|
+
:read_timeout => 65,
|
96
|
+
:use_ssl => true) do |http|
|
97
|
+
|
98
|
+
http.request(req)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
require "processout/errors/authentication_error"
|
5
|
+
require "processout/errors/generic_error"
|
6
|
+
require "processout/errors/internal_error"
|
7
|
+
require "processout/errors/notfound_error"
|
8
|
+
require "processout/errors/validation_error"
|
9
|
+
|
10
|
+
module ProcessOut
|
11
|
+
class Response
|
12
|
+
attr_reader :body
|
13
|
+
|
14
|
+
def initialize(resp)
|
15
|
+
@resp = resp
|
16
|
+
@status = resp.code.to_i
|
17
|
+
@body = JSON.parse(resp.body)
|
18
|
+
self.check
|
19
|
+
end
|
20
|
+
|
21
|
+
# Success returns whether or not the response returned a successful message
|
22
|
+
def success
|
23
|
+
if @body.include? "success"
|
24
|
+
return @body["success"]
|
25
|
+
end
|
26
|
+
false
|
27
|
+
end
|
28
|
+
|
29
|
+
# Code returns the error code contained in the response, if any
|
30
|
+
def code
|
31
|
+
if @body.include? "error_type"
|
32
|
+
return @body["error_type"]
|
33
|
+
end
|
34
|
+
""
|
35
|
+
end
|
36
|
+
|
37
|
+
# Message returns the error message contained in the response, if any
|
38
|
+
def message
|
39
|
+
if @body.include? "message"
|
40
|
+
return @body["message"]
|
41
|
+
end
|
42
|
+
""
|
43
|
+
end
|
44
|
+
|
45
|
+
# Check checks the response didn't contain any error, or raises an
|
46
|
+
# error if one was found
|
47
|
+
def check
|
48
|
+
unless self.success
|
49
|
+
if @status == 404
|
50
|
+
raise NotFoundError.new(self.code, self.message)
|
51
|
+
end
|
52
|
+
if @status == 401
|
53
|
+
raise AuthenticationError.new(self.code, self.message)
|
54
|
+
end
|
55
|
+
if @status == 400
|
56
|
+
raise ValidationError.new(self.code, self.message)
|
57
|
+
end
|
58
|
+
if @status >= 500
|
59
|
+
raise InternalError.new(self.code, self.message)
|
60
|
+
end
|
61
|
+
|
62
|
+
raise GenericError.new(self.code, self.message)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
protected :check
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class PaymentDataNetworkAuthentication
|
10
|
+
|
11
|
+
attr_reader :cavv
|
12
|
+
|
13
|
+
|
14
|
+
def cavv=(val)
|
15
|
+
@cavv = val
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# Initializes the PaymentDataNetworkAuthentication object
|
20
|
+
# Params:
|
21
|
+
# +client+:: +ProcessOut+ client instance
|
22
|
+
# +data+:: data that can be used to fill the object
|
23
|
+
def initialize(client, data = {})
|
24
|
+
@client = client
|
25
|
+
|
26
|
+
self.cavv = data.fetch(:cavv, nil)
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a new PaymentDataNetworkAuthentication using the current client
|
31
|
+
def new(data = {})
|
32
|
+
PaymentDataNetworkAuthentication.new(@client, data)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Overrides the JSON marshaller to only send the fields we want
|
36
|
+
def to_json(options)
|
37
|
+
{
|
38
|
+
"cavv": self.cavv,
|
39
|
+
}.to_json
|
40
|
+
end
|
41
|
+
|
42
|
+
# Fills the object with data coming from the API
|
43
|
+
# Params:
|
44
|
+
# +data+:: +Hash+ of data coming from the API
|
45
|
+
def fill_with_data(data)
|
46
|
+
if data.nil?
|
47
|
+
return self
|
48
|
+
end
|
49
|
+
if data.include? "cavv"
|
50
|
+
self.cavv = data["cavv"]
|
51
|
+
end
|
52
|
+
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
# Prefills the object with the data passed as parameters
|
57
|
+
# Params:
|
58
|
+
# +data+:: +Hash+ of data
|
59
|
+
def prefill(data)
|
60
|
+
if data.nil?
|
61
|
+
return self
|
62
|
+
end
|
63
|
+
self.cavv = data.fetch(:cavv, self.cavv)
|
64
|
+
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class PaymentDataThreeDSAuthentication
|
10
|
+
|
11
|
+
attr_reader :xid
|
12
|
+
|
13
|
+
|
14
|
+
def xid=(val)
|
15
|
+
@xid = val
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# Initializes the PaymentDataThreeDSAuthentication object
|
20
|
+
# Params:
|
21
|
+
# +client+:: +ProcessOut+ client instance
|
22
|
+
# +data+:: data that can be used to fill the object
|
23
|
+
def initialize(client, data = {})
|
24
|
+
@client = client
|
25
|
+
|
26
|
+
self.xid = data.fetch(:xid, nil)
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a new PaymentDataThreeDSAuthentication using the current client
|
31
|
+
def new(data = {})
|
32
|
+
PaymentDataThreeDSAuthentication.new(@client, data)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Overrides the JSON marshaller to only send the fields we want
|
36
|
+
def to_json(options)
|
37
|
+
{
|
38
|
+
"XID": self.xid,
|
39
|
+
}.to_json
|
40
|
+
end
|
41
|
+
|
42
|
+
# Fills the object with data coming from the API
|
43
|
+
# Params:
|
44
|
+
# +data+:: +Hash+ of data coming from the API
|
45
|
+
def fill_with_data(data)
|
46
|
+
if data.nil?
|
47
|
+
return self
|
48
|
+
end
|
49
|
+
if data.include? "XID"
|
50
|
+
self.xid = data["XID"]
|
51
|
+
end
|
52
|
+
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
# Prefills the object with the data passed as parameters
|
57
|
+
# Params:
|
58
|
+
# +data+:: +Hash+ of data
|
59
|
+
def prefill(data)
|
60
|
+
if data.nil?
|
61
|
+
return self
|
62
|
+
end
|
63
|
+
self.xid = data.fetch(:xid, self.xid)
|
64
|
+
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class PaymentDataThreeDSRequest
|
10
|
+
|
11
|
+
attr_reader :acs_url
|
12
|
+
attr_reader :pareq
|
13
|
+
attr_reader :md
|
14
|
+
attr_reader :term_url
|
15
|
+
|
16
|
+
|
17
|
+
def acs_url=(val)
|
18
|
+
@acs_url = val
|
19
|
+
end
|
20
|
+
|
21
|
+
def pareq=(val)
|
22
|
+
@pareq = val
|
23
|
+
end
|
24
|
+
|
25
|
+
def md=(val)
|
26
|
+
@md = val
|
27
|
+
end
|
28
|
+
|
29
|
+
def term_url=(val)
|
30
|
+
@term_url = val
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# Initializes the PaymentDataThreeDSRequest object
|
35
|
+
# Params:
|
36
|
+
# +client+:: +ProcessOut+ client instance
|
37
|
+
# +data+:: data that can be used to fill the object
|
38
|
+
def initialize(client, data = {})
|
39
|
+
@client = client
|
40
|
+
|
41
|
+
self.acs_url = data.fetch(:acs_url, nil)
|
42
|
+
self.pareq = data.fetch(:pareq, nil)
|
43
|
+
self.md = data.fetch(:md, nil)
|
44
|
+
self.term_url = data.fetch(:term_url, nil)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
# Create a new PaymentDataThreeDSRequest using the current client
|
49
|
+
def new(data = {})
|
50
|
+
PaymentDataThreeDSRequest.new(@client, data)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Overrides the JSON marshaller to only send the fields we want
|
54
|
+
def to_json(options)
|
55
|
+
{
|
56
|
+
"acs_url": self.acs_url,
|
57
|
+
"pareq": self.pareq,
|
58
|
+
"md": self.md,
|
59
|
+
"term_url": self.term_url,
|
60
|
+
}.to_json
|
61
|
+
end
|
62
|
+
|
63
|
+
# Fills the object with data coming from the API
|
64
|
+
# Params:
|
65
|
+
# +data+:: +Hash+ of data coming from the API
|
66
|
+
def fill_with_data(data)
|
67
|
+
if data.nil?
|
68
|
+
return self
|
69
|
+
end
|
70
|
+
if data.include? "acs_url"
|
71
|
+
self.acs_url = data["acs_url"]
|
72
|
+
end
|
73
|
+
if data.include? "pareq"
|
74
|
+
self.pareq = data["pareq"]
|
75
|
+
end
|
76
|
+
if data.include? "md"
|
77
|
+
self.md = data["md"]
|
78
|
+
end
|
79
|
+
if data.include? "term_url"
|
80
|
+
self.term_url = data["term_url"]
|
81
|
+
end
|
82
|
+
|
83
|
+
self
|
84
|
+
end
|
85
|
+
|
86
|
+
# Prefills the object with the data passed as parameters
|
87
|
+
# Params:
|
88
|
+
# +data+:: +Hash+ of data
|
89
|
+
def prefill(data)
|
90
|
+
if data.nil?
|
91
|
+
return self
|
92
|
+
end
|
93
|
+
self.acs_url = data.fetch(:acs_url, self.acs_url)
|
94
|
+
self.pareq = data.fetch(:pareq, self.pareq)
|
95
|
+
self.md = data.fetch(:md, self.md)
|
96
|
+
self.term_url = data.fetch(:term_url, self.term_url)
|
97
|
+
|
98
|
+
self
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|