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.
Files changed (185) hide show
  1. checksums.yaml +4 -4
  2. data/.cursorignore +174 -0
  3. data/.github/dependabot.yml +8 -0
  4. data/.github/pull_request_template.md +8 -0
  5. data/.github/workflows/ci.yml +80 -0
  6. data/.github/workflows/ruby.yml +38 -0
  7. data/CHANGELOG.md +85 -1
  8. data/README.md +48 -137
  9. data/documents/Invoice.md +539 -0
  10. data/documents/account.md +449 -0
  11. data/documents/addon.md +191 -0
  12. data/documents/card.md +655 -0
  13. data/documents/customer.md +405 -0
  14. data/documents/dispute.md +301 -0
  15. data/documents/documents.md +65 -0
  16. data/documents/emandate.md +492 -0
  17. data/documents/fund.md +89 -0
  18. data/documents/items.md +208 -0
  19. data/documents/oauth_token.md +142 -0
  20. data/documents/order.md +352 -0
  21. data/documents/papernach.md +738 -0
  22. data/documents/payment.md +1122 -0
  23. data/documents/paymentLink.md +1063 -0
  24. data/documents/paymentVerification.md +79 -0
  25. data/documents/plan.md +184 -0
  26. data/documents/productConfiguration.md +444 -0
  27. data/documents/qrcode.md +439 -0
  28. data/documents/refund.md +325 -0
  29. data/documents/registerEmandate.md +452 -0
  30. data/documents/registerNach.md +653 -0
  31. data/documents/settlement.md +478 -0
  32. data/documents/stakeholder.md +334 -0
  33. data/documents/subscriptions.md +752 -0
  34. data/documents/tokens.md +407 -0
  35. data/documents/transfers.md +821 -0
  36. data/documents/upi.md +545 -0
  37. data/documents/virtualAccount.md +591 -0
  38. data/documents/webhook.md +224 -0
  39. data/lib/razorpay/account.rb +39 -0
  40. data/lib/razorpay/addon.rb +9 -1
  41. data/lib/razorpay/card.rb +4 -0
  42. data/lib/razorpay/constants.rb +7 -2
  43. data/lib/razorpay/customer.rb +31 -0
  44. data/lib/razorpay/dispute.rb +26 -0
  45. data/lib/razorpay/document.rb +19 -0
  46. data/lib/razorpay/fund_account.rb +19 -0
  47. data/lib/razorpay/iin.rb +15 -0
  48. data/lib/razorpay/invoice.rb +8 -0
  49. data/lib/razorpay/item.rb +34 -0
  50. data/lib/razorpay/oauth_token.rb +109 -0
  51. data/lib/razorpay/order.rb +19 -1
  52. data/lib/razorpay/payload_validator.rb +93 -0
  53. data/lib/razorpay/payment.rb +64 -0
  54. data/lib/razorpay/payment_link.rb +36 -0
  55. data/lib/razorpay/payment_method.rb +17 -0
  56. data/lib/razorpay/product.rb +37 -0
  57. data/lib/razorpay/qr_code.rb +34 -0
  58. data/lib/razorpay/refund.rb +4 -0
  59. data/lib/razorpay/request.rb +50 -26
  60. data/lib/razorpay/settlement.rb +39 -0
  61. data/lib/razorpay/stakeholder.rb +39 -0
  62. data/lib/razorpay/subscription.rb +24 -0
  63. data/lib/razorpay/subscription_registration.rb +16 -0
  64. data/lib/razorpay/token.rb +28 -0
  65. data/lib/razorpay/transfer.rb +39 -0
  66. data/lib/razorpay/utility.rb +41 -6
  67. data/lib/razorpay/validation_config.rb +11 -0
  68. data/lib/razorpay/virtual_account.rb +15 -7
  69. data/lib/razorpay/webhook.rb +50 -0
  70. data/lib/razorpay.rb +24 -1
  71. data/razorpay-ruby.gemspec +2 -1
  72. data/test/fixtures/addon_collection.json +60 -0
  73. data/test/fixtures/create_json_payment.json +13 -0
  74. data/test/fixtures/delete_token.json +3 -0
  75. data/test/fixtures/dispute_collection.json +67 -0
  76. data/test/fixtures/dispute_error.json +10 -0
  77. data/test/fixtures/document_error.json +10 -0
  78. data/test/fixtures/downtimes_collection.json +21 -0
  79. data/test/fixtures/empty.json +2 -0
  80. data/test/fixtures/error_customer.json +10 -0
  81. data/test/fixtures/error_eligibility.json +10 -0
  82. data/test/fixtures/error_eligibility_check.json +10 -0
  83. data/test/fixtures/fake_account.json +78 -0
  84. data/test/fixtures/fake_addon.json +3 -3
  85. data/test/fixtures/fake_bank_account.json +9 -0
  86. data/test/fixtures/fake_card_reference.json +5 -0
  87. data/test/fixtures/fake_create_upi_payment.json +3 -0
  88. data/test/fixtures/fake_direct_transfer.json +32 -0
  89. data/test/fixtures/fake_dispute.json +29 -0
  90. data/test/fixtures/fake_document.json +9 -0
  91. data/test/fixtures/fake_downtime.json +14 -0
  92. data/test/fixtures/fake_eligiblity.json +79 -0
  93. data/test/fixtures/fake_fulfillment.json +10 -0
  94. data/test/fixtures/fake_fund_account.json +18 -0
  95. data/test/fixtures/fake_iin_token.json +23 -0
  96. data/test/fixtures/fake_instant_settlement.json +19 -0
  97. data/test/fixtures/fake_item.json +9 -0
  98. data/test/fixtures/fake_oauth_token.json +8 -0
  99. data/test/fixtures/fake_order_transfers.json +88 -0
  100. data/test/fixtures/fake_otp_generate.json +19 -0
  101. data/test/fixtures/fake_otp_resend.json +7 -0
  102. data/test/fixtures/fake_otp_submit.json +5 -0
  103. data/test/fixtures/fake_payment_expanded_details.json +38 -0
  104. data/test/fixtures/fake_payment_expanded_details_card.json +50 -0
  105. data/test/fixtures/fake_payment_link.json +40 -0
  106. data/test/fixtures/fake_pending_update.json +30 -0
  107. data/test/fixtures/fake_product.json +138 -0
  108. data/test/fixtures/fake_qrcode.json +20 -0
  109. data/test/fixtures/fake_qrcode_close.json +22 -0
  110. data/test/fixtures/fake_recurring.json +5 -0
  111. data/test/fixtures/fake_refund.json +1 -1
  112. data/test/fixtures/fake_revoke_token.json +3 -0
  113. data/test/fixtures/fake_rto.json +15 -0
  114. data/test/fixtures/fake_settlement.json +11 -0
  115. data/test/fixtures/fake_settlement_on_demand.json +39 -0
  116. data/test/fixtures/fake_stakeholder.json +29 -0
  117. data/test/fixtures/fake_subscription_pause.json +19 -0
  118. data/test/fixtures/fake_subscription_registration.json +91 -0
  119. data/test/fixtures/fake_subscription_resume.json +19 -0
  120. data/test/fixtures/fake_token.json +31 -0
  121. data/test/fixtures/fake_tokenise_customer.json +40 -0
  122. data/test/fixtures/fake_transfer.json +18 -0
  123. data/test/fixtures/fake_transfer_reverse.json +15 -0
  124. data/test/fixtures/fake_update_payment.json +39 -0
  125. data/test/fixtures/fake_validate_vpa.json +5 -0
  126. data/test/fixtures/fake_virtual_account_allowed.json +46 -0
  127. data/test/fixtures/fake_virtual_account_receiver.json +46 -0
  128. data/test/fixtures/fake_webhook.json +79 -0
  129. data/test/fixtures/fake_webhook_by_account_id.json +22 -0
  130. data/test/fixtures/fetch_tnc.json +11 -0
  131. data/test/fixtures/fund_collection.json +20 -0
  132. data/test/fixtures/item_collection.json +24 -0
  133. data/test/fixtures/order_error.json +10 -0
  134. data/test/fixtures/payment_collection.json +1 -1
  135. data/test/fixtures/payment_error.json +10 -0
  136. data/test/fixtures/payment_link_collection.json +43 -0
  137. data/test/fixtures/payment_link_response.json +3 -0
  138. data/test/fixtures/payment_methods_collection.json +149 -0
  139. data/test/fixtures/qrcode_collection.json +50 -0
  140. data/test/fixtures/qrcode_payments_collection.json +74 -0
  141. data/test/fixtures/reversals_collection.json +22 -0
  142. data/test/fixtures/settlement_collection.json +26 -0
  143. data/test/fixtures/settlement_instant_collection.json +84 -0
  144. data/test/fixtures/settlement_report_collection.json +117 -0
  145. data/test/fixtures/stakeholder_collection.json +35 -0
  146. data/test/fixtures/success.json +3 -0
  147. data/test/fixtures/tokens_collection.json +36 -0
  148. data/test/fixtures/transfer_error.json +10 -0
  149. data/test/fixtures/transfer_settlements_collection.json +38 -0
  150. data/test/fixtures/transfers_collection.json +41 -0
  151. data/test/fixtures/webhook_by_account_collection.json +35 -0
  152. data/test/fixtures/webhook_collection.json +85 -0
  153. data/test/razorpay/test_account.rb +134 -0
  154. data/test/razorpay/test_addon.rb +19 -15
  155. data/test/razorpay/test_card.rb +6 -0
  156. data/test/razorpay/test_customer.rb +132 -3
  157. data/test/razorpay/test_dispute.rb +98 -0
  158. data/test/razorpay/test_document.rb +27 -0
  159. data/test/razorpay/test_fund_account.rb +42 -0
  160. data/test/razorpay/test_iin.rb +23 -0
  161. data/test/razorpay/test_invoice.rb +15 -2
  162. data/test/razorpay/test_item.rb +66 -0
  163. data/test/razorpay/test_oauth_token.rb +105 -0
  164. data/test/razorpay/test_order.rb +66 -1
  165. data/test/razorpay/test_payload_validator.rb +61 -0
  166. data/test/razorpay/test_payment.rb +251 -9
  167. data/test/razorpay/test_payment_link.rb +83 -0
  168. data/test/razorpay/test_plan.rb +2 -2
  169. data/test/razorpay/test_product.rb +67 -0
  170. data/test/razorpay/test_qr_code.rb +63 -0
  171. data/test/razorpay/test_razorpay.rb +19 -2
  172. data/test/razorpay/test_refund.rb +16 -2
  173. data/test/razorpay/test_settlement.rb +76 -0
  174. data/test/razorpay/test_stakeholder.rb +87 -0
  175. data/test/razorpay/test_subscription.rb +72 -9
  176. data/test/razorpay/test_subscription_registration.rb +58 -0
  177. data/test/razorpay/test_token.rb +66 -0
  178. data/test/razorpay/test_transfer.rb +94 -0
  179. data/test/razorpay/test_utility.rb +72 -4
  180. data/test/razorpay/test_virtual_account.rb +64 -17
  181. data/test/razorpay/test_webhook.rb +132 -0
  182. data/test/test_helper.rb +8 -0
  183. metadata +265 -10
  184. data/.travis.yml +0 -22
  185. 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
@@ -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
@@ -19,5 +19,9 @@ module Razorpay
19
19
  def self.fetch(id)
20
20
  request.fetch id
21
21
  end
22
+
23
+ def edit(options = {})
24
+ self.class.request.patch id, options
25
+ end
22
26
  end
23
27
  end
@@ -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(Razorpay::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
- @options = {
24
- basic_auth: Razorpay.auth,
25
- timeout: 30,
26
- headers: headers
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