veritrans 2.3.0 → 2.4.0

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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.idea/.gitignore +8 -0
  4. data/.rubocop.yml +1 -1
  5. data/.travis.yml +2 -1
  6. data/CHANGELOG.md +13 -0
  7. data/Gemfile +2 -11
  8. data/Gemfile.lock +116 -145
  9. data/Maintaining.MD +8 -0
  10. data/README.md +247 -278
  11. data/api_reference.md +482 -173
  12. data/example/coreapi/core_api_credit_card_example.rb +66 -0
  13. data/example/coreapi/readme.md +4 -0
  14. data/example/sinatra/Gemfile +7 -0
  15. data/example/sinatra/README.md +4 -6
  16. data/example/sinatra/index.erb +180 -192
  17. data/example/sinatra/response.erb +1 -40
  18. data/example/sinatra/snap.erb +33 -0
  19. data/example/sinatra/snap_redirect.erb +10 -0
  20. data/example/sinatra/webapp.rb +113 -0
  21. data/example/snap/readme.md +4 -0
  22. data/example/snap/snap_example.rb +39 -0
  23. data/lib/test/all.rb +1 -0
  24. data/lib/test/api_test.rb +319 -0
  25. data/lib/test/config_test.rb +26 -0
  26. data/lib/test/gopay_tokenization_test.rb +80 -0
  27. data/lib/test/snap_test.rb +79 -0
  28. data/lib/test/subscription_test.rb +116 -0
  29. data/lib/test/transaction_test.rb +160 -0
  30. data/lib/veritrans/api.rb +105 -8
  31. data/lib/veritrans/client.rb +40 -7
  32. data/lib/veritrans/config.rb +26 -3
  33. data/lib/veritrans/midtrans_error.rb +15 -0
  34. data/lib/veritrans/version.rb +1 -1
  35. data/lib/veritrans.rb +5 -6
  36. data/veritrans.gemspec +1 -2
  37. metadata +25 -248
  38. data/.rspec +0 -2
  39. data/Procfile +0 -1
  40. data/Rakefile +0 -16
  41. data/bin/midtrans +0 -3
  42. data/bin/veritrans +0 -68
  43. data/example/rails/cable/Gemfile +0 -48
  44. data/example/rails/cable/Gemfile.lock +0 -184
  45. data/example/rails/cable/README.md +0 -29
  46. data/example/rails/cable/Rakefile +0 -6
  47. data/example/rails/cable/app/assets/config/manifest.js +0 -3
  48. data/example/rails/cable/app/assets/images/.keep +0 -0
  49. data/example/rails/cable/app/assets/javascripts/application.js +0 -15
  50. data/example/rails/cable/app/assets/javascripts/cable.js +0 -13
  51. data/example/rails/cable/app/assets/javascripts/channels/.keep +0 -0
  52. data/example/rails/cable/app/assets/javascripts/chats.js +0 -39
  53. data/example/rails/cable/app/assets/javascripts/rooms.js +0 -55
  54. data/example/rails/cable/app/assets/stylesheets/application.css +0 -16
  55. data/example/rails/cable/app/assets/stylesheets/chatbox.scss +0 -31
  56. data/example/rails/cable/app/assets/stylesheets/peoplebox.scss +0 -6
  57. data/example/rails/cable/app/channels/application_cable/channel.rb +0 -4
  58. data/example/rails/cable/app/channels/application_cable/connection.rb +0 -4
  59. data/example/rails/cable/app/channels/rooms_texting_channel.rb +0 -13
  60. data/example/rails/cable/app/controllers/application_controller.rb +0 -3
  61. data/example/rails/cable/app/controllers/chats_controller.rb +0 -18
  62. data/example/rails/cable/app/controllers/concerns/.keep +0 -0
  63. data/example/rails/cable/app/controllers/pays_controller.rb +0 -28
  64. data/example/rails/cable/app/controllers/rooms_controller.rb +0 -4
  65. data/example/rails/cable/app/helpers/application_helper.rb +0 -2
  66. data/example/rails/cable/app/helpers/chats_helper.rb +0 -2
  67. data/example/rails/cable/app/helpers/rooms_helper.rb +0 -5
  68. data/example/rails/cable/app/jobs/application_job.rb +0 -2
  69. data/example/rails/cable/app/jobs/chat_broadcaster_job.rb +0 -15
  70. data/example/rails/cable/app/mailers/application_mailer.rb +0 -4
  71. data/example/rails/cable/app/models/application_record.rb +0 -3
  72. data/example/rails/cable/app/models/chat.rb +0 -41
  73. data/example/rails/cable/app/models/concerns/.keep +0 -0
  74. data/example/rails/cable/app/models/order.rb +0 -2
  75. data/example/rails/cable/app/models/user.rb +0 -2
  76. data/example/rails/cable/app/views/chats/_chat.html.erb +0 -18
  77. data/example/rails/cable/app/views/layouts/application.html.erb +0 -19
  78. data/example/rails/cable/app/views/layouts/mailer.html.erb +0 -13
  79. data/example/rails/cable/app/views/layouts/mailer.text.erb +0 -1
  80. data/example/rails/cable/app/views/rooms/_chatbox.html.erb +0 -13
  81. data/example/rails/cable/app/views/rooms/_online_people.html.erb +0 -53
  82. data/example/rails/cable/app/views/rooms/index.html.erb +0 -9
  83. data/example/rails/cable/bin/bundle +0 -3
  84. data/example/rails/cable/bin/rails +0 -9
  85. data/example/rails/cable/bin/rake +0 -9
  86. data/example/rails/cable/bin/setup +0 -34
  87. data/example/rails/cable/bin/spring +0 -16
  88. data/example/rails/cable/bin/update +0 -29
  89. data/example/rails/cable/config/application.rb +0 -16
  90. data/example/rails/cable/config/boot.rb +0 -3
  91. data/example/rails/cable/config/cable.yml +0 -9
  92. data/example/rails/cable/config/database.yml +0 -20
  93. data/example/rails/cable/config/environment.rb +0 -5
  94. data/example/rails/cable/config/environments/development.rb +0 -57
  95. data/example/rails/cable/config/environments/production.rb +0 -86
  96. data/example/rails/cable/config/environments/test.rb +0 -42
  97. data/example/rails/cable/config/initializers/application_controller_renderer.rb +0 -6
  98. data/example/rails/cable/config/initializers/assets.rb +0 -11
  99. data/example/rails/cable/config/initializers/backtrace_silencers.rb +0 -7
  100. data/example/rails/cable/config/initializers/cookies_serializer.rb +0 -5
  101. data/example/rails/cable/config/initializers/filter_parameter_logging.rb +0 -4
  102. data/example/rails/cable/config/initializers/inflections.rb +0 -16
  103. data/example/rails/cable/config/initializers/mime_types.rb +0 -4
  104. data/example/rails/cable/config/initializers/new_framework_defaults.rb +0 -24
  105. data/example/rails/cable/config/initializers/session_store.rb +0 -3
  106. data/example/rails/cable/config/initializers/sidekiq.rb +0 -2
  107. data/example/rails/cable/config/initializers/veritrans.rb +0 -46
  108. data/example/rails/cable/config/initializers/wrap_parameters.rb +0 -14
  109. data/example/rails/cable/config/locales/en.yml +0 -23
  110. data/example/rails/cable/config/puma.rb +0 -47
  111. data/example/rails/cable/config/routes.rb +0 -18
  112. data/example/rails/cable/config/secrets.yml +0 -22
  113. data/example/rails/cable/config/spring.rb +0 -6
  114. data/example/rails/cable/config/veritrans.yml +0 -13
  115. data/example/rails/cable/config.ru +0 -5
  116. data/example/rails/cable/db/development.sqlite3 +0 -0
  117. data/example/rails/cable/db/migrate/20161215070044_create_chats.rb +0 -10
  118. data/example/rails/cable/db/migrate/20161215072021_create_users.rb +0 -10
  119. data/example/rails/cable/db/migrate/20161219110219_create_orders.rb +0 -11
  120. data/example/rails/cable/db/schema.rb +0 -37
  121. data/example/rails/cable/db/seeds.rb +0 -41
  122. data/example/rails/cable/db/test.sqlite3 +0 -0
  123. data/example/rails/cable/lib/assets/.keep +0 -0
  124. data/example/rails/cable/lib/tasks/.keep +0 -0
  125. data/example/rails/cable/log/.keep +0 -0
  126. data/example/rails/cable/public/404.html +0 -67
  127. data/example/rails/cable/public/422.html +0 -67
  128. data/example/rails/cable/public/500.html +0 -66
  129. data/example/rails/cable/public/apple-touch-icon-precomposed.png +0 -0
  130. data/example/rails/cable/public/apple-touch-icon.png +0 -0
  131. data/example/rails/cable/public/favicon.ico +0 -0
  132. data/example/rails/cable/public/images/avatar1.jpg +0 -0
  133. data/example/rails/cable/public/images/avatar2.jpg +0 -0
  134. data/example/rails/cable/public/images/avatar3.jpg +0 -0
  135. data/example/rails/cable/public/images/avatar4.jpg +0 -0
  136. data/example/rails/cable/public/images/avatar5.jpg +0 -0
  137. data/example/rails/cable/public/images/avatar6.jpg +0 -0
  138. data/example/rails/cable/public/robots.txt +0 -5
  139. data/example/rails/cable/vendor/assets/javascripts/.keep +0 -0
  140. data/example/rails/cable/vendor/assets/stylesheets/.keep +0 -0
  141. data/example/rails/cable/vendor/assets/stylesheets/photon.css +0 -2333
  142. data/example/rails/simplepay/Gemfile +0 -54
  143. data/example/rails/simplepay/Gemfile.lock +0 -178
  144. data/example/rails/simplepay/README.md +0 -30
  145. data/example/rails/simplepay/Rakefile +0 -6
  146. data/example/rails/simplepay/app/assets/config/manifest.js +0 -3
  147. data/example/rails/simplepay/app/assets/images/.keep +0 -0
  148. data/example/rails/simplepay/app/assets/javascripts/application.js +0 -16
  149. data/example/rails/simplepay/app/assets/javascripts/cable.js +0 -13
  150. data/example/rails/simplepay/app/assets/javascripts/channels/.keep +0 -0
  151. data/example/rails/simplepay/app/assets/javascripts/pay.js +0 -18
  152. data/example/rails/simplepay/app/assets/stylesheets/application.css +0 -15
  153. data/example/rails/simplepay/app/assets/stylesheets/style.css +0 -254
  154. data/example/rails/simplepay/app/channels/application_cable/channel.rb +0 -4
  155. data/example/rails/simplepay/app/channels/application_cable/connection.rb +0 -4
  156. data/example/rails/simplepay/app/controllers/application_controller.rb +0 -3
  157. data/example/rails/simplepay/app/controllers/concerns/.keep +0 -0
  158. data/example/rails/simplepay/app/controllers/home_controller.rb +0 -16
  159. data/example/rails/simplepay/app/controllers/pay_controller.rb +0 -10
  160. data/example/rails/simplepay/app/helpers/application_helper.rb +0 -2
  161. data/example/rails/simplepay/app/helpers/pay_helper.rb +0 -2
  162. data/example/rails/simplepay/app/jobs/application_job.rb +0 -2
  163. data/example/rails/simplepay/app/mailers/application_mailer.rb +0 -4
  164. data/example/rails/simplepay/app/models/application_record.rb +0 -3
  165. data/example/rails/simplepay/app/models/concerns/.keep +0 -0
  166. data/example/rails/simplepay/app/models/order.rb +0 -2
  167. data/example/rails/simplepay/app/views/home/index.html.erb +0 -19
  168. data/example/rails/simplepay/app/views/layouts/application.html.erb +0 -15
  169. data/example/rails/simplepay/app/views/layouts/mailer.html.erb +0 -13
  170. data/example/rails/simplepay/app/views/layouts/mailer.text.erb +0 -1
  171. data/example/rails/simplepay/app/views/pay/notify.html.erb +0 -2
  172. data/example/rails/simplepay/bin/bundle +0 -3
  173. data/example/rails/simplepay/bin/rails +0 -9
  174. data/example/rails/simplepay/bin/rake +0 -9
  175. data/example/rails/simplepay/bin/setup +0 -34
  176. data/example/rails/simplepay/bin/spring +0 -16
  177. data/example/rails/simplepay/bin/update +0 -29
  178. data/example/rails/simplepay/config/application.rb +0 -15
  179. data/example/rails/simplepay/config/boot.rb +0 -3
  180. data/example/rails/simplepay/config/cable.yml +0 -9
  181. data/example/rails/simplepay/config/database.yml +0 -25
  182. data/example/rails/simplepay/config/environment.rb +0 -5
  183. data/example/rails/simplepay/config/environments/development.rb +0 -57
  184. data/example/rails/simplepay/config/environments/production.rb +0 -86
  185. data/example/rails/simplepay/config/environments/test.rb +0 -42
  186. data/example/rails/simplepay/config/initializers/application_controller_renderer.rb +0 -6
  187. data/example/rails/simplepay/config/initializers/assets.rb +0 -11
  188. data/example/rails/simplepay/config/initializers/backtrace_silencers.rb +0 -7
  189. data/example/rails/simplepay/config/initializers/cookies_serializer.rb +0 -5
  190. data/example/rails/simplepay/config/initializers/filter_parameter_logging.rb +0 -4
  191. data/example/rails/simplepay/config/initializers/inflections.rb +0 -16
  192. data/example/rails/simplepay/config/initializers/mime_types.rb +0 -4
  193. data/example/rails/simplepay/config/initializers/new_framework_defaults.rb +0 -24
  194. data/example/rails/simplepay/config/initializers/session_store.rb +0 -3
  195. data/example/rails/simplepay/config/initializers/veritrans.rb +0 -46
  196. data/example/rails/simplepay/config/initializers/wrap_parameters.rb +0 -14
  197. data/example/rails/simplepay/config/locales/en.yml +0 -23
  198. data/example/rails/simplepay/config/puma.rb +0 -47
  199. data/example/rails/simplepay/config/routes.rb +0 -5
  200. data/example/rails/simplepay/config/secrets.yml +0 -22
  201. data/example/rails/simplepay/config/spring.rb +0 -6
  202. data/example/rails/simplepay/config/veritrans.yml +0 -18
  203. data/example/rails/simplepay/config.ru +0 -5
  204. data/example/rails/simplepay/db/development.sqlite3 +0 -0
  205. data/example/rails/simplepay/db/migrate/20161221090855_create_orders.rb +0 -10
  206. data/example/rails/simplepay/db/schema.rb +0 -22
  207. data/example/rails/simplepay/db/seeds.rb +0 -7
  208. data/example/rails/simplepay/db/test.sqlite3 +0 -0
  209. data/example/rails/simplepay/lib/assets/.keep +0 -0
  210. data/example/rails/simplepay/lib/tasks/.keep +0 -0
  211. data/example/rails/simplepay/log/.keep +0 -0
  212. data/example/rails/simplepay/public/404.html +0 -67
  213. data/example/rails/simplepay/public/422.html +0 -67
  214. data/example/rails/simplepay/public/500.html +0 -66
  215. data/example/rails/simplepay/public/apple-touch-icon-precomposed.png +0 -0
  216. data/example/rails/simplepay/public/apple-touch-icon.png +0 -0
  217. data/example/rails/simplepay/public/favicon.ico +0 -0
  218. data/example/rails/simplepay/public/robots.txt +0 -5
  219. data/example/rails/simplepay/vendor/assets/javascripts/.keep +0 -0
  220. data/example/rails/simplepay/vendor/assets/stylesheets/.keep +0 -0
  221. data/example/sinatra/config.ru +0 -9
  222. data/example/sinatra/localization.erb +0 -249
  223. data/example/sinatra/points.erb +0 -188
  224. data/example/sinatra/recurring.erb +0 -201
  225. data/example/sinatra/sinatra.rb +0 -194
  226. data/example/sinatra/style.css +0 -137
  227. data/example/sinatra/veritrans.yml +0 -11
  228. data/example/sinatra/widget.erb +0 -63
  229. data/lib/generators/templates/assets/credit_card_form.js +0 -57
  230. data/lib/generators/templates/payments_controller.rb +0 -85
  231. data/lib/generators/templates/veritrans.rb +0 -46
  232. data/lib/generators/templates/veritrans.yml +0 -18
  233. data/lib/generators/templates/views/_credit_card_form.erb +0 -42
  234. data/lib/generators/templates/views/_veritrans_include.erb +0 -10
  235. data/lib/generators/templates/views/payments/create.erb +0 -15
  236. data/lib/generators/templates/views/payments/new.erb +0 -6
  237. data/lib/generators/veritrans/install_generator.rb +0 -32
  238. data/lib/generators/veritrans/payment_form_generator.rb +0 -45
  239. data/lib/veritrans/cli.rb +0 -161
  240. data/lib/veritrans/testing.rb +0 -156
  241. data/spec/cli_spec.rb +0 -83
  242. data/spec/configs/real_key.yml +0 -4
  243. data/spec/configs/veritrans.yml +0 -7
  244. data/spec/configs/veritrans_flat.yml +0 -2
  245. data/spec/configs/veritrans_with_erb.yml +0 -2
  246. data/spec/fixtures/approve_failed.yml +0 -48
  247. data/spec/fixtures/cancel_failed.yml +0 -48
  248. data/spec/fixtures/cancel_success.yml +0 -126
  249. data/spec/fixtures/capture_failed.yml +0 -48
  250. data/spec/fixtures/charge.yml +0 -50
  251. data/spec/fixtures/charge_direct.yml +0 -56
  252. data/spec/fixtures/charge_vtweb.yml +0 -50
  253. data/spec/fixtures/cli_test_1111-not-exists.yml +0 -45
  254. data/spec/fixtures/cli_test_not_exists.yml +0 -45
  255. data/spec/fixtures/cli_test_real_txn.yml +0 -55
  256. data/spec/fixtures/cli_test_unauthorized.yml +0 -47
  257. data/spec/fixtures/deny_failed.yml +0 -144
  258. data/spec/fixtures/events_test_real_txn.yml +0 -55
  259. data/spec/fixtures/expire_failed.yml +0 -50
  260. data/spec/fixtures/expire_success.yml +0 -56
  261. data/spec/fixtures/midtrans_status.yml +0 -117
  262. data/spec/fixtures/refund_failed.yml +0 -54
  263. data/spec/fixtures/status_fail.yml +0 -48
  264. data/spec/fixtures/status_success.yml +0 -128
  265. data/spec/fixtures/test_token.yml +0 -49
  266. data/spec/midtrans_rename_spec.rb +0 -27
  267. data/spec/rails_plugin_spec.rb +0 -317
  268. data/spec/spec_helper.rb +0 -71
  269. data/spec/veritrans_client_spec.rb +0 -235
  270. data/spec/veritrans_config_spec.rb +0 -70
  271. data/spec/veritrans_events_spec.rb +0 -72
  272. data/spec/veritrans_logger_spec.rb +0 -46
  273. data/spec/veritrans_snap_spec.rb +0 -54
  274. data/spec/veritrans_testing_spec.rb +0 -184
  275. data/testing_webhooks.md +0 -78
