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
@@ -1,188 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <title>veritrans-ruby demo</title>
5
- <link rel="icon" type="image/x-icon" href="https://account.midtrans.com/favicon.ico" />
6
- <link rel="stylesheet" href="/style.css">
7
- </head>
8
- <body>
9
-
10
- <header>
11
- <h3>
12
- <a href="/">Midtrans sinatra app</a>
13
- </h3>
14
- <a href="https://github.com/veritrans/veritrans-ruby" class="github">Source Code</a>
15
- </header>
16
-
17
- <section>
18
- <h4>VT-Direct Points</h4>
19
-
20
- <form action="/charge_vtdirect" method="post" id="card_form">
21
- <input type="hidden" name="format" value="json">
22
- <input type="hidden" name="token_id" id="card_token">
23
- <fieldset>
24
- <legend>Credit Card Points</legend>
25
- <p>
26
- <label>Language</label>
27
- <select name="locale" id="locale">
28
- <option value="id" selected>Indonesian</option>
29
- <option value="en">English</option>
30
- </select>
31
- </p>
32
- <p>
33
- <label for="gross_amount">Amount, Rp.</label>
34
- <input type="text" name="gross_amount" id="gross_amount" value="30000">
35
- </p>
36
- <p>
37
- <label for="gross_amount">Points, Rp.</label>
38
- <input type="text" name="points_amount" id="points_amount" value="10000">
39
- </p>
40
- <p>
41
- <label for="card_number">Card Number</label>
42
- <input type="text" id="card_number" style="width: 150px" value="4802 0000 0000 0002">
43
- <br>
44
- <small style="margin-left: 100px" class="card-numbers">
45
- <a onclick="$('#card_number').val('4802 0000 0000 0002')">Success</a>
46
- <a onclick="$('#card_number').val('4902 0000 0000 0001')">Deny</a>
47
- <a href="https://api-docs.midtrans.com/#card-features-installment" target="_blank">documentation</a>
48
- </small>
49
- </p>
50
- <p>
51
- <label for="card_exp">Expiry Date</label>
52
- <input type="text" id="card_exp" placeholder="MM / YY" value="12 / 18">
53
- </p>
54
- <p>
55
- <label for="card_cvc">Card CVV</label>
56
- <input type="text" id="card_cvc" style="width: 35px" placeholder="cvc" value="123">
57
- </p>
58
-
59
- <p>
60
- <label for="card_secure">3D-Secure</label>
61
- <input type="checkbox" id="card_secure">
62
- </p>
63
-
64
- </fieldset>
65
-
66
- <input id="points_btn" type="submit" value="Check Points">
67
- <input id="submit_btn" type="submit" value="Charge">
68
- </form>
69
- </section>
70
-
71
- <script src="https://api.sandbox.midtrans.com/v2/assets/veritrans.js"></script>
72
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
73
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.payment/1.0.2/jquery.payment.js"></script>
74
- <script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/jquery.magnific-popup.min.js"></script>
75
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.css">
76
-
77
- <script type="text/javascript">
78
- // set Veritrans settings
79
- Veritrans.url = "<%= Veritrans.config.api_host %>/v2/token";
80
- Veritrans.client_key = "<%= Veritrans.config.client_key %>";
81
-
82
- function createTokenData() {
83
- var date = $('#card_exp').val();
84
- return {
85
- // Optional params:
86
- // secure: true
87
- // bank: 'MANDIRI'
88
-
89
- card_number: $('#card_number').val(),
90
- card_cvv: $('#card_cvc').val(),
91
- card_exp_month: date && date.match(/(\d+) \//)[1],
92
- card_exp_year: date ? '20' + date.match(/\/ (\d+)/)[1] : date,
93
- gross_amount: $('#gross_amount').val()
94
- };
95
- }
96
-
97
- function submitForm(callback) {
98
- var form = $('#card_form');
99
- $.ajax({
100
- url: form.attr('action'),
101
- method: 'POST',
102
- data: form.serialize(),
103
- success: function (data, status, xhr) {
104
- $.magnificPopup.open({
105
- items: {
106
- src: '<div class="white-popup">' +
107
- '<h1>Successful!</h1>' +
108
- '<code><pre>' + JSON.stringify(data, null, 2) + '</code></pre>' +
109
- '</div>',
110
- type: 'inline'
111
- }
112
- });
113
- callback();
114
- }
115
- });
116
- };
117
-
118
- $(document).ready(function () {
119
- $('#card_number').payment('formatCardNumber');
120
- $('#card_cvc').payment('formatCardCVC');
121
- $('#card_exp').payment('formatCardExpiry');
122
-
123
- $('#points_btn').on('click', function (e) {
124
- e.preventDefault();
125
- e.stopPropagation();
126
- $('#points_btn').attr('disabled', true);
127
- Veritrans.token(createTokenData, function (data) {
128
- if (data.token_id) {
129
- $.ajax({
130
- url: "/check_points/" + data.token_id,
131
- method: 'GET',
132
- success: function (data, status, xhr) {
133
- $('#points_btn').removeAttr('disabled');
134
- $.magnificPopup.open({
135
- items: {
136
- src: '<div class="white-popup">' +
137
- '<h1>Successful!</h1>' +
138
- '<code><pre>' + JSON.stringify(data, null, 2) + '</code></pre>' +
139
- '</div>',
140
- type: 'inline'
141
- }
142
- });
143
- }
144
- });
145
- } else {
146
- $('#points_btn').removeAttr('disabled');
147
- alert(data.validation_messages ? data.validation_messages.join("\n") : data.status_message);
148
- }
149
- console.log(data);
150
- });
151
- });
152
-
153
- $('#card_form').on('submit', function (event) {
154
- var form = this;
155
- $('#submit_btn').attr('disabled', true).val("Processing ...");
156
- event.preventDefault();
157
-
158
- Veritrans.token(createTokenData, function (data) {
159
- console.log('Token data:', data);
160
- // if we get url then it's 3d-secure transaction
161
- // so we need to open that page
162
- // this callback function will be called again after user confirm 3d-secure
163
- // you can also redirect on server side
164
- if (data.redirect_url) {
165
- $.magnificPopup.open({
166
- items: { type: 'iframe', src: data.redirect_url }
167
- });
168
- $.magnificPopup.instance.content.find('iframe').height(590);
169
- // if no redirect_url and we have token_id then just make charge request
170
- } else if (data.token_id) {
171
- $('#card_token').val(data.token_id);
172
- $.magnificPopup.close();
173
- submitForm(function () {
174
- $('#submit_btn').removeAttr('disabled').removeAttr("value");
175
- });
176
- //form.submit();
177
- // if no redirect_url and no token_id, then it should be error
178
- } else {
179
- $('#submit_btn').removeAttr('disabled').removeAttr("value");
180
- alert(data.validation_messages ? data.validation_messages.join("\n") : data.status_message);
181
- }
182
- });
183
- });
184
- });
185
- </script>
186
-
187
- </body>
188
- </html>
@@ -1,201 +0,0 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <title>veritrans-ruby demo</title>
5
- <link rel="icon" type="image/x-icon" href="https://account.midtrans.com/favicon.ico" />
6
- <link rel="stylesheet" href="/style.css">
7
- </head>
8
- <body>
9
-
10
- <header>
11
- <h3>
12
- <a href="/">Midtrans sinatra app</a>
13
- </h3>
14
- <a href="https://github.com/veritrans/veritrans-ruby" class="github">Source Code</a>
15
- </header>
16
-
17
- <section class="recurring-page">
18
- <h4>Recurring / One Click</h4>
19
-
20
- <section class="cards">
21
- Saved cards:
22
- <ul>
23
-
24
- </ul>
25
- </section>
26
-
27
- <form id="add_card_form">
28
- <input type="hidden" name="token_id" id="card_token">
29
- <fieldset>
30
- <legend>Credit Card Recurring</legend>
31
- <p>
32
- <label for="card_number">Card number</label>
33
- <input type="text" id="card_number" style="width: 150px" value="4811 1111 1111 1114">
34
- <br>
35
- <small style="margin-left: 100px" class="card-numbers">
36
- <a onclick="$('#card_number').val('4811 1111 1111 1114')">success Visa 1</a>
37
- <a onclick="$('#card_number').val('4411 1111 1111 1118')">success Visa 2</a>
38
- <a onclick="$('#card_number').val('5810 1111 1111 1112')">success MasterCard 1</a>
39
- <a onclick="$('#card_number').val('5410 1111 1111 1116')">success MasterCard 2</a>
40
- <a href="https://docs.midtrans.com/en/reference/test.html" target="_blank">documentation</a>
41
- </small>
42
- </p>
43
-
44
- <p>
45
- <label for="card_cvc">Security Code</label>
46
- <input type="text" id="card_cvc" style="width: 30px" placeholder="cvc" value="123">
47
- </p>
48
-
49
- <p>
50
- <label for="card_exp">Expiration date</label>
51
- <input type="text" id="card_exp" placeholder="MM / YY" value="12 / 18">
52
- </p>
53
-
54
- </fieldset>
55
-
56
- <input id="add_card_btn" type="submit" value="Add Card">
57
- </form>
58
-
59
- <script src="https://api.sandbox.midtrans.com/v2/assets/veritrans.js"></script>
60
- <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
61
- <script src="//cdnjs.cloudflare.com/ajax/libs/jquery.payment/1.0.2/jquery.payment.js"></script>
62
- <script src="//cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.0.1/jquery.magnific-popup.js"></script>
63
- <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/0.9.9/magnific-popup.css">
64
-
65
- <script type="text/javascript">
66
- Veritrans.client_key = "<%= Veritrans.config.client_key %>";
67
-
68
- // Here is a difference, for
69
- Veritrans.url = "<%= Veritrans.config.api_host %>/v2/card/register";
70
-
71
-
72
- function createTokenData() {
73
- return {
74
- card_number: $('#card_number').val().replace(/\s/g, ''),
75
- card_cvv: $('#card_cvc').val(),
76
- card_exp_month: $('#card_exp').val().match(/(\d+) \//)[1],
77
- card_exp_year: '20' + $('#card_exp').val().match(/\/ (\d+)/)[1]
78
- };
79
- }
80
-
81
- $(document).ready(function () {
82
- $('#card_number').payment('formatCardNumber');
83
- $('#card_cvc').payment('formatCardCVC');
84
- $('#card_exp').payment('formatCardExpiry');
85
-
86
- renderCards();
87
-
88
- $('#add_card_form').on('submit', function (event) {
89
- var form = this;
90
- $('#submit_btn').attr('disabled', true).val("Processing ...");
91
- event.preventDefault();
92
-
93
- Veritrans.token(createTokenData, function (data) {
94
- console.log('Token data:', data);
95
- // if we get url then it's 3d-secure transaction
96
- // so we need to open that page
97
- // this callback function will be called again after user confirm 3d-secure
98
- // you can also redirect on server side
99
- if (data.redirect_url) {
100
- $.magnificPopup.open({
101
- items: { type: 'iframe', src: data.redirect_url }
102
- });
103
- $.magnificPopup.instance.content.find('iframe').height(590);
104
- // if no redirect_url and we have token_id then just make charge request
105
- } else if (data.saved_token_id) {
106
- $('#card_token').val(data.saved_token_id);
107
- //form.submit();
108
- $.magnificPopup.close();
109
- saveCard(data, createTokenData());
110
- renderCards();
111
- // if no redirect_url and no token_id, then it should be error
112
- } else {
113
- alert(data.validation_messages ? data.validation_messages.join("\n") : data.status_message);
114
- $('#submit_btn').removeAttr('disabled').removeAttr("value");
115
- }
116
- });
117
- });
118
- });
119
-
120
- function loadCards () {
121
- return localStorage.recurring ? JSON.parse(localStorage.recurring) : [];
122
- }
123
-
124
- function saveCard (tokenInfo, cardInfo) {
125
- var data = loadCards();
126
-
127
- var row = {
128
- token_id: tokenInfo.saved_token_id,
129
- card_number: tokenInfo.masked_card,
130
- card_expiry: cardInfo.card_exp_month + " / " + cardInfo.card_exp_year
131
- };
132
- data.push(row);
133
-
134
- localStorage.recurring = JSON.stringify(data);
135
- }
136
-
137
- function renderCards () {
138
- var cards = loadCards();
139
-
140
- var container = $('section.cards ul');
141
- container.empty();
142
- cards.forEach(function (card) {
143
- var el = $('<li>').html(
144
- "Card Number: <code>" + card.card_number + "</code> " +
145
- "Expiry: <i>" + card.card_expiry + "</i> "
146
- );
147
- el.attr('data-id', card.id);
148
- el.attr('token-id', card.token_id);
149
- $('<a>').text('Charge card').bind('click', chargeSavedCard).attr('href', '#').appendTo(el);
150
- $('<a>').text('Remove').bind('click', removeSavedCard).attr('href', '#').appendTo(el);
151
- $('<small>').text('Token ' + card.token_id).appendTo(el);
152
- el.appendTo(container);
153
- })
154
- }
155
-
156
- function chargeSavedCard (e) {
157
- e.preventDefault();
158
- var token = $(e.target).closest('li').attr('token-id');
159
- var amount = prompt("Please enter amount (Rp.)", 15000);
160
-
161
- if (amount === "" || amount === null || parseInt(amount, 10) <= 0) {
162
- console.log("Canceled");
163
- return;
164
- }
165
-
166
- // Create iFrame and submit form in it
167
- var html = '<form action="' + window.location.protocol + '//' + window.location.host + '/charge_vtdirect" method="post">' +
168
- '<input type=hidden name=recurring value=1>' +
169
- '<input type=hidden name=token_id value="' + token + '">' +
170
- '<input type=hidden name=gross_amount value="' + parseInt(amount, 10) + '">' +
171
- '<input type=submit style="display: none">' +
172
- '</form>' + "<script>console.log(document.forms[0]); document.forms[0].submit()<\/script>";
173
-
174
- var content = 'data:text/html;charset=utf-8,' + encodeURI(html);
175
- $.magnificPopup.open({
176
- items: { type: 'iframe', src: content}
177
- });
178
- }
179
-
180
- function removeSavedCard (e) {
181
- e.preventDefault();
182
- var tokenId = $(e.target).closest('li').attr('token-id');
183
- var cards = loadCards();
184
-
185
- cards.forEach(function (card, index) {
186
- if (card.token_id == tokenId) {
187
- if (confirm("Remove card " + card.card_number + "?")) {
188
- cards.splice(index, 1);
189
- console.log(cards);
190
- }
191
- }
192
- });
193
-
194
- localStorage.recurring = JSON.stringify(cards);
195
- renderCards();
196
- }
197
-
198
- </script>
199
-
200
- </body>
201
- </html>
@@ -1,194 +0,0 @@
1
- $:.push(File.expand_path("../../lib", __FILE__))
2
-
3
- require 'json'
4
-
5
- require 'veritrans'
6
- require 'sinatra'
7
-
8
- begin
9
- require 'tilt/erubis'
10
- rescue LoadError => error
11
- puts "Warning: Can not load 'tilt', continue"
12
- end
13
-
14
- Veritrans.setup do
15
- config.load_yml File.dirname(__FILE__) + "/veritrans.yml#development"
16
-
17
- # config.server_key = "..."
18
- # config.client_key = "..."
19
- # config.api_host = "https://api.sandbox.midtrans.com" (default)
20
- end
21
-
22
- # Veritrans.config.server_key
23
- # Veritrans.config.client_key
24
- # Veritrans.config.api_host
25
-
26
- set :public_folder, File.dirname(__FILE__)
27
- set :views, File.dirname(__FILE__)
28
-
29
- set :run, $0 == __FILE__
30
-
31
- def generate_order_id
32
- "testing-#{rand.round(4)}-#{Time.now.to_i}"
33
- end
34
-
35
- get "/" do
36
- erb :index
37
- end
38
-
39
- get "/recurring" do
40
- erb :recurring
41
- end
42
-
43
- get "/localization" do
44
- erb :localization
45
- end
46
-
47
- get "/points" do
48
- erb :points
49
- end
50
-
51
- get "/widget" do
52
- response = Veritrans.create_widget_token(
53
- transaction_details: {
54
- order_id: generate_order_id,
55
- gross_amount: 30_000
56
- }
57
- )
58
-
59
- @token = response.token_id
60
- erb :widget
61
- end
62
-
63
- get "/widget/confirm/:transaction_id" do
64
- @result = Veritrans.status(params[:transaction_id])
65
- erb :response
66
- end
67
-
68
- post "/charge_vtdirect" do
69
- @charge_params = {
70
- payment_type: "credit_card",
71
- credit_card: {
72
- token_id: params[:token_id]
73
- },
74
- transaction_details: {
75
- order_id: generate_order_id,
76
- gross_amount: params[:gross_amount].to_f,
77
- }
78
- }
79
-
80
- if params[:recurring] == "1"
81
- @charge_params[:credit_card][:recurring] = true
82
- end
83
-
84
- if params[:points_amount]
85
- @charge_params[:credit_card][:point_redeem_amount] = params[:points_amount]
86
- @charge_params[:credit_card][:bank] = "bni"
87
- end
88
-
89
- @result = Veritrans.charge(@charge_params)
90
-
91
- if params[:format] == "json"
92
- content_type :json
93
- @result.response.body
94
- else
95
- erb :response
96
- end
97
- end
98
-
99
- get "/charge_vtweb" do
100
- vtweb_options = {}
101
-
102
- if params[:enabled_payments] && params[:enabled_payments].size > 0
103
- vtweb_options[:enabled_payments] = params[:enabled_payments]
104
- end
105
-
106
- if params[:credit_card_3d_secure] && params[:credit_card_3d_secure] != ""
107
- vtweb_options[:credit_card_3d_secure] = params[:credit_card_3d_secure] == "true"
108
- end
109
-
110
- if params[:bin_promo] && params[:bin_promo] != ""
111
- vtweb_options[:credit_card_bins] = params[:bin_promo]
112
- end
113
-
114
- if params[:installment]
115
- vtweb_options[:payment_options] = {
116
- installment: {
117
- required: true,
118
- installment_terms: {}
119
- }
120
- }
121
-
122
- if params[:installment]['bni']
123
- vtweb_options[:payment_options][:installment][:installment_terms][:bni] = [3, 6, 12]
124
- end
125
-
126
- if params[:installment][:mandiri]
127
- vtweb_options[:payment_options][:installment][:installment_terms][:mandiri] = [3, 6, 12]
128
- end
129
-
130
- if params[:installment]['bca']
131
- vtweb_options[:payment_options][:installment][:installment_terms][:bca] = [3, 6, 12]
132
- end
133
- end
134
-
135
- if request.env["HTTP_REFERER"]
136
- vtweb_options[:finish_redirect_url] = request.env["HTTP_REFERER"]
137
- vtweb_options[:unfinish_redirect_url] = request.env["HTTP_REFERER"]
138
- vtweb_options[:error_redirect_url] = request.env["HTTP_REFERER"]
139
- end
140
-
141
- @cahrge_params = {
142
- payment_type: "VTWEB",
143
- vtweb: vtweb_options,
144
- transaction_details: {
145
- order_id: generate_order_id,
146
- gross_amount: 100_000
147
- },
148
- item_details: [
149
- name: "Mountain Apple",
150
- price: 2_000,
151
- quantity: 50
152
- ]
153
- }
154
-
155
- @result = Veritrans.charge(@cahrge_params)
156
-
157
- if @result.redirect_url
158
- if params[:locale].to_s != ""
159
- @vtweb_url = "#{@result.redirect_url}?locale=#{params[:locale]}"
160
- else
161
- @vtweb_url = @result.redirect_url
162
- end
163
- end
164
-
165
- erb :response
166
- end
167
-
168
- get "/check_points/:token_id" do
169
- @result = Veritrans.inquiry_points(params[:token_id])
170
- content_type :json
171
- @result.response.body
172
- end
173
-
174
- post "/webhook" do
175
- post_body = request.body.read
176
- request_data = Veritrans.decode_notification_json(post_body)
177
-
178
- #puts "Recieved #{post_body.size} bytes"
179
- #p request_data
180
-
181
- verified_data = Veritrans.status(request_data['transaction_id'])
182
-
183
- if verified_data.status_code != 404
184
- puts "--- Transaction callback ---"
185
- puts "Payment: #{verified_data.data[:order_id]}"
186
- puts "Payment type: #{verified_data.data[:payment_type]}"
187
- puts "Payment status: #{verified_data.data[:transaction_status]}"
188
- puts "Fraud status: #{verified_data.data[:fraud_status]}" if verified_data.data[:fraud_status]
189
- puts "Payment amount: #{verified_data.data[:gross_amount]}"
190
- puts "--- Transaction callback ---"
191
- end
192
-
193
- return "ok"
194
- end