razorpay 2.4.0 → 3.2.4
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 +4 -4
- data/.cursorignore +174 -0
- data/.github/dependabot.yml +8 -0
- data/.github/pull_request_template.md +8 -0
- data/.github/workflows/ci.yml +80 -0
- data/.github/workflows/ruby.yml +38 -0
- data/CHANGELOG.md +85 -1
- data/README.md +48 -137
- data/documents/Invoice.md +539 -0
- data/documents/account.md +449 -0
- data/documents/addon.md +191 -0
- data/documents/card.md +655 -0
- data/documents/customer.md +405 -0
- data/documents/dispute.md +301 -0
- data/documents/documents.md +65 -0
- data/documents/emandate.md +492 -0
- data/documents/fund.md +89 -0
- data/documents/items.md +208 -0
- data/documents/oauth_token.md +142 -0
- data/documents/order.md +352 -0
- data/documents/papernach.md +738 -0
- data/documents/payment.md +1122 -0
- data/documents/paymentLink.md +1063 -0
- data/documents/paymentVerification.md +79 -0
- data/documents/plan.md +184 -0
- data/documents/productConfiguration.md +444 -0
- data/documents/qrcode.md +439 -0
- data/documents/refund.md +325 -0
- data/documents/registerEmandate.md +452 -0
- data/documents/registerNach.md +653 -0
- data/documents/settlement.md +478 -0
- data/documents/stakeholder.md +334 -0
- data/documents/subscriptions.md +752 -0
- data/documents/tokens.md +407 -0
- data/documents/transfers.md +821 -0
- data/documents/upi.md +545 -0
- data/documents/virtualAccount.md +591 -0
- data/documents/webhook.md +224 -0
- data/lib/razorpay/account.rb +39 -0
- data/lib/razorpay/addon.rb +9 -1
- data/lib/razorpay/card.rb +4 -0
- data/lib/razorpay/constants.rb +7 -2
- data/lib/razorpay/customer.rb +31 -0
- data/lib/razorpay/dispute.rb +26 -0
- data/lib/razorpay/document.rb +19 -0
- data/lib/razorpay/fund_account.rb +19 -0
- data/lib/razorpay/iin.rb +15 -0
- data/lib/razorpay/invoice.rb +8 -0
- data/lib/razorpay/item.rb +34 -0
- data/lib/razorpay/oauth_token.rb +109 -0
- data/lib/razorpay/order.rb +19 -1
- data/lib/razorpay/payload_validator.rb +93 -0
- data/lib/razorpay/payment.rb +64 -0
- data/lib/razorpay/payment_link.rb +36 -0
- data/lib/razorpay/payment_method.rb +17 -0
- data/lib/razorpay/product.rb +37 -0
- data/lib/razorpay/qr_code.rb +34 -0
- data/lib/razorpay/refund.rb +4 -0
- data/lib/razorpay/request.rb +50 -26
- data/lib/razorpay/settlement.rb +39 -0
- data/lib/razorpay/stakeholder.rb +39 -0
- data/lib/razorpay/subscription.rb +24 -0
- data/lib/razorpay/subscription_registration.rb +16 -0
- data/lib/razorpay/token.rb +28 -0
- data/lib/razorpay/transfer.rb +39 -0
- data/lib/razorpay/utility.rb +41 -6
- data/lib/razorpay/validation_config.rb +11 -0
- data/lib/razorpay/virtual_account.rb +15 -7
- data/lib/razorpay/webhook.rb +50 -0
- data/lib/razorpay.rb +24 -1
- data/razorpay-ruby.gemspec +2 -1
- data/test/fixtures/addon_collection.json +60 -0
- data/test/fixtures/create_json_payment.json +13 -0
- data/test/fixtures/delete_token.json +3 -0
- data/test/fixtures/dispute_collection.json +67 -0
- data/test/fixtures/dispute_error.json +10 -0
- data/test/fixtures/document_error.json +10 -0
- data/test/fixtures/downtimes_collection.json +21 -0
- data/test/fixtures/empty.json +2 -0
- data/test/fixtures/error_customer.json +10 -0
- data/test/fixtures/error_eligibility.json +10 -0
- data/test/fixtures/error_eligibility_check.json +10 -0
- data/test/fixtures/fake_account.json +78 -0
- data/test/fixtures/fake_addon.json +3 -3
- data/test/fixtures/fake_bank_account.json +9 -0
- data/test/fixtures/fake_card_reference.json +5 -0
- data/test/fixtures/fake_create_upi_payment.json +3 -0
- data/test/fixtures/fake_direct_transfer.json +32 -0
- data/test/fixtures/fake_dispute.json +29 -0
- data/test/fixtures/fake_document.json +9 -0
- data/test/fixtures/fake_downtime.json +14 -0
- data/test/fixtures/fake_eligiblity.json +79 -0
- data/test/fixtures/fake_fulfillment.json +10 -0
- data/test/fixtures/fake_fund_account.json +18 -0
- data/test/fixtures/fake_iin_token.json +23 -0
- data/test/fixtures/fake_instant_settlement.json +19 -0
- data/test/fixtures/fake_item.json +9 -0
- data/test/fixtures/fake_oauth_token.json +8 -0
- data/test/fixtures/fake_order_transfers.json +88 -0
- data/test/fixtures/fake_otp_generate.json +19 -0
- data/test/fixtures/fake_otp_resend.json +7 -0
- data/test/fixtures/fake_otp_submit.json +5 -0
- data/test/fixtures/fake_payment_expanded_details.json +38 -0
- data/test/fixtures/fake_payment_expanded_details_card.json +50 -0
- data/test/fixtures/fake_payment_link.json +40 -0
- data/test/fixtures/fake_pending_update.json +30 -0
- data/test/fixtures/fake_product.json +138 -0
- data/test/fixtures/fake_qrcode.json +20 -0
- data/test/fixtures/fake_qrcode_close.json +22 -0
- data/test/fixtures/fake_recurring.json +5 -0
- data/test/fixtures/fake_refund.json +1 -1
- data/test/fixtures/fake_revoke_token.json +3 -0
- data/test/fixtures/fake_rto.json +15 -0
- data/test/fixtures/fake_settlement.json +11 -0
- data/test/fixtures/fake_settlement_on_demand.json +39 -0
- data/test/fixtures/fake_stakeholder.json +29 -0
- data/test/fixtures/fake_subscription_pause.json +19 -0
- data/test/fixtures/fake_subscription_registration.json +91 -0
- data/test/fixtures/fake_subscription_resume.json +19 -0
- data/test/fixtures/fake_token.json +31 -0
- data/test/fixtures/fake_tokenise_customer.json +40 -0
- data/test/fixtures/fake_transfer.json +18 -0
- data/test/fixtures/fake_transfer_reverse.json +15 -0
- data/test/fixtures/fake_update_payment.json +39 -0
- data/test/fixtures/fake_validate_vpa.json +5 -0
- data/test/fixtures/fake_virtual_account_allowed.json +46 -0
- data/test/fixtures/fake_virtual_account_receiver.json +46 -0
- data/test/fixtures/fake_webhook.json +79 -0
- data/test/fixtures/fake_webhook_by_account_id.json +22 -0
- data/test/fixtures/fetch_tnc.json +11 -0
- data/test/fixtures/fund_collection.json +20 -0
- data/test/fixtures/item_collection.json +24 -0
- data/test/fixtures/order_error.json +10 -0
- data/test/fixtures/payment_collection.json +1 -1
- data/test/fixtures/payment_error.json +10 -0
- data/test/fixtures/payment_link_collection.json +43 -0
- data/test/fixtures/payment_link_response.json +3 -0
- data/test/fixtures/payment_methods_collection.json +149 -0
- data/test/fixtures/qrcode_collection.json +50 -0
- data/test/fixtures/qrcode_payments_collection.json +74 -0
- data/test/fixtures/reversals_collection.json +22 -0
- data/test/fixtures/settlement_collection.json +26 -0
- data/test/fixtures/settlement_instant_collection.json +84 -0
- data/test/fixtures/settlement_report_collection.json +117 -0
- data/test/fixtures/stakeholder_collection.json +35 -0
- data/test/fixtures/success.json +3 -0
- data/test/fixtures/tokens_collection.json +36 -0
- data/test/fixtures/transfer_error.json +10 -0
- data/test/fixtures/transfer_settlements_collection.json +38 -0
- data/test/fixtures/transfers_collection.json +41 -0
- data/test/fixtures/webhook_by_account_collection.json +35 -0
- data/test/fixtures/webhook_collection.json +85 -0
- data/test/razorpay/test_account.rb +134 -0
- data/test/razorpay/test_addon.rb +19 -15
- data/test/razorpay/test_card.rb +6 -0
- data/test/razorpay/test_customer.rb +132 -3
- data/test/razorpay/test_dispute.rb +98 -0
- data/test/razorpay/test_document.rb +27 -0
- data/test/razorpay/test_fund_account.rb +42 -0
- data/test/razorpay/test_iin.rb +23 -0
- data/test/razorpay/test_invoice.rb +15 -2
- data/test/razorpay/test_item.rb +66 -0
- data/test/razorpay/test_oauth_token.rb +105 -0
- data/test/razorpay/test_order.rb +66 -1
- data/test/razorpay/test_payload_validator.rb +61 -0
- data/test/razorpay/test_payment.rb +251 -9
- data/test/razorpay/test_payment_link.rb +83 -0
- data/test/razorpay/test_plan.rb +2 -2
- data/test/razorpay/test_product.rb +67 -0
- data/test/razorpay/test_qr_code.rb +63 -0
- data/test/razorpay/test_razorpay.rb +19 -2
- data/test/razorpay/test_refund.rb +16 -2
- data/test/razorpay/test_settlement.rb +76 -0
- data/test/razorpay/test_stakeholder.rb +87 -0
- data/test/razorpay/test_subscription.rb +72 -9
- data/test/razorpay/test_subscription_registration.rb +58 -0
- data/test/razorpay/test_token.rb +66 -0
- data/test/razorpay/test_transfer.rb +94 -0
- data/test/razorpay/test_utility.rb +72 -4
- data/test/razorpay/test_virtual_account.rb +64 -17
- data/test/razorpay/test_webhook.rb +132 -0
- data/test/test_helper.rb +8 -0
- metadata +265 -10
- data/.travis.yml +0 -22
- data/test/razorpay/test_errors.rb +0 -19
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Razorpay
|
|
2
|
+
|
|
3
|
+
ValidationType = {
|
|
4
|
+
non_null: :non_null,
|
|
5
|
+
non_empty_string: :non_empty_string,
|
|
6
|
+
url: :url,
|
|
7
|
+
id: :id,
|
|
8
|
+
mode: :mode,
|
|
9
|
+
token_grant: :token_grant
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
# PayloadValidator allows to perform basic validations
|
|
13
|
+
class PayloadValidator
|
|
14
|
+
def self.validate(request, validation_configs)
|
|
15
|
+
validation_configs.each do |config|
|
|
16
|
+
field_name = config.field_name
|
|
17
|
+
config.validations.each do |validation_type|
|
|
18
|
+
apply_validation(request, field_name, validation_type)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def apply_validation(payload, field, validation_type)
|
|
28
|
+
case validation_type
|
|
29
|
+
when ValidationType[:non_null]
|
|
30
|
+
validate_non_null(payload, field)
|
|
31
|
+
when ValidationType[:non_empty_string]
|
|
32
|
+
validate_non_empty_string(payload, field)
|
|
33
|
+
when ValidationType[:url]
|
|
34
|
+
validate_url(payload, field)
|
|
35
|
+
when ValidationType[:id]
|
|
36
|
+
validate_id(payload, field)
|
|
37
|
+
when ValidationType[:mode]
|
|
38
|
+
validate_mode(payload, field)
|
|
39
|
+
when ValidationType[:token_grant]
|
|
40
|
+
validate_grant_type(payload, field)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def validate_non_null(payload, field)
|
|
45
|
+
raise Razorpay::Error.new, "Field #{field} cannot be null" unless payload.key?(field) && !payload[field].nil?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def validate_non_empty_string(payload, field)
|
|
49
|
+
raise Razorpay::Error.new, "Field #{field} cannot be empty" if payload[field].to_s.strip.empty?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def validate_url(payload, field)
|
|
53
|
+
url = payload[field]
|
|
54
|
+
url_regex = /^(http[s]?):\/\/[^\s\/$.?#].[^\s]*$/
|
|
55
|
+
|
|
56
|
+
unless url_regex.match?(url)
|
|
57
|
+
error_message = "Field #{field} is not a valid URL"
|
|
58
|
+
raise Razorpay::Error.new, error_message
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def validate_id(payload, field)
|
|
63
|
+
validate_non_null(payload, field)
|
|
64
|
+
validate_non_empty_string(payload, field)
|
|
65
|
+
value = payload[field]
|
|
66
|
+
id_regex = /^[A-Za-z0-9]{1,14}$/
|
|
67
|
+
|
|
68
|
+
unless value.match?(id_regex)
|
|
69
|
+
error_message = "Field #{field} is not a valid ID"
|
|
70
|
+
raise Razorpay::Error.new, error_message
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def validate_mode(payload, field)
|
|
75
|
+
validate_non_null(payload, field)
|
|
76
|
+
unless ["test", "live"].include?(payload[field])
|
|
77
|
+
error_message = "Invalid value provided for field #{field}"
|
|
78
|
+
raise Razorpay::Error.new, error_message
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def validate_grant_type(payload, field)
|
|
83
|
+
validate_non_null(payload, field)
|
|
84
|
+
case payload[field]
|
|
85
|
+
when 'authorization_code'
|
|
86
|
+
validate_non_null(payload, 'code');
|
|
87
|
+
when 'refresh_token'
|
|
88
|
+
validate_non_null(payload, 'refresh_token');
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/razorpay/payment.rb
CHANGED
|
@@ -10,6 +10,46 @@ module Razorpay
|
|
|
10
10
|
def self.request
|
|
11
11
|
Razorpay::Request.new('payments')
|
|
12
12
|
end
|
|
13
|
+
|
|
14
|
+
def self.create_recurring_payment(data={})
|
|
15
|
+
request.post "create/recurring" , data
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.create_json_payment(data={})
|
|
19
|
+
request.post "create/json" , data
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.fetch_payment_downtime
|
|
23
|
+
request.get "downtimes"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.fetch_payment_downtime_by_id(id)
|
|
27
|
+
request.get "downtimes/#{id}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.fetch_card_details(id)
|
|
31
|
+
request.get "#{id}/card"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def fetch_transfer
|
|
35
|
+
self.class.request.get "#{id}/transfers"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def fetch_refund(refundId)
|
|
39
|
+
self.class.request.get "#{id}/refunds/#{refundId}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.fetch_multiple_refund(id, options = {})
|
|
43
|
+
request.get "#{id}/refunds",options
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def transfer(options = {})
|
|
47
|
+
self.class.request.post "#{id}/transfers", options
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def edit(options = {})
|
|
51
|
+
self.class.request.patch id, options
|
|
52
|
+
end
|
|
13
53
|
|
|
14
54
|
def self.fetch(id)
|
|
15
55
|
request.fetch id
|
|
@@ -52,5 +92,29 @@ module Razorpay
|
|
|
52
92
|
def bank_transfer
|
|
53
93
|
self.class.request.get "#{id}/bank_transfer"
|
|
54
94
|
end
|
|
95
|
+
|
|
96
|
+
def self.otp_generate(id)
|
|
97
|
+
request.post "#{id}/otp_generate"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def otp_submit(options)
|
|
101
|
+
self.class.request.post "#{id}/otp/submit", options
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def otp_resend
|
|
105
|
+
self.class.request.post "#{id}/otp/resend"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.create_upi(data={})
|
|
109
|
+
request.post "create/upi" , data
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def self.validate_vpa(data={})
|
|
113
|
+
request.post "validate/vpa" , data
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.expand_details(id, options={})
|
|
117
|
+
request.get "#{id}", options
|
|
118
|
+
end
|
|
55
119
|
end
|
|
56
120
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# Payment Links are URLs that you can send to your customers
|
|
6
|
+
# through SMS and email to collect payments from them.
|
|
7
|
+
class PaymentLink < Entity
|
|
8
|
+
def self.request
|
|
9
|
+
Razorpay::Request.new('payment_links')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.create(options)
|
|
13
|
+
request.create options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.fetch(id)
|
|
17
|
+
request.fetch id
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.edit(id, options = {})
|
|
21
|
+
request.patch id, options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.all(options = {})
|
|
25
|
+
request.all options
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.cancel(id)
|
|
29
|
+
request.post "#{id}/cancel"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.notify_by(id,medium)
|
|
33
|
+
request.post "#{id}/notify_by/#{medium}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/refund'
|
|
3
|
+
require 'razorpay/entity'
|
|
4
|
+
|
|
5
|
+
module Razorpay
|
|
6
|
+
# Payment Methods class is allows you to create
|
|
7
|
+
# to fetch all payment methods
|
|
8
|
+
class PaymentMethods < Entity
|
|
9
|
+
def self.request
|
|
10
|
+
Razorpay::Request.new('methods')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.all(options = {})
|
|
14
|
+
request.all options
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# Product API allows you to enable sub-merchants request for a product.
|
|
6
|
+
class Product < Entity
|
|
7
|
+
|
|
8
|
+
@@versions = "v2"
|
|
9
|
+
|
|
10
|
+
def self.request
|
|
11
|
+
Razorpay::Request.new('accounts')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.request_product_configuration(account_id, options)
|
|
15
|
+
if(!options.is_a?(String) && options.key?(:tnc_accepted))
|
|
16
|
+
options[:tnc_accepted] = (options[:tnc_accepted] ? 1 : 0)
|
|
17
|
+
end
|
|
18
|
+
request.post "#{account_id}/products", options, @@versions
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.fetch(account_id, id)
|
|
22
|
+
request.fetch "#{account_id}/products/#{id}", @@versions
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.edit(account_id, id, options = {})
|
|
26
|
+
if(!options.is_a?(String) && options.key?(:tnc_accepted))
|
|
27
|
+
options[:tnc_accepted] = (options[:tnc_accepted] ? 1 : 0)
|
|
28
|
+
end
|
|
29
|
+
request.patch "#{account_id}/products/#{id}", options, @@versions
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.fetch_tnc(productName)
|
|
33
|
+
r = request
|
|
34
|
+
r.request :get, "/#{@@versions}/products/#{productName}/tnc", {}
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# QrCode API allows you to create, close and fetch QR codes
|
|
6
|
+
class QrCode < Entity
|
|
7
|
+
def self.request
|
|
8
|
+
Razorpay::Request.new('payments/qr_codes')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.create(options)
|
|
12
|
+
if(!options.is_a?(String) && options.key?(:fixed_amount))
|
|
13
|
+
options[:fixed_amount] = (options[:fixed_amount] ? 1 : 0)
|
|
14
|
+
end
|
|
15
|
+
request.create options
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.fetch(id)
|
|
19
|
+
request.fetch id
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.all(options = {})
|
|
23
|
+
request.all options
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def fetch_payments(options = {})
|
|
27
|
+
self.class.request.get "#{id}/payments", options
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def close
|
|
31
|
+
self.class.request.post "#{id}/close"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/razorpay/refund.rb
CHANGED
data/lib/razorpay/request.rb
CHANGED
|
@@ -11,65 +11,86 @@ module Razorpay
|
|
|
11
11
|
|
|
12
12
|
ssl_ca_file File.dirname(__FILE__) + '/../ca-bundle.crt'
|
|
13
13
|
|
|
14
|
-
def initialize(entity_name = nil)
|
|
15
|
-
self.class.base_uri(
|
|
14
|
+
def initialize(entity_name = nil, host = Razorpay::API_HOST)
|
|
15
|
+
self.class.base_uri(get_base_url(host))
|
|
16
16
|
@entity_name = entity_name
|
|
17
17
|
custom_headers = Razorpay.custom_headers || {}
|
|
18
18
|
predefined_headers = {
|
|
19
|
-
'User-Agent' => "Razorpay-Ruby/#{Razorpay::VERSION}"
|
|
19
|
+
'User-Agent' => "Razorpay-Ruby/#{Razorpay::VERSION}; Ruby/#{RUBY_VERSION}"
|
|
20
20
|
}
|
|
21
|
+
|
|
21
22
|
# Order is important to give precedence to predefined headers
|
|
22
23
|
headers = custom_headers.merge(predefined_headers)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
|
|
25
|
+
if Razorpay.auth_type == Razorpay::OAUTH
|
|
26
|
+
@options = {
|
|
27
|
+
timeout: 30,
|
|
28
|
+
headers: headers
|
|
29
|
+
}
|
|
30
|
+
headers['Authorization'] = 'Bearer ' + Razorpay.access_token
|
|
31
|
+
else
|
|
32
|
+
@options = {
|
|
33
|
+
basic_auth: Razorpay.auth,
|
|
34
|
+
timeout: 30,
|
|
35
|
+
headers: headers
|
|
36
|
+
}
|
|
37
|
+
end
|
|
28
38
|
end
|
|
29
39
|
|
|
30
|
-
def fetch(id)
|
|
31
|
-
request :get, "/#{@entity_name}/#{id}"
|
|
40
|
+
def fetch(id, version="v1")
|
|
41
|
+
request :get, "/#{version}/#{@entity_name}/#{id}"
|
|
32
42
|
end
|
|
33
43
|
|
|
34
|
-
def all(options)
|
|
35
|
-
request :get, "/#{@entity_name}", options
|
|
44
|
+
def all(options, version="v1")
|
|
45
|
+
request :get, "/#{version}/#{@entity_name}", options
|
|
36
46
|
end
|
|
37
47
|
|
|
38
|
-
def post(url, data = {})
|
|
39
|
-
request :post, "/#{@entity_name}/#{url}", data
|
|
48
|
+
def post(url, data = {}, version="v1")
|
|
49
|
+
request :post, "/#{version}/#{@entity_name}/#{url}", data
|
|
40
50
|
end
|
|
41
51
|
|
|
42
|
-
def get(url)
|
|
43
|
-
request :get, "/#{@entity_name}/#{url}"
|
|
52
|
+
def get(url, data = {}, version="v1")
|
|
53
|
+
request :get, "/#{version}/#{@entity_name}/#{url}", data
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def delete(url, version="v1")
|
|
57
|
+
request :delete, "/#{version}/#{@entity_name}/#{url}"
|
|
44
58
|
end
|
|
45
59
|
|
|
46
|
-
def put(id, data = {})
|
|
47
|
-
request :put, "/#{@entity_name}/#{id}", data
|
|
60
|
+
def put(id, data = {}, version="v1")
|
|
61
|
+
request :put, "/#{version}/#{@entity_name}/#{id}", data
|
|
48
62
|
end
|
|
49
63
|
|
|
50
|
-
def patch(id, data = {})
|
|
51
|
-
request :patch, "/#{@entity_name}/#{id}", data
|
|
64
|
+
def patch(id, data = {}, version="v1")
|
|
65
|
+
request :patch, "/#{version}/#{@entity_name}/#{id}", data
|
|
52
66
|
end
|
|
53
67
|
|
|
54
|
-
def create(data)
|
|
55
|
-
request :post, "/#{@entity_name}", data
|
|
68
|
+
def create(data, version="v1")
|
|
69
|
+
request :post, "/#{version}/#{@entity_name}", data
|
|
56
70
|
end
|
|
57
71
|
|
|
58
72
|
def request(method, url, data = {})
|
|
59
73
|
create_instance raw_request(method, url, data)
|
|
60
74
|
end
|
|
61
75
|
|
|
62
|
-
def raw_request(method, url, data = {})
|
|
76
|
+
def raw_request(method, url, data = {})
|
|
63
77
|
case method
|
|
64
78
|
when :get
|
|
65
79
|
@options[:query] = data
|
|
66
80
|
when :post, :put, :patch
|
|
67
81
|
@options[:body] = data
|
|
68
82
|
end
|
|
69
|
-
|
|
83
|
+
|
|
70
84
|
self.class.send(method, url, @options)
|
|
71
85
|
end
|
|
72
86
|
|
|
87
|
+
def get_base_url(host)
|
|
88
|
+
if host == Razorpay::AUTH_HOST
|
|
89
|
+
return Razorpay::AUTH_URL
|
|
90
|
+
end
|
|
91
|
+
Razorpay::BASE_URI
|
|
92
|
+
end
|
|
93
|
+
|
|
73
94
|
# Since we need to change the base route
|
|
74
95
|
def make_test_request
|
|
75
96
|
self.class.get Razorpay::TEST_URL, @options
|
|
@@ -80,9 +101,12 @@ module Razorpay
|
|
|
80
101
|
def create_instance(res)
|
|
81
102
|
response = res.parsed_response
|
|
82
103
|
|
|
104
|
+
if response.is_a?(Array)==true || response.to_s.length == 0
|
|
105
|
+
return response
|
|
106
|
+
end
|
|
107
|
+
|
|
83
108
|
# if there was an error, throw it
|
|
84
|
-
raise_error(response['error'], res.code) if response.nil? || response.key?('error')
|
|
85
|
-
|
|
109
|
+
raise_error(response['error'], res.code) if response.nil? || response.key?('error') && res.code !=200
|
|
86
110
|
# There must be a top level entity
|
|
87
111
|
# This is either one of payment, refund, or collection at present
|
|
88
112
|
begin
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# Settlement API allows you to fetch and delete
|
|
6
|
+
# Docs: https://razorpay.com/docs/api/settlements/
|
|
7
|
+
class Settlement < Entity
|
|
8
|
+
def self.request
|
|
9
|
+
Razorpay::Request.new('settlements')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.fetch(id)
|
|
13
|
+
request.fetch id
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.reports(options={})
|
|
17
|
+
request.get "recon/combined", options
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.all(options = {})
|
|
21
|
+
request.all options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.create(options={})
|
|
25
|
+
if(!options.is_a?(String) && options.key?(:settle_full_balance))
|
|
26
|
+
options[:settle_full_balance] = (options[:settle_full_balance] ? 1 : 0)
|
|
27
|
+
end
|
|
28
|
+
request.post "ondemand", options
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.fetch_all_ondemand_settlement(options={})
|
|
32
|
+
request.get "ondemand", options
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.fetch_ondemand_settlement_by_id(id, options={})
|
|
36
|
+
request.get "ondemand/#{id}", options
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# Stakeholder API allows you to add stakeholders for an account.
|
|
6
|
+
class Stakeholder < Entity
|
|
7
|
+
|
|
8
|
+
@@versions = "v2"
|
|
9
|
+
|
|
10
|
+
def self.request
|
|
11
|
+
Razorpay::Request.new('accounts')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.create(account_id, options)
|
|
15
|
+
request.post "#{account_id}/stakeholders", options, @@versions
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.fetch(account_id, id)
|
|
19
|
+
request.fetch "#{account_id}/stakeholders/#{id}", @@versions
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.all(account_id)
|
|
23
|
+
request.get "#{account_id}/stakeholders",{}, @@versions
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.edit(account_id, id, options = {})
|
|
27
|
+
request.patch "#{account_id}/stakeholders/#{id}", options, @@versions
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.upload_stakeholder_doc(account_id, id,options)
|
|
31
|
+
r = request
|
|
32
|
+
r.request :post, "/#{@@versions}/accounts/#{account_id}/stakeholders/#{id}/documents", options
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.fetch_stakeholder_doc(account_id, id)
|
|
36
|
+
request.fetch "#{account_id}/stakeholders/#{id}/documents", @@versions
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -32,5 +32,29 @@ module Razorpay
|
|
|
32
32
|
def cancel!(options = {})
|
|
33
33
|
with_a_bang { cancel options }
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
def edit(options = {})
|
|
37
|
+
self.class.request.patch id, options
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def pending_update
|
|
41
|
+
self.class.request.get "#{id}/retrieve_scheduled_changes"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.cancel_scheduled_changes(id)
|
|
45
|
+
request.post "#{id}/cancel_scheduled_changes"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def self.pause(id, options = {})
|
|
49
|
+
request.post "#{id}/pause", options
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.resume(id, options = {})
|
|
53
|
+
request.post "#{id}/resume", options
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.delete_offer(id, offerId)
|
|
57
|
+
request.delete "#{id}/#{offerId}"
|
|
58
|
+
end
|
|
35
59
|
end
|
|
36
60
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# SubscriptionRegistration are an alternate way of
|
|
6
|
+
# creating an authorization transaction
|
|
7
|
+
class SubscriptionRegistration < Entity
|
|
8
|
+
def self.request
|
|
9
|
+
Razorpay::Request.new('subscription_registration/auth_links')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.create(options)
|
|
13
|
+
request.create options
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
|
|
6
|
+
class Token < Entity
|
|
7
|
+
|
|
8
|
+
def self.request
|
|
9
|
+
Razorpay::Request.new('tokens')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.create(options)
|
|
13
|
+
request.create options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.fetch(options)
|
|
17
|
+
request.post "fetch", options
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.delete(options)
|
|
21
|
+
request.post "delete", options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.process_payment_on_alternate_pa_or_pg(options)
|
|
25
|
+
request.post "service_provider_tokens/token_transactional_data", options
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'razorpay/request'
|
|
2
|
+
require 'razorpay/entity'
|
|
3
|
+
|
|
4
|
+
module Razorpay
|
|
5
|
+
# Transfer class handles all refund objects
|
|
6
|
+
class Transfer < Entity
|
|
7
|
+
def self.request
|
|
8
|
+
Razorpay::Request.new('transfers')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.create(options)
|
|
12
|
+
request.create options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.all(options = {})
|
|
16
|
+
request.all options
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.fetch(id)
|
|
20
|
+
request.fetch id
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def edit(options = {})
|
|
24
|
+
self.class.request.patch id, options
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def reverse(options = {})
|
|
28
|
+
self.class.request.post "#{id}/reversals", options
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.fetch_settlements
|
|
32
|
+
request.get "?expand[]=recipient_settlement"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.reversals(id)
|
|
36
|
+
request.get "#{id}/reversals"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|