@@ -0,0 +1,113 @@
1
+ require 'veritrans'
2
+ require 'json'
3
+ require 'sinatra'
4
+
5
+ Midtrans.config.server_key = "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2"
6
+ Midtrans.config.client_key = "SB-Mid-client-ArNfhrh7st9bQKmz"
7
+ Midtrans.config.api_host = "https://api.sandbox.midtrans.com"
8
+
9
+ set :public_folder, File.dirname(__FILE__)
10
+ set :views, File.dirname(__FILE__)
11
+ set :run, $0 == __FILE__
12
+
13
+ def generate_order_id
14
+ "sinatra-example-#{Time.now.to_i}"
15
+ end
16
+
17
+ get "/" do
18
+ erb :index
19
+ end
20
+
21
+ get "/snap" do
22
+ result = Midtrans.create_snap_token(
23
+ transaction_details: {
24
+ order_id: generate_order_id,
25
+ gross_amount: 100000,
26
+ secure: true
27
+ }
28
+ )
29
+ @token = result.token
30
+ erb :snap
31
+ end
32
+
33
+ get "/snap_redirect" do
34
+ result = Midtrans.create_snap_redirect_url(
35
+ transaction_details: {
36
+ order_id: generate_order_id,
37
+ gross_amount: 100000,
38
+ secure: true
39
+ }
40
+ )
41
+ @redirecturl = result.redirect_url
42
+ erb :snap_redirect
43
+ end
44
+
45
+ post "/coreapi_card_charge_ajax_handler" do
46
+ @data = JSON.parse(request.body.read)
47
+ @result = Midtrans.charge(
48
+ payment_type: "credit_card",
49
+ credit_card: {
50
+ token_id: @data['token_id'],
51
+ authentication: @data['authenticate_3ds']
52
+ },
53
+ transaction_details: {
54
+ order_id: generate_order_id,
55
+ gross_amount: 20000
56
+ })
57
+
58
+ if params[:format] == "json"
59
+ content_type :json
60
+ @result.response.body
61
+ else
62
+ erb :response
63
+ end
64
+ end
65
+
66
+ post "/check_transaction_status" do
67
+ @data = JSON.parse(request.body.read)
68
+ transaction_id = @data['transaction_id']
69
+ @result = Midtrans.status(transaction_id)
70
+
71
+ if params[:format] == "json"
72
+ content_type :json
73
+ @result.response.body
74
+ else
75
+ erb :response
76
+ end
77
+ end
78
+
79
+ post "/handle_http_notification" do
80
+ post_body = JSON.parse(request.body.read)
81
+ notification = Midtrans.status(post_body['transaction_id'])
82
+
83
+ order_id = notification.data[:order_id]
84
+ payment_type = notification.data[:payment_type]
85
+ transaction_status = notification.data[:transaction_status]
86
+ fraud_status = notification.data[:fraud_status]
87
+
88
+ puts "Transaction order_id: #{order_id}"
89
+ puts "Payment type: #{payment_type}"
90
+ puts "Transaction status: #{transaction_status}"
91
+ puts "Fraud status: #{fraud_status}"
92
+
93
+ return "Transaction notification received. Order ID: #{order_id}. Transaction status: #{transaction_status}. Fraud status: #{fraud_status}"
94
+
95
+ # Sample transactionStatus handling logic
96
+ if transaction_status == "capture" && fraud_status == "challange"
97
+ # TODO set transaction status on your databaase to 'challenge'
98
+ elsif transaction_status == "capture" && fraud_status == "success"
99
+ # TODO set transaction status on your databaase to 'success'
100
+ elsif transaction_status == "settlement"
101
+ # TODO set transaction status on your databaase to 'success'
102
+ elsif transaction_status == "deny"
103
+ # TODO you can ignore 'deny', because most of the time it allows payment retries
104
+ elsif transaction_status == "cancel" || transaction_status == "expire"
105
+ # TODO set transaction status on your databaase to 'failure'
106
+ elsif transaction_status == "pending"
107
+ # Todo set transaction status on your databaase to 'pending' / waiting payment
108
+ end
109
+
110
+ end
111
+
112
+
113
+
@@ -0,0 +1,4 @@
1
+ How to run snap_example:
2
+
3
+ 1. Install dependencies: `gem install veritrans`
4
+ 2. Run the file: `ruby snap_example.rb`
@@ -0,0 +1,39 @@
1
+ require 'veritrans'
2
+
3
+ # This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.
4
+ # Please refer to this docs for snap popup:
5
+ # https://docs.midtrans.com/en/snap/integration-guide?id=integration-steps-overview
6
+
7
+ # Please refer to this docs for snap-redirect:
8
+ # https://docs.midtrans.com/en/snap/integration-guide?id=alternative-way-to-display-snap-payment-page-via-redirect
9
+
10
+ # Set Midtrans config
11
+ # You can find it in Merchant Portal -> Settings -> Access keys
12
+ Midtrans.config.server_key = "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2"
13
+ Midtrans.config.client_key = "SB-Mid-client-ArNfhrh7st9bQKmz"
14
+ Midtrans.config.api_host = "https://api.sandbox.midtrans.com"
15
+
16
+ # Create snap transaction
17
+ begin
18
+ result = Midtrans.create_snap_token(
19
+ transaction_details: {
20
+ order_id: "snap-example-test-#{Time.now.to_i}",
21
+ gross_amount: 200000
22
+ },
23
+ "credit_card": {
24
+ "secure": true
25
+ }
26
+ )
27
+ puts "Snap result : #{result.data}"
28
+ rescue MidtransError => e
29
+ puts e.message # Basic message error
30
+ puts e.http_status_code # HTTP status code e.g: 400, 401, etc.
31
+ puts e.api_response # API response body in String
32
+ puts e.raw_http_client_data # Raw HTTP client response
33
+ end
34
+
35
+ # result.data this will be Hash representation of the API JSON response, of example:
36
+ # {
37
+ # : token => "008e586b-17f5-459f-8418-2764f08f1d8c",
38
+ # : redirect_url => "https://app.sandbox.midtrans.com/snap/v2/vtweb/008e586b-17f5-459f-8418-2764f08f1d8c"
39
+ # }
data/lib/test/all.rb ADDED
@@ -0,0 +1 @@
1
+ Dir[File.dirname(File.absolute_path(__FILE__)) + '/**/*_test.rb'].each {|file| require file }
@@ -0,0 +1,319 @@
1
+ require 'veritrans'
2
+ require 'minitest/autorun'
3
+
4
+ class TestVeritrans < Minitest::Test
5
+
6
+ def setup
7
+ @mt_test = Veritrans.new(
8
+ server_key: "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2",
9
+ client_key: "SB-Mid-client-ArNfhrh7st9bQKmz",
10
+ api_host: "https://api.sandbox.midtrans.com",
11
+ logger: Logger.new(STDOUT),
12
+ file_logger: Logger.new(STDOUT)
13
+ )
14
+
15
+ @mt_test_invalid_key = Veritrans.new(
16
+ server_key: "invalid server key",
17
+ client_key: "invalid client key",
18
+ api_host: "https://api.sandbox.midtrans.com",
19
+ logger: Logger.new(STDOUT),
20
+ file_logger: Logger.new(STDOUT)
21
+ )
22
+ end
23
+
24
+ def test_get_token_credit_card
25
+ card = {
26
+ card_number: 4811111111111114,
27
+ card_cvv: 123,
28
+ card_exp_month: 12,
29
+ card_exp_year: 2025
30
+ }
31
+ result = @mt_test.test_token(card)
32
+ assert_equal 200, result.status_code
33
+ assert_equal "Credit card token is created as Token ID.", result.status_message
34
+ end
35
+
36
+ def test_charge_credit_card
37
+ card = {
38
+ card_number: 5211111111111117,
39
+ card_cvv: 123,
40
+ card_exp_month: 12,
41
+ card_exp_year: 2025
42
+ }
43
+ get_token = @mt_test.test_token(card)
44
+ result = @mt_test.charge(
45
+ {
46
+ "payment_type": "credit_card",
47
+ "transaction_details": {
48
+ "gross_amount": 10000,
49
+ "order_id": "ruby-lib-test-creditcard-#{Time.now.to_i}"
50
+ },
51
+ "credit_card": {
52
+ "token_id": "#{get_token.token_id}"
53
+ }
54
+ }
55
+ )
56
+ assert_equal "Success, Credit Card transaction is successful", result.status_message
57
+ assert_equal 200, result.status_code
58
+ assert_equal "Approved", result.channel_response_message
59
+ end
60
+
61
+ def test_charge_bca_va
62
+ result = @mt_test.charge(
63
+ {
64
+ "payment_type": "bank_transfer",
65
+ "transaction_details": {
66
+ "gross_amount": 10000,
67
+ "order_id": "ruby-lib-test-bcava#{Time.now.to_i}"
68
+ },
69
+ "bank_transfer": {
70
+ "bank": "bca",
71
+ "va_number": "1234567891"
72
+ }
73
+ }
74
+ )
75
+ assert_equal 201, result.status_code
76
+ assert_equal "Success, Bank Transfer transaction is created", result.status_message
77
+ end
78
+
79
+ def test_charge_bni_va
80
+ result = @mt_test.charge(
81
+ {
82
+ "payment_type": "bank_transfer",
83
+ "transaction_details": {
84
+ "gross_amount": 10000,
85
+ "order_id": "ruby-lib-test-bniva-#{Time.now.to_i}"
86
+ },
87
+ "bank_transfer": {
88
+ "bank": "bni",
89
+ "va_number": "1234567891"
90
+ }
91
+ }
92
+ )
93
+ assert_equal 201, result.status_code
94
+ assert_equal "Success, Bank Transfer transaction is created", result.status_message
95
+ end
96
+
97
+ def test_point_inquiry
98
+ card = {
99
+ card_number: 4617006959746656,
100
+ card_cvv: 123,
101
+ card_exp_month: 12,
102
+ card_exp_year: 2026
103
+ }
104
+ result = @mt_test.test_token(card)
105
+ card_point_response = @mt_test.point_inquiry(result.token_id)
106
+ assert_equal 200, card_point_response.status_code
107
+ end
108
+
109
+ def test_charge_cimb_clicks
110
+ result = @mt_test.charge(
111
+ {
112
+ "payment_type": "cimb_clicks",
113
+ "transaction_details": {
114
+ "order_id": "ruby-lib-test-cimbclicks-#{Time.now.to_i}",
115
+ "gross_amount": 44000
116
+ },
117
+ "cimb_clicks": {
118
+ "description": "Purchase of a Food Delivery"
119
+ }
120
+ }
121
+ )
122
+ assert_equal 201, result.status_code
123
+ assert_equal "Success, CIMB Clicks transaction is successful", result.status_message
124
+ end
125
+
126
+ def test_charge_epay_bri
127
+ result = @mt_test.charge(
128
+ {
129
+ "payment_type": "bri_epay",
130
+ "transaction_details": {
131
+ "order_id": "ruby-lib-test-epaybri-#{Time.now.to_i}",
132
+ "gross_amount": 44000
133
+ }
134
+ }
135
+ )
136
+ assert_equal 201, result.status_code
137
+ assert_equal "Success, BRI E-Pay transaction is successful", result.status_message
138
+ assert_equal "pending", result.transaction_status
139
+ end
140
+
141
+ def test_charge_mandiri_bill
142
+ result = @mt_test.charge(
143
+ "payment_type": "echannel",
144
+ "transaction_details": {
145
+ "order_id": "ruby-lib-test-mandiribill-#{Time.now.to_i}",
146
+ "gross_amount": 44000
147
+ },
148
+ "echannel": {
149
+ "bill_info1": "Payment for:",
150
+ "bill_info2": "Item descriptions"
151
+ }
152
+ )
153
+ assert_equal 201, result.status_code
154
+ assert_equal "OK, Mandiri Bill transaction is successful", result.status_message
155
+ assert_equal "pending", result.transaction_status
156
+ end
157
+
158
+ def test_charge_indomaret
159
+ result = @mt_test.charge(
160
+ "payment_type": "cstore",
161
+ "transaction_details": {
162
+ "order_id": "ruby-lib-test-indomaret-#{Time.now.to_i}",
163
+ "gross_amount": 44000
164
+ },
165
+ "cstore": {
166
+ "store": "Indomaret",
167
+ "message": "Message to display"
168
+ }
169
+ )
170
+ assert_equal 201, result.status_code
171
+ assert_equal "Success, cstore transaction is successful", result.status_message
172
+ assert_equal "indomaret", result.store
173
+ end
174
+
175
+ def test_charge_alfamart
176
+ result = @mt_test.charge(
177
+ "payment_type": "cstore",
178
+ "transaction_details": {
179
+ "order_id": "ruby-lib-test-alfamart-#{Time.now.to_i}",
180
+ "gross_amount": 44000
181
+ },
182
+ "cstore": {
183
+ "store": "alfamart",
184
+ "alfamart_free_text_1": "1st row of receipt",
185
+ "alfamart_free_text_2": "2nd row",
186
+ "alfamart_free_text_3": "3rd row"
187
+ }
188
+ )
189
+ assert_equal 201, result.status_code
190
+ assert_equal "Success, cstore transaction is successful", result.status_message
191
+ assert_equal "alfamart", result.store
192
+ end
193
+
194
+ def test_charge_gopay
195
+ result = @mt_test.charge(
196
+ "payment_type": "gopay",
197
+ "transaction_details": {
198
+ "order_id": "ruby-lib-test-gopay-#{Time.now.to_i}",
199
+ "gross_amount": 44000
200
+ },
201
+ "gopay": {
202
+ "enable_callback": "true",
203
+ "callback_url": "someapps://callback"
204
+ }
205
+ )
206
+ assert_equal 201, result.status_code
207
+ assert_equal "GoPay transaction is created", result.status_message
208
+ assert_equal "pending", result.transaction_status
209
+ end
210
+
211
+ def test_charge_bcaklikpay
212
+ result = @mt_test.charge(
213
+ "payment_type": "bca_klikpay",
214
+ "transaction_details": {
215
+ "order_id": "ruby-lib-test-bcaklikpay-#{Time.now.to_i}",
216
+ "gross_amount": 44000
217
+ },
218
+ "bca_klikpay": {
219
+ "type": "1",
220
+ "description": "pembelian produk"
221
+ }
222
+ )
223
+ assert_equal 201, result.status_code
224
+ assert_equal "OK, BCA KlikPay transaction is successful", result.status_message
225
+ assert_equal "pending", result.transaction_status
226
+ end
227
+
228
+ def test_charge_akulaku
229
+ result = @mt_test.charge(
230
+ "payment_type": "akulaku",
231
+ "transaction_details": {
232
+ "order_id": "ruby-lib-test-#{Time.now.to_i}",
233
+ "gross_amount": 44000
234
+ }
235
+ )
236
+ assert_equal 201, result.status_code
237
+ assert_equal "Success, Akulaku transaction is created", result.status_message
238
+ assert_equal "pending", result.transaction_status
239
+ end
240
+
241
+ def test_charge_danamon_online
242
+ result = @mt_test.charge(
243
+ "payment_type": "danamon_online",
244
+ "transaction_details": {
245
+ "order_id": "ruby-lib-test-#{Time.now.to_i}",
246
+ "gross_amount": 44000
247
+ }
248
+ )
249
+ assert_equal "Success, Danamon Online transaction is successful", result.status_message
250
+ assert_equal 201, result.status_code
251
+ assert_equal "pending", result.transaction_status
252
+ end
253
+
254
+ def test_create_widget_token
255
+ result = @mt_test.create_widget_token(
256
+ transaction_details: {
257
+ order_id: "ruby-lib-test-#{Time.now.to_i}",
258
+ gross_amount: 200000
259
+ },
260
+ "credit_card": {
261
+ "secure": true
262
+ }
263
+ )
264
+ assert_equal 201, result.status_code
265
+ end
266
+
267
+ def test_fail_charge_invalid_key
268
+ @mt_test_invalid_key = Veritrans.new(
269
+ server_key: "invalid server key",
270
+ client_key: "invalid client key",
271
+ api_host: "https://api.sandbox.midtrans.com",
272
+ logger: Logger.new(STDOUT),
273
+ file_logger: Logger.new(STDOUT)
274
+ )
275
+
276
+ begin
277
+ @mt_test_invalid_key.charge(
278
+ {
279
+ "payment_type": "bank_transfer",
280
+ "transaction_details": {
281
+ "gross_amount": 10000,
282
+ "order_id": "ruby-lib-test-bcava-#{Time.now.to_i}"
283
+ },
284
+ "bank_transfer": {
285
+ "bank": "bca",
286
+ "va_number": "1234567891"
287
+ }
288
+ }
289
+ )
290
+ rescue MidtransError => e
291
+ assert_equal "401", e.status
292
+ assert_match "Transaction cannot be authorized with the current client/server key.", e.data
293
+ end
294
+ end
295
+
296
+ def test_fail_get_token
297
+ @mt_test_invalid_key = Veritrans.new(
298
+ server_key: "invalid server key",
299
+ client_key: "invalid client key",
300
+ api_host: "https://api.sandbox.midtrans.com",
301
+ logger: Logger.new(STDOUT),
302
+ file_logger: Logger.new(STDOUT)
303
+ )
304
+
305
+ card = {
306
+ card_number: 4617006959746656,
307
+ card_cvv: 123,
308
+ card_exp_month: 12,
309
+ card_exp_year: 2026
310
+ }
311
+ begin
312
+ @mt_test_invalid_key.test_token(card)
313
+ rescue MidtransError => e
314
+ assert_equal "401", e.status
315
+ assert_match "Transaction cannot be authorized with the current client/server key.", e.data
316
+ end
317
+ end
318
+
319
+ end
@@ -0,0 +1,26 @@
1
+ require 'veritrans'
2
+ require 'minitest/autorun'
3
+
4
+ class TestVeritrans < Minitest::Test
5
+ def setup
6
+ @mt_test = Veritrans.new(
7
+ server_key: "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2",
8
+ client_key: "SB-Mid-client-ArNfhrh7st9bQKmz",
9
+ api_host: "https://api.sandbox.midtrans.com",
10
+ logger: Logger.new(STDOUT),
11
+ file_logger: Logger.new(STDOUT)
12
+ )
13
+ end
14
+
15
+ def test_api_host
16
+ assert_equal "https://api.sandbox.midtrans.com", Veritrans.config.api_host
17
+ end
18
+
19
+ def test_client_key_server_key
20
+ Veritrans.config.client_key = "kk-1"
21
+ Veritrans.config.server_key = "sk-1"
22
+
23
+ assert_equal "kk-1", Veritrans.config.client_key
24
+ assert_equal "sk-1", Veritrans.config.server_key
25
+ end
26
+ end
@@ -0,0 +1,80 @@
1
+ require 'veritrans'
2
+ require 'minitest/autorun'
3
+
4
+ class TestVeritrans < Minitest::Test
5
+ i_suck_and_my_tests_are_order_dependent!
6
+
7
+ def setup
8
+ @mt_test = Veritrans.new(
9
+ server_key: "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2",
10
+ client_key: "SB-Mid-client-ArNfhrh7st9bQKmz",
11
+ api_host: "https://api.sandbox.midtrans.com",
12
+ logger: Logger.new(STDOUT),
13
+ file_logger: Logger.new(STDOUT)
14
+ )
15
+ end
16
+
17
+ def test_link_payment_account
18
+ p 1
19
+ param = {
20
+ "payment_type": "gopay",
21
+ "gopay_partner": {
22
+ "phone_number": "81987654321",
23
+ "country_code": "62",
24
+ "redirect_url": "https://www.gojek.com"
25
+ }
26
+ }
27
+ result = @mt_test.link_payment_account(param)
28
+ assert_equal 201, result.status_code
29
+ assert_equal "PENDING", result.account_status
30
+ $test_gopay_id = result.account_id
31
+ end
32
+
33
+ def test_get_payment_account
34
+ p 2
35
+ param = {
36
+ "payment_type": "gopay",
37
+ "gopay_partner": {
38
+ "phone_number": "81987654321",
39
+ "country_code": "62",
40
+ "redirect_url": "https://www.gojek.com"
41
+ }
42
+ }
43
+ charge = @mt_test.link_payment_account(param)
44
+ result = @mt_test.get_payment_account(charge.account_id)
45
+ assert_equal 201, result.status_code
46
+ assert_equal "PENDING", result.account_status
47
+ end
48
+
49
+ def test_unlink_payment_account
50
+ #expected the API call will fail because of not click activation from link_payment_account
51
+ p 3
52
+ begin
53
+ @mt_test.unlink_payment_account($test_gopay_id)
54
+ rescue MidtransError => e
55
+ assert_equal "412", e.status
56
+ assert_match "Account status cannot be updated.", e.data
57
+ end
58
+ end
59
+
60
+ def test_get_payment_acc_dummy
61
+ p 4
62
+ begin
63
+ @mt_test.get_payment_account("dummy")
64
+ rescue MidtransError => e
65
+ assert_equal "404", e.status
66
+ assert_match "Account doesn't exist.", e.data
67
+ end
68
+ end
69
+
70
+ def test_unlink_dummy_account
71
+ p 5
72
+ begin
73
+ @mt_test.unlink_payment_account("dummy")
74
+ rescue MidtransError => e
75
+ assert_equal "404", e.status
76
+ assert_match "Account doesn't exist.", e.data
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,79 @@
1
+ require 'veritrans'
2
+ require 'minitest/autorun'
3
+
4
+ class TestVeritrans < Minitest::Test
5
+
6
+ def setup
7
+ @mt_test = Veritrans.new(
8
+ server_key: "SB-Mid-server-uQmMImQMeo0Ky3Svl90QTUj2",
9
+ client_key: "SB-Mid-client-ArNfhrh7st9bQKmz",
10
+ api_host: "https://api.sandbox.midtrans.com",
11
+ logger: Logger.new(STDOUT),
12
+ file_logger: Logger.new(STDOUT)
13
+ )
14
+ end
15
+
16
+ def test_create_widget_token
17
+ result = @mt_test.create_widget_token(
18
+ transaction_details: {
19
+ order_id: "ruby-lib-test-#{Time.now.to_i}",
20
+ gross_amount: 200000
21
+ },
22
+ "credit_card": {
23
+ "secure": true
24
+ }
25
+ )
26
+ assert_equal 201, result.status_code
27
+ end
28
+
29
+ def test_create_snap_token_string
30
+ result = @mt_test.create_snap_token_string(
31
+ transaction_details: {
32
+ order_id: "ruby-lib-test-snap-#{Time.now.to_i}",
33
+ gross_amount: 200000
34
+ },
35
+ "credit_card": {
36
+ "secure": true
37
+ }
38
+ )
39
+ assert result != nil
40
+ end
41
+
42
+ def test_snap_redirect_url_str
43
+ result = @mt_test.create_snap_redirect_url_str(
44
+ transaction_details: {
45
+ order_id: "ruby-lib-test-snap#{Time.now.to_i}",
46
+ gross_amount: 200000
47
+ },
48
+ "credit_card": {
49
+ "secure": true
50
+ }
51
+ )
52
+ assert_match "https://", result
53
+ end
54
+
55
+ def test_snap_invalid_serverkey
56
+ @mt_test_invalid_key = Veritrans.new(
57
+ server_key: "invalid server key",
58
+ client_key: "invalid client key",
59
+ api_host: "https://api.sandbox.midtrans.com",
60
+ logger: Logger.new(STDOUT),
61
+ file_logger: Logger.new(STDOUT)
62
+ )
63
+ begin
64
+ @mt_test_invalid_key.create_widget_token(
65
+ transaction_details: {
66
+ order_id: "ruby-lib-test-#{Time.now.to_i}",
67
+ gross_amount: 200000
68
+ },
69
+ "credit_card": {
70
+ "secure": true
71
+ }
72
+ )
73
+ rescue MidtransError => e
74
+ assert_equal "401", e.status
75
+ assert_match "please check client or server key", e.data
76
+ end
77
+ end
78
+
79
+ end