paymongo-ruby 0.1.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.
- checksums.yaml +7 -0
- data/lib/paymongo/api_resource.rb +19 -0
- data/lib/paymongo/entities/attributes/payment_intents/next_action.rb +19 -0
- data/lib/paymongo/entities/base_entity.rb +6 -0
- data/lib/paymongo/entities/billing_entity.rb +28 -0
- data/lib/paymongo/entities/customer.rb +33 -0
- data/lib/paymongo/entities/event.rb +15 -0
- data/lib/paymongo/entities/link.rb +41 -0
- data/lib/paymongo/entities/listing.rb +13 -0
- data/lib/paymongo/entities/payment.rb +65 -0
- data/lib/paymongo/entities/payment_intent.rb +53 -0
- data/lib/paymongo/entities/payment_method.rb +27 -0
- data/lib/paymongo/entities/refund.rb +39 -0
- data/lib/paymongo/entities/webhook.rb +25 -0
- data/lib/paymongo/errors/authentication_error.rb +6 -0
- data/lib/paymongo/errors/base_error.rb +16 -0
- data/lib/paymongo/errors/invalid_request_error.rb +6 -0
- data/lib/paymongo/errors/resource_not_found_error.rb +6 -0
- data/lib/paymongo/errors/signature_verification_error.rb +6 -0
- data/lib/paymongo/errors/unexpected_value_error.rb +6 -0
- data/lib/paymongo/paymongo_client.rb +64 -0
- data/lib/paymongo/paymongo_config.rb +19 -0
- data/lib/paymongo/paymongo_error.rb +13 -0
- data/lib/paymongo/services/base_service.rb +19 -0
- data/lib/paymongo/services/customer.rb +41 -0
- data/lib/paymongo/services/link.rb +48 -0
- data/lib/paymongo/services/payment.rb +14 -0
- data/lib/paymongo/services/payment_intent.rb +50 -0
- data/lib/paymongo/services/payment_method.rb +23 -0
- data/lib/paymongo/services/refund.rb +23 -0
- data/lib/paymongo/services/webhook.rb +95 -0
- data/lib/paymongo-ruby.rb +52 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f6ebc6cac7b66d1658d51dfe8cc34d1c62121d987f87527b501886b52beab114
|
4
|
+
data.tar.gz: 16a276d50777ad10eb3dae0d65b785f7faea3e14a657370d150b6cf26d56442e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dc08725eefb9f075784e6b931a72b0cdf152a844f57b76a8ef3cf3f51f3a1fc4e18400e48d1b820e1f1a426dcc0f5f5965fd13b7c1ee5eb4383c43cdd7ab35f4
|
7
|
+
data.tar.gz: 65aa2364e995de3ff3fc21fb12ac2f48ac84713419f34b1696174a94b72a3d429d24e6ca0a296e7fd6874e2c551b4afb0168592f801ef8598de6fb040e6717a1
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class ApiResource
|
3
|
+
attr_reader :id,
|
4
|
+
:attributes,
|
5
|
+
:data,
|
6
|
+
:has_more
|
7
|
+
|
8
|
+
def initialize(response)
|
9
|
+
@data = response['data'] || response
|
10
|
+
|
11
|
+
if @data.respond_to?(:has_key?) && @data.has_key?('attributes')
|
12
|
+
@id = @data['id']
|
13
|
+
@attributes = @data['attributes']
|
14
|
+
end
|
15
|
+
|
16
|
+
@has_more = response['has_more']
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
module Attributes
|
4
|
+
module PaymentIntents
|
5
|
+
class NextAction < PaymentIntent
|
6
|
+
attr_reader :redirect_url,
|
7
|
+
:redirect_return_url,
|
8
|
+
:type,
|
9
|
+
|
10
|
+
def initialize(data)
|
11
|
+
@redirect_return_url = data['redirect_return_url']
|
12
|
+
@redirect_url = data['redirect_url']
|
13
|
+
@type = data['type']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class BillingEntity < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:address_city,
|
6
|
+
:address_country,
|
7
|
+
:address_line1,
|
8
|
+
:address_line2,
|
9
|
+
:address_postal_code,
|
10
|
+
:address_state,
|
11
|
+
:email,
|
12
|
+
:name,
|
13
|
+
:phone
|
14
|
+
|
15
|
+
def initialize(data)
|
16
|
+
@address_city = data['address']['city']
|
17
|
+
@address_country = data['address']['country']
|
18
|
+
@address_line1 = data['address']['line1']
|
19
|
+
@address_line2 = data['address']['line2']
|
20
|
+
@address_postal_code = data['address']['postal_code']
|
21
|
+
@address_state = data['address']['state']
|
22
|
+
@email = data['email']
|
23
|
+
@name = data['name']
|
24
|
+
@phone = data['phone']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Customer < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:default_device,
|
6
|
+
:default_payment_method_id,
|
7
|
+
:deleted,
|
8
|
+
:email,
|
9
|
+
:first_name,
|
10
|
+
:last_name,
|
11
|
+
:livemode,
|
12
|
+
:phone,
|
13
|
+
:type,
|
14
|
+
:created_at,
|
15
|
+
:updated_at
|
16
|
+
|
17
|
+
def initialize(api_resource)
|
18
|
+
@id = api_resource.id
|
19
|
+
@default_device = api_resource.attributes['default_device']
|
20
|
+
@default_payment_method_id = api_resource.attributes['default_payment_method_id']
|
21
|
+
@deleted = api_resource.attributes['deleted']
|
22
|
+
@email = api_resource.attributes['email']
|
23
|
+
@first_name = api_resource.attributes['first_name']
|
24
|
+
@last_name = api_resource.attributes['last_name']
|
25
|
+
@livemode = api_resource.attributes['livemode']
|
26
|
+
@phone = api_resource.attributes['phone']
|
27
|
+
@type = api_resource.data['type']
|
28
|
+
@created_at = api_resource.attributes['created_at']
|
29
|
+
@updated_at = api_resource.attributes['updated_at']
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Event < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:resource,
|
6
|
+
:type
|
7
|
+
|
8
|
+
def initialize(api_resource)
|
9
|
+
@id = api_resource.id
|
10
|
+
@resource = api_resource.attributes['data']
|
11
|
+
@type = api_resource.attributes['type']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Link < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:amount,
|
6
|
+
:archived,
|
7
|
+
:checkout_url,
|
8
|
+
:currency,
|
9
|
+
:description,
|
10
|
+
:fee,
|
11
|
+
:livemode,
|
12
|
+
:payments,
|
13
|
+
:reference_number,
|
14
|
+
:remarks,
|
15
|
+
:status,
|
16
|
+
:tax_amount,
|
17
|
+
:taxes,
|
18
|
+
:created_at,
|
19
|
+
:updated_at
|
20
|
+
|
21
|
+
def initialize(api_resource)
|
22
|
+
@id = api_resource.id
|
23
|
+
@amount = api_resource.attributes['amount']
|
24
|
+
@archived = api_resource.attributes['archived']
|
25
|
+
@checkout_url = api_resource.attributes['checkout_url']
|
26
|
+
@currency = api_resource.attributes['currency']
|
27
|
+
@description = api_resource.attributes['description']
|
28
|
+
@fee = api_resource.attributes['fee']
|
29
|
+
@livemode = api_resource.attributes['livemode']
|
30
|
+
@payments = api_resource.attributes['payments']
|
31
|
+
@reference_number = api_resource.attributes['reference_number']
|
32
|
+
@remarks = api_resource.attributes['remarks']
|
33
|
+
@status = api_resource.attributes['status']
|
34
|
+
@tax_amount = api_resource.attributes['tax_amount']
|
35
|
+
@taxes = api_resource.attributes['taxes']
|
36
|
+
@created_at = api_resource.attributes['created_at']
|
37
|
+
@updated_at = api_resource.attributes['updated_at']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Payment < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:access_url,
|
6
|
+
:amount,
|
7
|
+
:balance_transaction_id,
|
8
|
+
:billing,
|
9
|
+
:currency,
|
10
|
+
:description,
|
11
|
+
:disputed,
|
12
|
+
:external_reference_number,
|
13
|
+
:fee,
|
14
|
+
:foreign_fee,
|
15
|
+
:livemode,
|
16
|
+
:metadata,
|
17
|
+
:net_amount,
|
18
|
+
:origin,
|
19
|
+
:payment_intent_id,
|
20
|
+
:payout,
|
21
|
+
:refunds,
|
22
|
+
:source,
|
23
|
+
:statement_descriptor,
|
24
|
+
:status,
|
25
|
+
:tax_amount,
|
26
|
+
:taxes,
|
27
|
+
:available_at,
|
28
|
+
:created_at,
|
29
|
+
:credited_at,
|
30
|
+
:paid_at,
|
31
|
+
:updated_at
|
32
|
+
|
33
|
+
def initialize(api_resource)
|
34
|
+
@id = api_resource.id
|
35
|
+
@access_url = api_resource.attributes['access_url']
|
36
|
+
@amount = api_resource.attributes['amount']
|
37
|
+
@balance_transaction_id = api_resource.attributes['balance_transaction_id']
|
38
|
+
@billing = BillingEntity.new(api_resource.attributes['billing'])
|
39
|
+
@currency = api_resource.attributes['currency']
|
40
|
+
@description = api_resource.attributes['description']
|
41
|
+
@disputed = api_resource.attributes['disputed']
|
42
|
+
@external_reference_number = api_resource.attributes['external_reference_number']
|
43
|
+
@fee = api_resource.attributes['fee']
|
44
|
+
@foreign_fee = api_resource.attributes['foreign_fee']
|
45
|
+
@livemode = api_resource.attributes['livemode']
|
46
|
+
@metadata = api_resource.attributes['metadata']
|
47
|
+
@net_amount = api_resource.attributes['net_amount']
|
48
|
+
@origin = api_resource.attributes['origin']
|
49
|
+
@payment_intent_id = api_resource.attributes['payment_intent_id']
|
50
|
+
@payout = api_resource.attributes['payout']
|
51
|
+
@refunds = api_resource.attributes['refunds']
|
52
|
+
@source = api_resource.attributes['source']
|
53
|
+
@statement_descriptor = api_resource.attributes['statement_descriptor']
|
54
|
+
@status = api_resource.attributes['status']
|
55
|
+
@tax_amount = api_resource.attributes['tax_amount']
|
56
|
+
@taxes = api_resource.attributes['taxes']
|
57
|
+
@available_at = api_resource.attributes['available_at']
|
58
|
+
@created_at = api_resource.attributes['created_at']
|
59
|
+
@credited_at = api_resource.attributes['credited_at']
|
60
|
+
@paid_at = api_resource.attributes['paid_at']
|
61
|
+
@updated_at = api_resource.attributes['updated_at']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class PaymentIntent < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:amount,
|
6
|
+
:capture_type,
|
7
|
+
:client_key,
|
8
|
+
:currency,
|
9
|
+
:description,
|
10
|
+
:livemode,
|
11
|
+
:statement_descriptor,
|
12
|
+
:status,
|
13
|
+
:last_payment_error,
|
14
|
+
:payment_method,
|
15
|
+
:payment_method_allowed,
|
16
|
+
:payments,
|
17
|
+
:next_action,
|
18
|
+
:payment_method_options,
|
19
|
+
:metadata,
|
20
|
+
:setup_future_usage,
|
21
|
+
:created_at,
|
22
|
+
:updated_at
|
23
|
+
|
24
|
+
def initialize(api_resource)
|
25
|
+
@id = api_resource.id
|
26
|
+
@amount = api_resource.attributes['amount']
|
27
|
+
@capture_type = api_resource.attributes['capture_type']
|
28
|
+
@client_key = api_resource.attributes['client_key']
|
29
|
+
@currency = api_resource.attributes['currency']
|
30
|
+
@description = api_resource.attributes['description']
|
31
|
+
@livemode = api_resource.attributes['livemode']
|
32
|
+
@statement_descriptor = api_resource.attributes['statement_descriptor']
|
33
|
+
@status = api_resource.attributes['status']
|
34
|
+
@last_payment_error = api_resource.attributes['last_payment_error']
|
35
|
+
@payment_method_allowed = api_resource.attributes['payment_method_allowed']
|
36
|
+
@payments = api_resource.attributes['payments'] #TODO: ENG-21218 PayMongo-Ruby - Map payments attribute to array of payment entities
|
37
|
+
@next_action = next_action(api_resource.attributes['next_action'])
|
38
|
+
@payment_method = api_resource.attributes['payment_method']
|
39
|
+
@payment_method_options = api_resource.attributes['payment_method_options']
|
40
|
+
@metadata = api_resource.attributes['metadata']
|
41
|
+
@setup_future_usage = api_resource.attributes['setup_future_usage']
|
42
|
+
@created_at = api_resource.attributes['created_at']
|
43
|
+
@updated_at = api_resource.attributes['updated_at']
|
44
|
+
end
|
45
|
+
|
46
|
+
def next_action(data)
|
47
|
+
return nil if data.nil? || data.empty?
|
48
|
+
|
49
|
+
Attributes::PaymentIntents::NextAction.new(data)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class PaymentMethod < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:billing,
|
6
|
+
:details,
|
7
|
+
:livemode,
|
8
|
+
:metadata,
|
9
|
+
:source_id,
|
10
|
+
:type,
|
11
|
+
:created_at,
|
12
|
+
:updated_at
|
13
|
+
|
14
|
+
def initialize(api_resource)
|
15
|
+
@id = api_resource.id
|
16
|
+
@billing = BillingEntity.new(api_resource.attributes['billing'])
|
17
|
+
@details = api_resource.attributes['details']
|
18
|
+
@livemode = api_resource.attributes['livemode']
|
19
|
+
@metadata = api_resource.attributes['metadata']
|
20
|
+
@source_id = api_resource.attributes['source_id']
|
21
|
+
@type = api_resource.attributes['type']
|
22
|
+
@created_at = api_resource.attributes['created_at']
|
23
|
+
@updated_at = api_resource.attributes['updated_at']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Refund < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:amount,
|
6
|
+
:balance_transaction_id,
|
7
|
+
:currency,
|
8
|
+
:livemode,
|
9
|
+
:metadata,
|
10
|
+
:notes,
|
11
|
+
:payment_id,
|
12
|
+
:payout_id,
|
13
|
+
:reason,
|
14
|
+
:status,
|
15
|
+
:available_at,
|
16
|
+
:created_at,
|
17
|
+
:refunded_at,
|
18
|
+
:updated_at
|
19
|
+
|
20
|
+
def initialize(api_resource)
|
21
|
+
@id = api_resource.id
|
22
|
+
@amount = api_resource.attributes['amount']
|
23
|
+
@balance_transaction_id = api_resource.attributes['balance_transaction_id']
|
24
|
+
@currency = api_resource.attributes['currency']
|
25
|
+
@livemode = api_resource.attributes['livemode']
|
26
|
+
@metadata = api_resource.attributes['metadata']
|
27
|
+
@notes = api_resource.attributes['notes']
|
28
|
+
@payment_id = api_resource.attributes['payment_id']
|
29
|
+
@payout_id = api_resource.attributes['payout_id']
|
30
|
+
@reason = api_resource.attributes['reason']
|
31
|
+
@status = api_resource.attributes['status']
|
32
|
+
@available_at = api_resource.attributes['available_at']
|
33
|
+
@created_at = api_resource.attributes['created_at']
|
34
|
+
@refunded_at = api_resource.attributes['refunded_at']
|
35
|
+
@updated_at = api_resource.attributes['updated_at']
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Paymongo
|
2
|
+
module Entities
|
3
|
+
class Webhook < BaseEntity
|
4
|
+
attr_reader :id,
|
5
|
+
:events,
|
6
|
+
:livemode,
|
7
|
+
:status,
|
8
|
+
:secret_key,
|
9
|
+
:url,
|
10
|
+
:created_at,
|
11
|
+
:updated_at
|
12
|
+
|
13
|
+
def initialize(api_resource)
|
14
|
+
@id = api_resource.id
|
15
|
+
@events = api_resource.attributes['events']
|
16
|
+
@livemode = api_resource.attributes['livemode']
|
17
|
+
@status = api_resource.attributes['status']
|
18
|
+
@secret_key = api_resource.attributes['secret_key']
|
19
|
+
@url = api_resource.attributes['url']
|
20
|
+
@created_at = api_resource.attributes['created_at']
|
21
|
+
@updated_at = api_resource.attributes['updated_at']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class PaymongoClient
|
3
|
+
def self.execute_request(method:, params: {}, path:)
|
4
|
+
uri = URI("#{Paymongo.config.api_base_url}/#{Paymongo.config.api_version}/#{path}")
|
5
|
+
|
6
|
+
request = self.initiate_request(method: method, params: params, uri: uri)
|
7
|
+
|
8
|
+
request.basic_auth Paymongo.config.api_key, ''
|
9
|
+
|
10
|
+
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
|
11
|
+
http.request(request)
|
12
|
+
end
|
13
|
+
|
14
|
+
self.handle_error(response) unless self.successful?(response)
|
15
|
+
|
16
|
+
json_response_body = JSON.parse(response.body)
|
17
|
+
|
18
|
+
Paymongo::ApiResource.new(json_response_body)
|
19
|
+
end
|
20
|
+
|
21
|
+
private_class_method def self.handle_error(response)
|
22
|
+
json_response_body = JSON.parse(response.body)
|
23
|
+
|
24
|
+
case response.code
|
25
|
+
when '400'
|
26
|
+
raise Paymongo::Errors::InvalidRequestError.new(json_response_body)
|
27
|
+
when '401'
|
28
|
+
raise Paymongo::Errors::AuthenticationError.new(json_response_body)
|
29
|
+
when '404'
|
30
|
+
raise Paymongo::Errors::ResourceNotFoundError.new(json_response_body)
|
31
|
+
else
|
32
|
+
raise Paymongo::Errors::BaseError.new(json_response_body)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private_class_method def self.initiate_request(method:, params: {}, uri:)
|
37
|
+
case method
|
38
|
+
when :delete
|
39
|
+
request = Net::HTTP::Delete.new(uri)
|
40
|
+
when :get
|
41
|
+
unless params.empty?
|
42
|
+
encoded_params = URI.encode_www_form(params)
|
43
|
+
uri = [uri, encoded_params].join('?')
|
44
|
+
end
|
45
|
+
|
46
|
+
request = Net::HTTP::Get.new(uri)
|
47
|
+
when :post
|
48
|
+
request = Net::HTTP::Post.new(uri)
|
49
|
+
request.body = { data: { attributes: params } }.to_json
|
50
|
+
request.set_content_type('application/json')
|
51
|
+
when :put
|
52
|
+
request = Net::HTTP::Put.new(uri)
|
53
|
+
request.body = { data: { attributes: params } }.to_json
|
54
|
+
request.set_content_type('application/json')
|
55
|
+
end
|
56
|
+
|
57
|
+
request
|
58
|
+
end
|
59
|
+
|
60
|
+
private_class_method def self.successful?(response)
|
61
|
+
response.code == '200'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class PaymongoConfig
|
3
|
+
attr_accessor :api_key
|
4
|
+
|
5
|
+
attr_reader :api_base_url,
|
6
|
+
:api_version
|
7
|
+
|
8
|
+
def self.setup
|
9
|
+
new.tap do |instance|
|
10
|
+
yield(instance) if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@api_base_url = 'https://api.paymongo.com'
|
16
|
+
@api_version = 'v1'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class BaseService
|
3
|
+
def self.request(is_listing: false, method:, object:, path:, payload: {})
|
4
|
+
api_resource = Paymongo::PaymongoClient.execute_request(
|
5
|
+
method: method,
|
6
|
+
params: payload,
|
7
|
+
path: path
|
8
|
+
)
|
9
|
+
|
10
|
+
if is_listing
|
11
|
+
data = api_resource.data.map { |data| object.new(Paymongo::ApiResource.new(data)) }
|
12
|
+
|
13
|
+
Paymongo::Entities::Listing.new(data: data, has_more: api_resource.has_more)
|
14
|
+
else
|
15
|
+
object.new(api_resource)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class Customer < BaseService
|
3
|
+
URI = 'customers'
|
4
|
+
|
5
|
+
def self.create(payload)
|
6
|
+
self.request(
|
7
|
+
method: :post,
|
8
|
+
object: Paymongo::Entities::Customer,
|
9
|
+
path: self::URI,
|
10
|
+
payload: payload
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.delete(id)
|
15
|
+
self.request(
|
16
|
+
method: :delete,
|
17
|
+
object: Paymongo::Entities::Customer,
|
18
|
+
path: "#{self::URI}/#{id}",
|
19
|
+
payload: {}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.retrieve(id)
|
24
|
+
self.request(
|
25
|
+
method: :get,
|
26
|
+
object: Paymongo::Entities::Customer,
|
27
|
+
path: "#{self::URI}/#{id}",
|
28
|
+
payload: {}
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.update(id, payload)
|
33
|
+
self.request(
|
34
|
+
method: :put,
|
35
|
+
object: Paymongo::Entities::Customer,
|
36
|
+
path: "#{self::URI}/#{id}",
|
37
|
+
payload: payload
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class Link < BaseService
|
3
|
+
URI = 'links'
|
4
|
+
|
5
|
+
def self.all(payload)
|
6
|
+
self.request(
|
7
|
+
is_listing: true,
|
8
|
+
method: :get,
|
9
|
+
object: Paymongo::Entities::Link,
|
10
|
+
path: self::URI,
|
11
|
+
payload: payload
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.archive(id)
|
16
|
+
self.request(
|
17
|
+
method: :post,
|
18
|
+
object: Paymongo::Entities::Link,
|
19
|
+
path: "#{self::URI}/#{id}/archive"
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create(payload)
|
24
|
+
self.request(
|
25
|
+
method: :post,
|
26
|
+
object: Paymongo::Entities::Link,
|
27
|
+
path: self::URI,
|
28
|
+
payload: payload
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.retrieve(id)
|
33
|
+
self.request(
|
34
|
+
method: :get,
|
35
|
+
object: Paymongo::Entities::Link,
|
36
|
+
path: "#{self::URI}/#{id}"
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.unarchive(id)
|
41
|
+
self.request(
|
42
|
+
method: :post,
|
43
|
+
object: Paymongo::Entities::Link,
|
44
|
+
path: "#{self::URI}/#{id}/unarchive"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class PaymentIntent < BaseService
|
3
|
+
URI = 'payment_intents'
|
4
|
+
|
5
|
+
def self.attach(id, payload)
|
6
|
+
self.request(
|
7
|
+
method: :post,
|
8
|
+
object: Paymongo::Entities::PaymentIntent,
|
9
|
+
path: "#{self::URI}/#{id}/attach",
|
10
|
+
payload: payload
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.cancel(id)
|
15
|
+
self.request(
|
16
|
+
method: :post,
|
17
|
+
object: Paymongo::Entities::PaymentIntent,
|
18
|
+
path: "#{self::URI}/#{id}/cancel",
|
19
|
+
payload: {}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.capture(id, payload)
|
24
|
+
self.request(
|
25
|
+
method: :post,
|
26
|
+
object: Paymongo::Entities::PaymentIntent,
|
27
|
+
path: "#{self::URI}/#{id}/capture",
|
28
|
+
payload: payload
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.create(payload)
|
33
|
+
self.request(
|
34
|
+
method: :post,
|
35
|
+
object: Paymongo::Entities::PaymentIntent,
|
36
|
+
path: self::URI,
|
37
|
+
payload: payload
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.retrieve(id)
|
42
|
+
self.request(
|
43
|
+
method: :get,
|
44
|
+
object: Paymongo::Entities::PaymentIntent,
|
45
|
+
path: "#{self::URI}/#{id}",
|
46
|
+
payload: {}
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class PaymentMethod < BaseService
|
3
|
+
URI = 'payment_methods'
|
4
|
+
|
5
|
+
def self.create(payload)
|
6
|
+
self.request(
|
7
|
+
method: :post,
|
8
|
+
object: Paymongo::Entities::PaymentMethod,
|
9
|
+
path: self::URI,
|
10
|
+
payload: payload
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.retrieve(id)
|
15
|
+
self.request(
|
16
|
+
method: :get,
|
17
|
+
object: Paymongo::Entities::PaymentMethod,
|
18
|
+
path: "#{self::URI}/#{id}",
|
19
|
+
payload: {}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class Refund < BaseService
|
3
|
+
URI = 'refunds'
|
4
|
+
|
5
|
+
def self.create(payload)
|
6
|
+
self.request(
|
7
|
+
method: :post,
|
8
|
+
object: Paymongo::Entities::Refund,
|
9
|
+
path: self::URI,
|
10
|
+
payload: payload
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.retrieve(id)
|
15
|
+
self.request(
|
16
|
+
method: :get,
|
17
|
+
object: Paymongo::Entities::Refund,
|
18
|
+
path: "#{self::URI}/#{id}",
|
19
|
+
payload: {}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Paymongo
|
2
|
+
class Webhook < BaseService
|
3
|
+
URI = 'webhooks'
|
4
|
+
|
5
|
+
def self.all()
|
6
|
+
self.request(
|
7
|
+
is_listing: true,
|
8
|
+
method: :get,
|
9
|
+
object: Paymongo::Entities::Webhook,
|
10
|
+
path: self::URI
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.construct_event(payload:, signature_header:, webhook_secret_key:)
|
15
|
+
unless signature_header.is_a?(String)
|
16
|
+
raise Paymongo::Errors::UnexpectedValueError.new('The signature must be a string.')
|
17
|
+
end
|
18
|
+
|
19
|
+
signature_array = signature_header.split(',')
|
20
|
+
|
21
|
+
if signature_array.length < 3
|
22
|
+
raise Paymongo::Errors::UnexpectedValueError.new("The format of signature #{signature_header} is invalid.")
|
23
|
+
end
|
24
|
+
|
25
|
+
timestamp = signature_array[0].split('=')[1]
|
26
|
+
test_mode_signature = signature_array[1].split('=')[1]
|
27
|
+
live_mode_signature = signature_array[2].split('=')[1]
|
28
|
+
|
29
|
+
unless test_mode_signature.nil?
|
30
|
+
comparison_signature = test_mode_signature
|
31
|
+
end
|
32
|
+
|
33
|
+
unless live_mode_signature.nil?
|
34
|
+
comparison_signature = live_mode_signature
|
35
|
+
end
|
36
|
+
|
37
|
+
hash = OpenSSL::HMAC.hexdigest(
|
38
|
+
OpenSSL::Digest.new('sha256'),
|
39
|
+
webhook_secret_key,
|
40
|
+
"#{timestamp}.#{payload}"
|
41
|
+
)
|
42
|
+
|
43
|
+
if hash != comparison_signature
|
44
|
+
raise Paymongo::Errors::SignatureVerificationError.new('The signature is invalid.')
|
45
|
+
end
|
46
|
+
|
47
|
+
api_resource = Paymongo::ApiResource.new(JSON.parse(payload))
|
48
|
+
|
49
|
+
Paymongo::Entities::Event.new(api_resource)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.create(payload)
|
53
|
+
self.request(
|
54
|
+
method: :post,
|
55
|
+
object: Paymongo::Entities::Webhook,
|
56
|
+
path: self::URI,
|
57
|
+
payload: payload
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.disable(id)
|
62
|
+
self.request(
|
63
|
+
method: :post,
|
64
|
+
object: Paymongo::Entities::Webhook,
|
65
|
+
path: "#{self::URI}/#{id}/disable"
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.enable(id)
|
70
|
+
self.request(
|
71
|
+
method: :post,
|
72
|
+
object: Paymongo::Entities::Webhook,
|
73
|
+
path: "#{self::URI}/#{id}/enable"
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.retrieve(id)
|
78
|
+
self.request(
|
79
|
+
method: :get,
|
80
|
+
object: Paymongo::Entities::Webhook,
|
81
|
+
path: "#{self::URI}/#{id}",
|
82
|
+
payload: {}
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.update(id, payload)
|
87
|
+
self.request(
|
88
|
+
method: :put,
|
89
|
+
object: Paymongo::Entities::Webhook,
|
90
|
+
path: "#{self::URI}/#{id}",
|
91
|
+
payload: payload
|
92
|
+
)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
require 'forwardable'
|
4
|
+
require 'openssl'
|
5
|
+
|
6
|
+
require 'paymongo/entities/base_entity'
|
7
|
+
require 'paymongo/entities/billing_entity'
|
8
|
+
require 'paymongo/entities/customer'
|
9
|
+
require 'paymongo/entities/event'
|
10
|
+
require 'paymongo/entities/link'
|
11
|
+
require 'paymongo/entities/listing'
|
12
|
+
require 'paymongo/entities/payment'
|
13
|
+
require 'paymongo/entities/payment_intent'
|
14
|
+
require 'paymongo/entities/payment_method'
|
15
|
+
require 'paymongo/entities/refund'
|
16
|
+
require 'paymongo/entities/webhook'
|
17
|
+
require 'paymongo/entities/attributes/payment_intents/next_action'
|
18
|
+
|
19
|
+
require 'paymongo/errors/base_error'
|
20
|
+
require 'paymongo/errors/authentication_error'
|
21
|
+
require 'paymongo/errors/invalid_request_error'
|
22
|
+
require 'paymongo/errors/resource_not_found_error'
|
23
|
+
require 'paymongo/errors/signature_verification_error'
|
24
|
+
require 'paymongo/errors/unexpected_value_error'
|
25
|
+
|
26
|
+
require 'paymongo/api_resource'
|
27
|
+
require 'paymongo/paymongo_client'
|
28
|
+
require 'paymongo/paymongo_config'
|
29
|
+
require 'paymongo/paymongo_error'
|
30
|
+
|
31
|
+
require 'paymongo/services/base_service'
|
32
|
+
require 'paymongo/services/customer'
|
33
|
+
require 'paymongo/services/link'
|
34
|
+
require 'paymongo/services/payment'
|
35
|
+
require 'paymongo/services/payment_intent'
|
36
|
+
require 'paymongo/services/payment_method'
|
37
|
+
require 'paymongo/services/refund'
|
38
|
+
require 'paymongo/services/webhook'
|
39
|
+
|
40
|
+
module Paymongo
|
41
|
+
@config = Paymongo::PaymongoConfig.setup
|
42
|
+
|
43
|
+
class << self
|
44
|
+
extend Forwardable
|
45
|
+
|
46
|
+
attr_reader :config
|
47
|
+
|
48
|
+
def_delegators :@config, :api_key, :api_key=
|
49
|
+
def_delegators :@config, :api_base_url, :api_base_url=
|
50
|
+
def_delegators :@config, :api_version, :api_version=
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: paymongo-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PayMongo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-02-22 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: PayMongo Ruby Library
|
14
|
+
email: support@paymongo.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/paymongo-ruby.rb
|
20
|
+
- lib/paymongo/api_resource.rb
|
21
|
+
- lib/paymongo/entities/attributes/payment_intents/next_action.rb
|
22
|
+
- lib/paymongo/entities/base_entity.rb
|
23
|
+
- lib/paymongo/entities/billing_entity.rb
|
24
|
+
- lib/paymongo/entities/customer.rb
|
25
|
+
- lib/paymongo/entities/event.rb
|
26
|
+
- lib/paymongo/entities/link.rb
|
27
|
+
- lib/paymongo/entities/listing.rb
|
28
|
+
- lib/paymongo/entities/payment.rb
|
29
|
+
- lib/paymongo/entities/payment_intent.rb
|
30
|
+
- lib/paymongo/entities/payment_method.rb
|
31
|
+
- lib/paymongo/entities/refund.rb
|
32
|
+
- lib/paymongo/entities/webhook.rb
|
33
|
+
- lib/paymongo/errors/authentication_error.rb
|
34
|
+
- lib/paymongo/errors/base_error.rb
|
35
|
+
- lib/paymongo/errors/invalid_request_error.rb
|
36
|
+
- lib/paymongo/errors/resource_not_found_error.rb
|
37
|
+
- lib/paymongo/errors/signature_verification_error.rb
|
38
|
+
- lib/paymongo/errors/unexpected_value_error.rb
|
39
|
+
- lib/paymongo/paymongo_client.rb
|
40
|
+
- lib/paymongo/paymongo_config.rb
|
41
|
+
- lib/paymongo/paymongo_error.rb
|
42
|
+
- lib/paymongo/services/base_service.rb
|
43
|
+
- lib/paymongo/services/customer.rb
|
44
|
+
- lib/paymongo/services/link.rb
|
45
|
+
- lib/paymongo/services/payment.rb
|
46
|
+
- lib/paymongo/services/payment_intent.rb
|
47
|
+
- lib/paymongo/services/payment_method.rb
|
48
|
+
- lib/paymongo/services/refund.rb
|
49
|
+
- lib/paymongo/services/webhook.rb
|
50
|
+
homepage: https://developers.paymongo.com/docs/introduction
|
51
|
+
licenses:
|
52
|
+
- MIT
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubygems_version: 3.2.3
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: PayMongo Ruby
|
73
|
+
test_files: []
|