ng-easycommerce-v18 0.3.23-beta.2 → 0.4.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/README.md +126 -111
  2. package/assets/decidirFormEc.html +514 -514
  3. package/assets/ec-i18n/ct.json +286 -282
  4. package/assets/ec-i18n/en.json +12 -1
  5. package/assets/ec-i18n/es.json +445 -434
  6. package/assets/ec-i18n/fr.json +4 -0
  7. package/assets/ec-i18n/gl.json +286 -282
  8. package/assets/ec-i18n/pr.json +286 -282
  9. package/assets/images/cards-occasional.svg +21 -21
  10. package/assets/recaptcha/recaptcha-site-keys.json +3 -3
  11. package/assets/recaptcha/recaptcha-sites-prod.json +38 -38
  12. package/assets/recaptcha/recaptcha-sites.json +52 -52
  13. package/esm2022/lib/api/connection.service.mjs +1 -1
  14. package/esm2022/lib/classes/checkout/steps.mjs +1 -1
  15. package/esm2022/lib/classes/component-helper.mjs +1 -1
  16. package/esm2022/lib/classes/filters/attributes-filter.mjs +1 -1
  17. package/esm2022/lib/classes/filters/category-filter.mjs +1 -1
  18. package/esm2022/lib/classes/filters/dynamics-filter.mjs +1 -1
  19. package/esm2022/lib/classes/filters/filter-factory.mjs +1 -1
  20. package/esm2022/lib/classes/filters/filter.mjs +1 -1
  21. package/esm2022/lib/classes/filters/index.mjs +1 -1
  22. package/esm2022/lib/classes/filters/price_range-filter.mjs +1 -1
  23. package/esm2022/lib/classes/filters/sort-filter.mjs +1 -1
  24. package/esm2022/lib/classes/index.mjs +1 -1
  25. package/esm2022/lib/classes/user.mjs +1 -1
  26. package/esm2022/lib/constants/api.constants.service.mjs +19 -15
  27. package/esm2022/lib/constants/core.constants.service.mjs +9 -3
  28. package/esm2022/lib/constants/index.mjs +1 -1
  29. package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +1 -1
  30. package/esm2022/lib/ec-components/abstractions-components/index.mjs +1 -1
  31. package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +17 -1
  32. package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +3 -3
  33. package/esm2022/lib/ec-components/account-ec/index.mjs +1 -1
  34. package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +5 -9
  35. package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +11 -5
  36. package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +3 -3
  37. package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +3 -3
  38. package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +3 -3
  39. package/esm2022/lib/ec-components/auth-ec/index.mjs +1 -1
  40. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +28 -18
  41. package/esm2022/lib/ec-components/auth-ec/password-reset-ec/password-reset-ec.component.mjs +27 -23
  42. package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +3 -3
  43. package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +3 -3
  44. package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +3 -3
  45. package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +3 -3
  46. package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +3 -3
  47. package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +3 -3
  48. package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +3 -3
  49. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +7 -4
  50. package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +3 -3
  51. package/esm2022/lib/ec-components/blocks-ec/index.mjs +1 -1
  52. package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +3 -3
  53. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +12 -3
  54. package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +3 -3
  55. package/esm2022/lib/ec-components/cart-ec/index.mjs +1 -1
  56. package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +10 -3
  57. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +4 -11
  58. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +3 -3
  59. package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +5 -3
  60. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +49 -5
  61. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +3 -3
  62. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +1 -1
  63. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +55 -46
  64. package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +3 -3
  65. package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +3 -3
  66. package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +3 -3
  67. package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +4 -3
  68. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +3 -3
  69. package/esm2022/lib/ec-components/contact-ec/contact-ec.component.mjs +1 -1
  70. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
  71. package/esm2022/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.mjs +79 -0
  72. package/esm2022/lib/ec-components/faqs-ec/faqs-ec.component.mjs +3 -3
  73. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +30 -7
  74. package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +3 -3
  75. package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +3 -3
  76. package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +37 -17
  77. package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +3 -3
  78. package/esm2022/lib/ec-components/index.mjs +2 -1
  79. package/esm2022/lib/ec-components/price-range-filter/price-range-filter.component.mjs +3 -3
  80. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +12 -7
  81. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +3 -3
  82. package/esm2022/lib/ec-components/related-products-ec/related-products-ec.component.mjs +3 -3
  83. package/esm2022/lib/ec-components/reviews-ec/reviews-ec.component.mjs +3 -3
  84. package/esm2022/lib/ec-components/reviews-form-ec/reviews-form-ec.component.mjs +3 -3
  85. package/esm2022/lib/ec-components/section-container-ec/section-container-ec.component.mjs +3 -3
  86. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/index.mjs +1 -1
  87. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-email-ec/share-email-ec.component.mjs +3 -3
  88. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-facebook-ec/share-facebook-ec.component.mjs +3 -3
  89. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-pinterest-ec/share-pinterest-ec.component.mjs +3 -3
  90. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-twitter-ec/share-twitter-ec.component.mjs +3 -3
  91. package/esm2022/lib/ec-components/share-ec/share-buttons-ec/share-whatsapp-ec/share-whatsapp-ec.component.mjs +3 -3
  92. package/esm2022/lib/ec-components/share-ec/share-ec.component.mjs +3 -3
  93. package/esm2022/lib/ec-components/sidebar-ec/sidebar-ec.component.mjs +5 -7
  94. package/esm2022/lib/ec-components/stores-ec/stores-ec.component.mjs +20 -11
  95. package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +3 -3
  96. package/esm2022/lib/ec-components/widgets-ec/decidir-ec/decidir-ec.component.mjs +14 -8
  97. package/esm2022/lib/ec-components/widgets-ec/index.mjs +1 -1
  98. package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +1 -1
  99. package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +3 -3
  100. package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +3 -3
  101. package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +3 -3
  102. package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +9 -9
  103. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +5 -11
  104. package/esm2022/lib/ec-components/widgets-ec/rating-ec/rating-ec.component.mjs +3 -3
  105. package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +3 -3
  106. package/esm2022/lib/ec-components/widgets-ec/redsys-catch-ec/redsys-catch-ec.component.mjs +19 -9
  107. package/esm2022/lib/ec-directive/index.mjs +1 -1
  108. package/esm2022/lib/ec-directive/product-off.directive.mjs +1 -1
  109. package/esm2022/lib/ec-directive/product-stock.directive.mjs +1 -1
  110. package/esm2022/lib/ec-guards/auth.guard.mjs +1 -1
  111. package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +1 -1
  112. package/esm2022/lib/ec-pipe/ec-safe-html.pipe.mjs +1 -1
  113. package/esm2022/lib/ec-pipe/index.mjs +1 -1
  114. package/esm2022/lib/ec-services/addressing.service.mjs +1 -1
  115. package/esm2022/lib/ec-services/analytics/analytics.service.mjs +1 -1
  116. package/esm2022/lib/ec-services/analytics/doppler.service.mjs +1 -1
  117. package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +1 -1
  118. package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +4 -4
  119. package/esm2022/lib/ec-services/analytics/gtm.service.mjs +3 -2
  120. package/esm2022/lib/ec-services/analytics/index.mjs +1 -1
  121. package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +11 -11
  122. package/esm2022/lib/ec-services/auth.service.mjs +1 -1
  123. package/esm2022/lib/ec-services/auth.storage.service.mjs +1 -1
  124. package/esm2022/lib/ec-services/base-api.service.mjs +148 -0
  125. package/esm2022/lib/ec-services/blocks-repository.service.mjs +1 -1
  126. package/esm2022/lib/ec-services/blocks.service.mjs +1 -1
  127. package/esm2022/lib/ec-services/cart.service.mjs +42 -7
  128. package/esm2022/lib/ec-services/channel.service.mjs +1 -1
  129. package/esm2022/lib/ec-services/checkout.service.mjs +4 -2
  130. package/esm2022/lib/ec-services/currency.service.mjs +1 -1
  131. package/esm2022/lib/ec-services/filters.service.mjs +1 -1
  132. package/esm2022/lib/ec-services/form.service.mjs +1 -1
  133. package/esm2022/lib/ec-services/index.mjs +4 -1
  134. package/esm2022/lib/ec-services/local-storage.service.mjs +1 -1
  135. package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +1 -1
  136. package/esm2022/lib/ec-services/options.service.mjs +1 -1
  137. package/esm2022/lib/ec-services/order-utility.service.mjs +1 -1
  138. package/esm2022/lib/ec-services/orders.service.mjs +1 -1
  139. package/esm2022/lib/ec-services/pagination.service.mjs +1 -1
  140. package/esm2022/lib/ec-services/parameters.service.mjs +1 -1
  141. package/esm2022/lib/ec-services/payment.service.mjs +1 -1
  142. package/esm2022/lib/ec-services/price-visibility.service.mjs +40 -0
  143. package/esm2022/lib/ec-services/product-detail.service.mjs +45 -7
  144. package/esm2022/lib/ec-services/products.service.mjs +1 -1
  145. package/esm2022/lib/ec-services/re-captcha.service.mjs +1 -1
  146. package/esm2022/lib/ec-services/reviews.service.mjs +1 -1
  147. package/esm2022/lib/ec-services/runtime-config.service.mjs +219 -0
  148. package/esm2022/lib/ec-services/shipment.service.mjs +1 -1
  149. package/esm2022/lib/ec-services/stores.service.mjs +1 -1
  150. package/esm2022/lib/ec-services/test.service.mjs +1 -1
  151. package/esm2022/lib/ec-services/toast.service.mjs +1 -1
  152. package/esm2022/lib/interceptors/auth.interceptor.mjs +1 -1
  153. package/esm2022/lib/interceptors/index.mjs +2 -1
  154. package/esm2022/lib/interceptors/runtime-config.interceptor.mjs +41 -0
  155. package/esm2022/lib/interfaces/analytics/event-key.mjs +1 -1
  156. package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +1 -1
  157. package/esm2022/lib/interfaces/analytics/gtm-config.mjs +1 -1
  158. package/esm2022/lib/interfaces/analytics/index.mjs +1 -1
  159. package/esm2022/lib/interfaces/blocks.mjs +1 -1
  160. package/esm2022/lib/interfaces/checkout.mjs +1 -1
  161. package/esm2022/lib/interfaces/connection.mjs +1 -1
  162. package/esm2022/lib/interfaces/coupon.mjs +1 -1
  163. package/esm2022/lib/interfaces/currency.mjs +1 -1
  164. package/esm2022/lib/interfaces/deserializable.mjs +1 -1
  165. package/esm2022/lib/interfaces/environment.mjs +1 -1
  166. package/esm2022/lib/interfaces/faqs.mjs +1 -1
  167. package/esm2022/lib/interfaces/filter.mjs +1 -1
  168. package/esm2022/lib/interfaces/index.mjs +2 -1
  169. package/esm2022/lib/interfaces/options.mjs +1 -1
  170. package/esm2022/lib/interfaces/pagination.mjs +1 -1
  171. package/esm2022/lib/interfaces/parameter.mjs +1 -1
  172. package/esm2022/lib/interfaces/product.mjs +1 -1
  173. package/esm2022/lib/interfaces/runtime-config.mjs +2 -0
  174. package/esm2022/lib/interfaces/step.mjs +1 -1
  175. package/esm2022/lib/interfaces/storage.mjs +1 -1
  176. package/esm2022/lib/interfaces/store.mjs +1 -1
  177. package/esm2022/lib/interfaces/types/user.type.mjs +1 -1
  178. package/esm2022/lib/providers/index.mjs +2 -1
  179. package/esm2022/lib/providers/provideEnvironment.mjs +1 -1
  180. package/esm2022/lib/providers/provideRuntimeConfig.mjs +36 -0
  181. package/esm2022/lib/stores/currency.store.mjs +1 -1
  182. package/esm2022/public-api.mjs +1 -1
  183. package/fesm2022/ng-easycommerce-v18.mjs +1125 -354
  184. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  185. package/lib/constants/api.constants.service.d.ts +1 -0
  186. package/lib/constants/core.constants.service.d.ts +5 -1
  187. package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +12 -0
  188. package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +2 -2
  189. package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +3 -0
  190. package/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.d.ts +2 -0
  191. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +4 -2
  192. package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +2 -0
  193. package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +2 -0
  194. package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +7 -1
  195. package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +1 -0
  196. package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +1 -0
  197. package/lib/ec-components/credit-account-banner-ec/credit-account-banner-ec.component.d.ts +27 -0
  198. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +12 -4
  199. package/lib/ec-components/header-ec/header-ec.component.d.ts +12 -4
  200. package/lib/ec-components/index.d.ts +1 -0
  201. package/lib/ec-components/sidebar-ec/sidebar-ec.component.d.ts +2 -1
  202. package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +2 -4
  203. package/lib/ec-services/base-api.service.d.ts +64 -0
  204. package/lib/ec-services/cart.service.d.ts +1 -0
  205. package/lib/ec-services/index.d.ts +3 -0
  206. package/lib/ec-services/price-visibility.service.d.ts +23 -0
  207. package/lib/ec-services/product-detail.service.d.ts +3 -0
  208. package/lib/ec-services/runtime-config.service.d.ts +69 -0
  209. package/lib/interceptors/index.d.ts +1 -0
  210. package/lib/interceptors/runtime-config.interceptor.d.ts +7 -0
  211. package/lib/interfaces/environment.d.ts +1 -0
  212. package/lib/interfaces/filter.d.ts +1 -0
  213. package/lib/interfaces/index.d.ts +1 -0
  214. package/lib/interfaces/options.d.ts +2 -0
  215. package/lib/interfaces/runtime-config.d.ts +22 -0
  216. package/lib/providers/index.d.ts +1 -0
  217. package/lib/providers/provideRuntimeConfig.d.ts +13 -0
  218. package/package.json +1 -1
@@ -1,514 +1,514 @@
1
- <!DOCTYPE html>
2
- <html lang="es">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
8
- integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
9
- <title>Decidir</title>
10
-
11
- <script defer>
12
- const subtotal = localStorage.getItem('subtotal')
13
- // console.log(subtotal);
14
- const dataDecidirHead = localStorage.getItem('dataDecidir')
15
- && JSON.parse(localStorage.getItem('dataDecidir'))
16
- let modoHead = dataDecidirHead?.config?.public_environment || null
17
- modoHead && (modoHead == 'prod' && (modoHead = false) || modoHead == 'test' && (modoHead = true))
18
- //console.log('modo head',modoHead, dataDecidirHead)
19
- !modoHead && (modoHead = window.location.host.includes('easycommerce'))
20
- let my_awesome_script = document.createElement('script');
21
- my_awesome_script.setAttribute('defer', 'defer')
22
- my_awesome_script.setAttribute('src',
23
- 'https://live.decidir.com/static/v2.6.4/decidir.js'
24
- );
25
- document.head.appendChild(my_awesome_script);
26
-
27
- //Script para el fingerpoint
28
- function makeSessionId(length) {
29
- var result = '';
30
- var characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
31
- var charactersLength = characters.length;
32
- for (var i = 0; i < length; i++) {
33
- result += characters.charAt(Math.floor(Math.random() *
34
- charactersLength));
35
- }
36
- return result;
37
- }
38
-
39
- function addStreetAndNro() {
40
- let row = document.createElement('div')
41
- row.classList.add('row')
42
- /*Columna Calle*/
43
- let colAddress = document.createElement('div')
44
- colAddress.classList.add('col-md-9', 'col-12')
45
- let contInput = document.createElement('div')
46
- contInput.classList.add('form-floating', 'mb-3')
47
- let inputAddress = document.createElement('input')
48
- inputAddress.classList.add('form-control')
49
- inputAddress.setAttribute('data-decidir', 'address')
50
- inputAddress.setAttribute('type', 'text')
51
- inputAddress.setAttribute('id', 'address')
52
- inputAddress.setAttribute('name', 'address')
53
- inputAddress.setAttribute('required', '')
54
- let labelAdress = document.createElement('label')
55
- labelAdress.setAttribute('for', 'address')
56
- labelAdress.textContent = 'Calle:'
57
- contInput.appendChild(inputAddress)
58
- contInput.appendChild(labelAdress)
59
- colAddress.appendChild(contInput)
60
- /*---*/
61
-
62
- /*Columna Nro*/
63
- let colNro = document.createElement('div')
64
- colNro.classList.add('col-md-3', 'col-12')
65
- let contNro = document.createElement('div')
66
- contNro.classList.add('form-floating', 'mb-3')
67
- let inputNro = document.createElement('input')
68
- inputNro.classList.add('form-control')
69
- inputNro.setAttribute('data-decidir', 'nro')
70
- inputNro.setAttribute('type', 'number')
71
- inputNro.setAttribute('id', 'nro')
72
- inputNro.setAttribute('name', 'nro')
73
- inputNro.setAttribute('required', '')
74
- let labelNro = document.createElement('label')
75
- labelNro.setAttribute('for', 'nro')
76
- labelNro.textContent = 'Nro:'
77
- contNro.appendChild(inputNro)
78
- contNro.appendChild(labelNro)
79
- colNro.appendChild(contNro)
80
- /*---*/
81
-
82
- row.appendChild(colAddress)
83
- row.appendChild(colNro)
84
- return row
85
- }
86
-
87
- function addTipoDeInteres() {
88
- let row = document.createElement('div');
89
- row.classList.add('row');
90
-
91
- /* Columna Tipo de Interés */
92
- let colInteres = document.createElement('div');
93
- colInteres.classList.add('col-md-6', 'col-12');
94
- let contSelect = document.createElement('div');
95
- contSelect.classList.add('form-floating', 'mb-3');
96
-
97
- let selectInteres = document.createElement('select');
98
- selectInteres.classList.add('form-select');
99
- selectInteres.setAttribute('data-decidir', 'tipo_interes');
100
- selectInteres.setAttribute('id', 'tipo_interes');
101
- selectInteres.setAttribute('name', 'tipo_interes');
102
- selectInteres.setAttribute('required', '');
103
-
104
- // Opción predeterminada
105
- let optionDefault = document.createElement('option');
106
- optionDefault.value = '';
107
- optionDefault.textContent = 'Seleccione cantidad de cuotas';
108
- optionDefault.disabled = true;
109
- optionDefault.selected = true;
110
- selectInteres.appendChild(optionDefault);
111
-
112
- // Agregar cuotas activas como opciones
113
- dataDecidirHead.config.public_card_type_configurations.forEach((cuota) => {
114
- if (cuota.active) {
115
- let option = document.createElement('option');
116
- option.value = cuota.dues;
117
- option.setAttribute('data-interest-rate', cuota.interestRate);
118
- option.textContent = `${cuota.dues} cuotas (${cuota.interestRate}% interés)`;
119
- selectInteres.appendChild(option);
120
- }
121
- });
122
-
123
- let labelInteres = document.createElement('label');
124
- labelInteres.setAttribute('for', 'tipo_interes');
125
- labelInteres.textContent = 'Tipo de interés:';
126
-
127
- contSelect.appendChild(selectInteres);
128
- contSelect.appendChild(labelInteres);
129
- colInteres.appendChild(contSelect);
130
- /*---*/
131
-
132
- /* Columna Total con interés */
133
- let colRate = document.createElement('div');
134
- colRate.classList.add('col-md-6', 'col-12');
135
- let contInputRate = document.createElement('div');
136
- contInputRate.classList.add('form-floating', 'mb-3');
137
-
138
- let inputRate = document.createElement('input');
139
- inputRate.classList.add('form-control');
140
- inputRate.setAttribute('type', 'text');
141
- inputRate.setAttribute('id', 'total_con_interes');
142
- inputRate.setAttribute('name', 'total_con_interes');
143
- inputRate.setAttribute('readonly', true); // Input de solo lectura
144
- inputRate.setAttribute('placeholder', 'Total con interés');
145
-
146
- let labelRate = document.createElement('label');
147
- labelRate.setAttribute('for', 'total_con_interes');
148
- labelRate.textContent = 'Total con interés:';
149
-
150
- contInputRate.appendChild(inputRate);
151
- contInputRate.appendChild(labelRate);
152
- colRate.appendChild(contInputRate);
153
- /*---*/
154
-
155
- // Agregar columnas al row
156
- row.appendChild(colInteres);
157
- row.appendChild(colRate);
158
-
159
- // Asegurarse de que el subtotal es un número
160
- let subtotal = parseFloat(localStorage.getItem('subtotal'));
161
-
162
- if (isNaN(subtotal)) {
163
- subtotal = 0; // Si no es un número válido, lo dejamos como 0
164
- }
165
-
166
- // Evento para cambiar el valor del input según la opción seleccionada
167
- selectInteres.addEventListener('change', function () {
168
- let selectedOption = selectInteres.options[selectInteres.selectedIndex];
169
- let interestRate = parseFloat(selectedOption.getAttribute('data-interest-rate')) || 0;
170
-
171
- // Calcular el total con el interés aplicado
172
- let totalConInteres = subtotal * (1 + interestRate / 100);
173
-
174
- // Formatear el total con separadores de miles
175
- let totalFormateado = totalConInteres.toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
176
-
177
- // Actualizar el input con el valor calculado y formateado
178
- if (!isNaN(totalConInteres)) {
179
- inputRate.value = totalFormateado; // Asignar el valor formateado al input
180
- } else {
181
- inputRate.value = ''; // Si el total es NaN, dejamos el campo vacío
182
- }
183
- });
184
-
185
- return row;
186
- }
187
-
188
-
189
-
190
-
191
- let my_copy_script = document.createElement('script');
192
- my_copy_script.setAttribute('type', 'text/javascript');
193
-
194
- let infoDecidir = JSON.parse(localStorage.getItem('dataDecidir')) || undefined
195
- //console.log(infoDecidir)
196
- let urlBase = 'https://h.online-metrix.net/fp/tags.js';
197
- let org_id = infoDecidir?.config?.public_environment == 'test' ? '1snn5n9w' : 'k8vif92e'
198
- let merchand_id = infoDecidir?.config?.public_merchand_id || 'decidir_agregador'
199
- let cybersource = infoDecidir?.config?.public_cybersource || 'deshabilitado'
200
- let session_id = makeSessionId(8)
201
-
202
- my_copy_script.setAttribute('src', urlBase + '?org_id=' + org_id + '&session_id=' + merchand_id + session_id)
203
- document.head.appendChild(my_copy_script)
204
-
205
- </script>
206
- </head>
207
-
208
- <body>
209
-
210
- <style>
211
- .logo-pago-seguro-img {
212
- /* width: 150px;
213
- height: 48px; */
214
- }
215
-
216
- .loader {
217
- border: 16px solid #f3f3f3;
218
- border-top: 16px solid #dc3545;
219
- border-radius: 50%;
220
- width: 50px;
221
- height: 50px;
222
- animation: spin 2s linear infinite;
223
- }
224
-
225
- @keyframes spin {
226
- 0% {
227
- transform: rotate(0deg);
228
- }
229
-
230
- 100% {
231
- transform: rotate(360deg);
232
- }
233
- }
234
-
235
- .flex-container {
236
- display: flex;
237
- justify-content: center;
238
- align-items: center;
239
- height: 80vh;
240
- }
241
-
242
- .flex-container>div {
243
- width: 100px;
244
- height: 100px;
245
- }
246
- </style>
247
-
248
- <div class="container-fluid">
249
- <div class="row mt-3">
250
- <div class="col-12">
251
- <div class="card">
252
-
253
- <div class="container-fluid mt-3">
254
- <div class="row">
255
- <div class="col-md-6 col-12">
256
- <!-- <h5><b>Decidir</b></h5> -->
257
- </div>
258
- <div class="col-md-6 col-12">
259
- <img src="../assets/images/cards-occasional.png" class="card-img-top" alt="...">
260
- </div>
261
- </div>
262
- </div>
263
- <div class="card-body">
264
- <form action="" method="post" id="formulario">
265
- <div>
266
- <div id="contForm">
267
- <div class="row">
268
- <div class="col-md-8 col-12">
269
-
270
- <div class="form-floating mb-3">
271
- <input class="form-control" type="text" data-decidir="card_number"
272
- placeholder="XXXXXXXXXXXXXXXX" maxlength="18" value=""
273
- oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');">
274
- <label for="card_number">Numero de tarjeta:</label>
275
- </div>
276
-
277
- </div>
278
- <div class="col-md-4 col-12">
279
-
280
- <div class="form-floating mb-3">
281
- <input class="form-control" type="text" data-decidir="security_code"
282
- placeholder="XXX" maxlength="4" value=""
283
- oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
284
- <label for="security_code">Codigo de seguridad:</label>
285
- </div>
286
-
287
- </div>
288
- </div>
289
- <div class="row">
290
-
291
- <div class="col-md-6 col-12">
292
- <div class="form-floating mb-3">
293
- <input class="form-control" type="text"
294
- data-decidir="card_expiration_month" placeholder="MM" maxlength="2"
295
- value=""
296
- oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
297
- <label for="card_expiration_month">Mes de vencimiento:</label>
298
- </div>
299
- </div>
300
-
301
- <div class="col-md-6 col-12">
302
- <div class="form-floating mb-3">
303
- <input class="form-control" type="text"
304
- data-decidir="card_expiration_year" placeholder="AA" maxlength="2"
305
- value=""
306
- oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
307
- <label for="card_expiration_year">Año de vencimiento:</label>
308
- </div>
309
- </div>
310
- </div>
311
- <div class="row">
312
- <div class="col-12 col-md-8">
313
- <div class="form-floating mb-3">
314
- <input class="form-control" type="text" data-decidir="card_holder_name"
315
- placeholder="TITULAR" value="" />
316
- <label for="card_holder_name">Nombre del titular:</label>
317
- </div>
318
- </div>
319
- <div class="col-12 col-md-4">
320
- <div class="form-floating mb-3">
321
- <input class="form-control" id="date_of_birth" type="date"
322
- data-decidir="date_of_birth" placeholder="" value="" required />
323
- <label for="date_of_birth">Fecha de nacimiento:</label>
324
- </div>
325
- </div>
326
- </div>
327
- <div class="row">
328
- <div class="col-md-6 col-12">
329
- <div class="form-floating mb-3">
330
- <select class="form-select" data-decidir="card_holder_doc_type">
331
- <option value="dni">DNI</option>
332
- </select>
333
- <label for="card_holder_doc_type">Tipo de documento:</label>
334
- </div>
335
- </div>
336
- <div class="col-md-6 col-12">
337
- <div class="form-floating mb-3">
338
- <input class="form-control" data-decidir="card_holder_doc_number"
339
- placeholder="XXXXXXXXXX" maxlength="9" value=""
340
- oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');">
341
- <label for="card_holder_doc_type">Numero de documento:</label>
342
- </div>
343
- </div>
344
- </div>
345
- </div>
346
- <div class="w-100 text-center">
347
- <div id="loadTokenBtn">
348
- <div class="d-grid gap-2">
349
- <input type="submit" value="Pagar" class="btn btn-outline-success mt-3" />
350
- </div>
351
- </div>
352
- <div id="loadToken" class="text-center mt-4">
353
- <div class="spinner-border" role="status">
354
- <span class="visually-hidden">Cargando...</span>
355
- </div>
356
- </div>
357
- </div>
358
- </fieldset>
359
- </form>
360
- </div>
361
- <div class="w-100 d-flex justify-content-end">
362
- <div class="w-50 d-flex justify-content-end">
363
- <img src="../assets/images/decidir-logo.png" class="card-img-top w-50 logo-pago-seguro-img "
364
- alt="...">
365
- </div>
366
- </div>
367
- </div>
368
-
369
- </div>
370
- </div>
371
- </div>
372
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
373
- integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
374
-
375
- <script defer>
376
- if (cybersource != 'deshabilitado') {
377
- document.getElementById('contForm').appendChild(addStreetAndNro())
378
- document.getElementById('contForm').appendChild(addTipoDeInteres());
379
- }
380
- let iframe = document.createElement('iframe')
381
- iframe.setAttribute('style', 'width: 100px; height: 100px; border: 0; position: absolute; top:-5000px;')
382
- iframe.setAttribute('src', 'https://h.online-metrix.net/fp/tags?org_id=' + org_id + '&session_id=' + merchand_id + session_id)
383
-
384
- document.body.appendChild(iframe)
385
-
386
- window.onload = function () {
387
-
388
- let loadToken = document.querySelector('#loadToken');
389
- let loadTokenBtn = document.querySelector('#loadTokenBtn');
390
-
391
- const isLoad = (state) => {
392
- loadToken.style.display = !state && 'none' || 'block';
393
- loadTokenBtn.style.display = state && 'none' || 'block';
394
- }
395
-
396
- isLoad(false)
397
-
398
- const urlSandbox = "https://developers.decidir.com/api/v2";
399
- const urlProduccion = "https://live.decidir.com/api/v2";
400
- const dataRedirect = localStorage.getItem('dataRedirect')
401
- const dataDecidir = localStorage.getItem('dataDecidir')
402
- && JSON.parse(localStorage.getItem('dataDecidir'))
403
-
404
- const publicApiKey = dataDecidir?.config?.public_key
405
- let cybersource = dataDecidir?.config?.public_cybersource && dataDecidir?.config?.public_cybersource == 'deshabilitado'
406
- let modo = dataDecidir?.config?.public_environment || null
407
-
408
- modo ? (modo == 'prod' ? modo = false : modo = true) : (modo = window.location.host.includes('easycommerce'))
409
-
410
- const decidir = new Decidir(modo && modo ? urlSandbox : urlProduccion);
411
- decidir.setPublishableKey(publicApiKey);
412
- decidir.setTimeout(5000);
413
-
414
-
415
- let form = document.querySelector('#formulario');
416
-
417
- const setMessageInStore = (response) => {
418
- if (response.hasOwnProperty('message')) {
419
- localStorage.setItem('message', response.message)
420
- }
421
- if (response.hasOwnProperty('subMessage')) {
422
- localStorage.setItem('subMessage', response.subMessage)
423
- }
424
- }
425
-
426
- const sendToken = (data) => {
427
- data['fraud_detection'] = {
428
- "device_unique_identifier": session_id
429
- }
430
- data['date_of_birth'] = document.getElementById('date_of_birth').value;
431
- // console.log('Datos para el envio: ', data)
432
- // console.log(dataDecidir)
433
- if (dataDecidir?.config?.public_cybersource != 'deshabilitado') {
434
- data['address'] = {
435
- 'name': document.getElementById('address').value,
436
- 'number': document.getElementById('nro').value
437
- }
438
- data['subtotal'] = document.getElementById('total_con_interes').value
439
- data['dues'] = document.getElementById('tipo_interes').value;
440
- }
441
-
442
- try {
443
- fetch(dataRedirect, {
444
- method: 'POST',
445
- body: JSON.stringify(data),
446
- headers: {
447
- 'Content-Type': 'application/json'
448
- }
449
- }).then(res => res.json())
450
- .catch(error => {
451
- console.error('Error:', error)
452
- processError(response)
453
- })
454
- .then(response => {
455
- // console.log('Success:', response)
456
- setMessageInStore(response)
457
- if (response.hasOwnProperty('status')) {
458
- if (response.status == 'approved' || response.status == 'partially_authorized') {
459
- processResponse(response)
460
- } else {
461
- processError(response)
462
- }
463
- } else {
464
- processError(response)
465
- }
466
- });
467
- } catch (error) {
468
- processError(response)
469
- }
470
- localStorage.removeItem('dataRedirect')
471
- localStorage.removeItem('dataDecidir')
472
- localStorage.removeItem('subtotal')
473
- }
474
-
475
- const sdkResponseHandler = (status, response) => {
476
- // console.log('Respuesta: ', response)
477
- if (status != 200 && status != 201) {
478
- //Manejo de error: Ver Respuesta de Error
479
- processError(response)
480
- } else {
481
- //Manejo de respuesta donde response = {token: "99ab0740-4ef9-4b38-bdf9-c4c963459b22"}
482
- sendToken(response)
483
- }
484
- }
485
-
486
- const sendForm = (event) => {
487
- isLoad(true)
488
- // console.log('Formulario: ', form)
489
- event.preventDefault();
490
- decidir.createToken(form, sdkResponseHandler);
491
- return false;
492
- }
493
-
494
- const processError = (error) => {
495
- // console.log("ERROR ENVIO BACK ", error);
496
- isLoad(false)
497
- localStorage.setItem('state', 'failure')
498
- }
499
-
500
- const processResponse = (response) => {
501
- // console.log("ENVIO BACK ", response);
502
- isLoad(false)
503
- localStorage.setItem('state', response.status == 'approved' ? 'success' : 'partially_authorized')
504
- }
505
-
506
- form.addEventListener('submit', sendForm);
507
-
508
- };
509
-
510
-
511
- </script>
512
- </body>
513
-
514
- </html>
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
8
+ integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
9
+ <title>Decidir</title>
10
+
11
+ <script defer>
12
+ const subtotal = localStorage.getItem('subtotal')
13
+ // console.log(subtotal);
14
+ const dataDecidirHead = localStorage.getItem('dataDecidir')
15
+ && JSON.parse(localStorage.getItem('dataDecidir'))
16
+ let modoHead = dataDecidirHead?.config?.public_environment || null
17
+ modoHead && (modoHead == 'prod' && (modoHead = false) || modoHead == 'test' && (modoHead = true))
18
+ //console.log('modo head',modoHead, dataDecidirHead)
19
+ !modoHead && (modoHead = window.location.host.includes('easycommerce'))
20
+ let my_awesome_script = document.createElement('script');
21
+ my_awesome_script.setAttribute('defer', 'defer')
22
+ my_awesome_script.setAttribute('src',
23
+ 'https://live.decidir.com/static/v2.6.4/decidir.js'
24
+ );
25
+ document.head.appendChild(my_awesome_script);
26
+
27
+ //Script para el fingerpoint
28
+ function makeSessionId(length) {
29
+ var result = '';
30
+ var characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
31
+ var charactersLength = characters.length;
32
+ for (var i = 0; i < length; i++) {
33
+ result += characters.charAt(Math.floor(Math.random() *
34
+ charactersLength));
35
+ }
36
+ return result;
37
+ }
38
+
39
+ function addStreetAndNro() {
40
+ let row = document.createElement('div')
41
+ row.classList.add('row')
42
+ /*Columna Calle*/
43
+ let colAddress = document.createElement('div')
44
+ colAddress.classList.add('col-md-9', 'col-12')
45
+ let contInput = document.createElement('div')
46
+ contInput.classList.add('form-floating', 'mb-3')
47
+ let inputAddress = document.createElement('input')
48
+ inputAddress.classList.add('form-control')
49
+ inputAddress.setAttribute('data-decidir', 'address')
50
+ inputAddress.setAttribute('type', 'text')
51
+ inputAddress.setAttribute('id', 'address')
52
+ inputAddress.setAttribute('name', 'address')
53
+ inputAddress.setAttribute('required', '')
54
+ let labelAdress = document.createElement('label')
55
+ labelAdress.setAttribute('for', 'address')
56
+ labelAdress.textContent = 'Calle:'
57
+ contInput.appendChild(inputAddress)
58
+ contInput.appendChild(labelAdress)
59
+ colAddress.appendChild(contInput)
60
+ /*---*/
61
+
62
+ /*Columna Nro*/
63
+ let colNro = document.createElement('div')
64
+ colNro.classList.add('col-md-3', 'col-12')
65
+ let contNro = document.createElement('div')
66
+ contNro.classList.add('form-floating', 'mb-3')
67
+ let inputNro = document.createElement('input')
68
+ inputNro.classList.add('form-control')
69
+ inputNro.setAttribute('data-decidir', 'nro')
70
+ inputNro.setAttribute('type', 'number')
71
+ inputNro.setAttribute('id', 'nro')
72
+ inputNro.setAttribute('name', 'nro')
73
+ inputNro.setAttribute('required', '')
74
+ let labelNro = document.createElement('label')
75
+ labelNro.setAttribute('for', 'nro')
76
+ labelNro.textContent = 'Nro:'
77
+ contNro.appendChild(inputNro)
78
+ contNro.appendChild(labelNro)
79
+ colNro.appendChild(contNro)
80
+ /*---*/
81
+
82
+ row.appendChild(colAddress)
83
+ row.appendChild(colNro)
84
+ return row
85
+ }
86
+
87
+ function addTipoDeInteres() {
88
+ let row = document.createElement('div');
89
+ row.classList.add('row');
90
+
91
+ /* Columna Tipo de Interés */
92
+ let colInteres = document.createElement('div');
93
+ colInteres.classList.add('col-md-6', 'col-12');
94
+ let contSelect = document.createElement('div');
95
+ contSelect.classList.add('form-floating', 'mb-3');
96
+
97
+ let selectInteres = document.createElement('select');
98
+ selectInteres.classList.add('form-select');
99
+ selectInteres.setAttribute('data-decidir', 'tipo_interes');
100
+ selectInteres.setAttribute('id', 'tipo_interes');
101
+ selectInteres.setAttribute('name', 'tipo_interes');
102
+ selectInteres.setAttribute('required', '');
103
+
104
+ // Opción predeterminada
105
+ let optionDefault = document.createElement('option');
106
+ optionDefault.value = '';
107
+ optionDefault.textContent = 'Seleccione cantidad de cuotas';
108
+ optionDefault.disabled = true;
109
+ optionDefault.selected = true;
110
+ selectInteres.appendChild(optionDefault);
111
+
112
+ // Agregar cuotas activas como opciones
113
+ dataDecidirHead.config.public_card_type_configurations.forEach((cuota) => {
114
+ if (cuota.active) {
115
+ let option = document.createElement('option');
116
+ option.value = cuota.dues;
117
+ option.setAttribute('data-interest-rate', cuota.interestRate);
118
+ option.textContent = `${cuota.dues} cuotas (${cuota.interestRate}% interés)`;
119
+ selectInteres.appendChild(option);
120
+ }
121
+ });
122
+
123
+ let labelInteres = document.createElement('label');
124
+ labelInteres.setAttribute('for', 'tipo_interes');
125
+ labelInteres.textContent = 'Tipo de interés:';
126
+
127
+ contSelect.appendChild(selectInteres);
128
+ contSelect.appendChild(labelInteres);
129
+ colInteres.appendChild(contSelect);
130
+ /*---*/
131
+
132
+ /* Columna Total con interés */
133
+ let colRate = document.createElement('div');
134
+ colRate.classList.add('col-md-6', 'col-12');
135
+ let contInputRate = document.createElement('div');
136
+ contInputRate.classList.add('form-floating', 'mb-3');
137
+
138
+ let inputRate = document.createElement('input');
139
+ inputRate.classList.add('form-control');
140
+ inputRate.setAttribute('type', 'text');
141
+ inputRate.setAttribute('id', 'total_con_interes');
142
+ inputRate.setAttribute('name', 'total_con_interes');
143
+ inputRate.setAttribute('readonly', true); // Input de solo lectura
144
+ inputRate.setAttribute('placeholder', 'Total con interés');
145
+
146
+ let labelRate = document.createElement('label');
147
+ labelRate.setAttribute('for', 'total_con_interes');
148
+ labelRate.textContent = 'Total con interés:';
149
+
150
+ contInputRate.appendChild(inputRate);
151
+ contInputRate.appendChild(labelRate);
152
+ colRate.appendChild(contInputRate);
153
+ /*---*/
154
+
155
+ // Agregar columnas al row
156
+ row.appendChild(colInteres);
157
+ row.appendChild(colRate);
158
+
159
+ // Asegurarse de que el subtotal es un número
160
+ let subtotal = parseFloat(localStorage.getItem('subtotal'));
161
+
162
+ if (isNaN(subtotal)) {
163
+ subtotal = 0; // Si no es un número válido, lo dejamos como 0
164
+ }
165
+
166
+ // Evento para cambiar el valor del input según la opción seleccionada
167
+ selectInteres.addEventListener('change', function () {
168
+ let selectedOption = selectInteres.options[selectInteres.selectedIndex];
169
+ let interestRate = parseFloat(selectedOption.getAttribute('data-interest-rate')) || 0;
170
+
171
+ // Calcular el total con el interés aplicado
172
+ let totalConInteres = subtotal * (1 + interestRate / 100);
173
+
174
+ // Formatear el total con separadores de miles
175
+ let totalFormateado = totalConInteres.toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
176
+
177
+ // Actualizar el input con el valor calculado y formateado
178
+ if (!isNaN(totalConInteres)) {
179
+ inputRate.value = totalFormateado; // Asignar el valor formateado al input
180
+ } else {
181
+ inputRate.value = ''; // Si el total es NaN, dejamos el campo vacío
182
+ }
183
+ });
184
+
185
+ return row;
186
+ }
187
+
188
+
189
+
190
+
191
+ let my_copy_script = document.createElement('script');
192
+ my_copy_script.setAttribute('type', 'text/javascript');
193
+
194
+ let infoDecidir = JSON.parse(localStorage.getItem('dataDecidir')) || undefined
195
+ //console.log(infoDecidir)
196
+ let urlBase = 'https://h.online-metrix.net/fp/tags.js';
197
+ let org_id = infoDecidir?.config?.public_environment == 'test' ? '1snn5n9w' : 'k8vif92e'
198
+ let merchand_id = infoDecidir?.config?.public_merchand_id || 'decidir_agregador'
199
+ let cybersource = infoDecidir?.config?.public_cybersource || 'deshabilitado'
200
+ let session_id = makeSessionId(8)
201
+
202
+ my_copy_script.setAttribute('src', urlBase + '?org_id=' + org_id + '&session_id=' + merchand_id + session_id)
203
+ document.head.appendChild(my_copy_script)
204
+
205
+ </script>
206
+ </head>
207
+
208
+ <body>
209
+
210
+ <style>
211
+ .logo-pago-seguro-img {
212
+ /* width: 150px;
213
+ height: 48px; */
214
+ }
215
+
216
+ .loader {
217
+ border: 16px solid #f3f3f3;
218
+ border-top: 16px solid #dc3545;
219
+ border-radius: 50%;
220
+ width: 50px;
221
+ height: 50px;
222
+ animation: spin 2s linear infinite;
223
+ }
224
+
225
+ @keyframes spin {
226
+ 0% {
227
+ transform: rotate(0deg);
228
+ }
229
+
230
+ 100% {
231
+ transform: rotate(360deg);
232
+ }
233
+ }
234
+
235
+ .flex-container {
236
+ display: flex;
237
+ justify-content: center;
238
+ align-items: center;
239
+ height: 80vh;
240
+ }
241
+
242
+ .flex-container>div {
243
+ width: 100px;
244
+ height: 100px;
245
+ }
246
+ </style>
247
+
248
+ <div class="container-fluid">
249
+ <div class="row mt-3">
250
+ <div class="col-12">
251
+ <div class="card">
252
+
253
+ <div class="container-fluid mt-3">
254
+ <div class="row">
255
+ <div class="col-md-6 col-12">
256
+ <!-- <h5><b>Decidir</b></h5> -->
257
+ </div>
258
+ <div class="col-md-6 col-12">
259
+ <img src="../assets/images/cards-occasional.png" class="card-img-top" alt="...">
260
+ </div>
261
+ </div>
262
+ </div>
263
+ <div class="card-body">
264
+ <form action="" method="post" id="formulario">
265
+ <div>
266
+ <div id="contForm">
267
+ <div class="row">
268
+ <div class="col-md-8 col-12">
269
+
270
+ <div class="form-floating mb-3">
271
+ <input class="form-control" type="text" data-decidir="card_number"
272
+ placeholder="XXXXXXXXXXXXXXXX" maxlength="18" value=""
273
+ oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');">
274
+ <label for="card_number">Numero de tarjeta:</label>
275
+ </div>
276
+
277
+ </div>
278
+ <div class="col-md-4 col-12">
279
+
280
+ <div class="form-floating mb-3">
281
+ <input class="form-control" type="text" data-decidir="security_code"
282
+ placeholder="XXX" maxlength="4" value=""
283
+ oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
284
+ <label for="security_code">Codigo de seguridad:</label>
285
+ </div>
286
+
287
+ </div>
288
+ </div>
289
+ <div class="row">
290
+
291
+ <div class="col-md-6 col-12">
292
+ <div class="form-floating mb-3">
293
+ <input class="form-control" type="text"
294
+ data-decidir="card_expiration_month" placeholder="MM" maxlength="2"
295
+ value=""
296
+ oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
297
+ <label for="card_expiration_month">Mes de vencimiento:</label>
298
+ </div>
299
+ </div>
300
+
301
+ <div class="col-md-6 col-12">
302
+ <div class="form-floating mb-3">
303
+ <input class="form-control" type="text"
304
+ data-decidir="card_expiration_year" placeholder="AA" maxlength="2"
305
+ value=""
306
+ oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" />
307
+ <label for="card_expiration_year">Año de vencimiento:</label>
308
+ </div>
309
+ </div>
310
+ </div>
311
+ <div class="row">
312
+ <div class="col-12 col-md-8">
313
+ <div class="form-floating mb-3">
314
+ <input class="form-control" type="text" data-decidir="card_holder_name"
315
+ placeholder="TITULAR" value="" />
316
+ <label for="card_holder_name">Nombre del titular:</label>
317
+ </div>
318
+ </div>
319
+ <div class="col-12 col-md-4">
320
+ <div class="form-floating mb-3">
321
+ <input class="form-control" id="date_of_birth" type="date"
322
+ data-decidir="date_of_birth" placeholder="" value="" required />
323
+ <label for="date_of_birth">Fecha de nacimiento:</label>
324
+ </div>
325
+ </div>
326
+ </div>
327
+ <div class="row">
328
+ <div class="col-md-6 col-12">
329
+ <div class="form-floating mb-3">
330
+ <select class="form-select" data-decidir="card_holder_doc_type">
331
+ <option value="dni">DNI</option>
332
+ </select>
333
+ <label for="card_holder_doc_type">Tipo de documento:</label>
334
+ </div>
335
+ </div>
336
+ <div class="col-md-6 col-12">
337
+ <div class="form-floating mb-3">
338
+ <input class="form-control" data-decidir="card_holder_doc_number"
339
+ placeholder="XXXXXXXXXX" maxlength="9" value=""
340
+ oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');">
341
+ <label for="card_holder_doc_type">Numero de documento:</label>
342
+ </div>
343
+ </div>
344
+ </div>
345
+ </div>
346
+ <div class="w-100 text-center">
347
+ <div id="loadTokenBtn">
348
+ <div class="d-grid gap-2">
349
+ <input type="submit" value="Pagar" class="btn btn-outline-success mt-3" />
350
+ </div>
351
+ </div>
352
+ <div id="loadToken" class="text-center mt-4">
353
+ <div class="spinner-border" role="status">
354
+ <span class="visually-hidden">Cargando...</span>
355
+ </div>
356
+ </div>
357
+ </div>
358
+ </fieldset>
359
+ </form>
360
+ </div>
361
+ <div class="w-100 d-flex justify-content-end">
362
+ <div class="w-50 d-flex justify-content-end">
363
+ <img src="../assets/images/decidir-logo.png" class="card-img-top w-50 logo-pago-seguro-img "
364
+ alt="...">
365
+ </div>
366
+ </div>
367
+ </div>
368
+
369
+ </div>
370
+ </div>
371
+ </div>
372
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
373
+ integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
374
+
375
+ <script defer>
376
+ if (cybersource != 'deshabilitado') {
377
+ document.getElementById('contForm').appendChild(addStreetAndNro())
378
+ document.getElementById('contForm').appendChild(addTipoDeInteres());
379
+ }
380
+ let iframe = document.createElement('iframe')
381
+ iframe.setAttribute('style', 'width: 100px; height: 100px; border: 0; position: absolute; top:-5000px;')
382
+ iframe.setAttribute('src', 'https://h.online-metrix.net/fp/tags?org_id=' + org_id + '&session_id=' + merchand_id + session_id)
383
+
384
+ document.body.appendChild(iframe)
385
+
386
+ window.onload = function () {
387
+
388
+ let loadToken = document.querySelector('#loadToken');
389
+ let loadTokenBtn = document.querySelector('#loadTokenBtn');
390
+
391
+ const isLoad = (state) => {
392
+ loadToken.style.display = !state && 'none' || 'block';
393
+ loadTokenBtn.style.display = state && 'none' || 'block';
394
+ }
395
+
396
+ isLoad(false)
397
+
398
+ const urlSandbox = "https://developers.decidir.com/api/v2";
399
+ const urlProduccion = "https://live.decidir.com/api/v2";
400
+ const dataRedirect = localStorage.getItem('dataRedirect')
401
+ const dataDecidir = localStorage.getItem('dataDecidir')
402
+ && JSON.parse(localStorage.getItem('dataDecidir'))
403
+
404
+ const publicApiKey = dataDecidir?.config?.public_key
405
+ let cybersource = dataDecidir?.config?.public_cybersource && dataDecidir?.config?.public_cybersource == 'deshabilitado'
406
+ let modo = dataDecidir?.config?.public_environment || null
407
+
408
+ modo ? (modo == 'prod' ? modo = false : modo = true) : (modo = window.location.host.includes('easycommerce'))
409
+
410
+ const decidir = new Decidir(modo && modo ? urlSandbox : urlProduccion);
411
+ decidir.setPublishableKey(publicApiKey);
412
+ decidir.setTimeout(5000);
413
+
414
+
415
+ let form = document.querySelector('#formulario');
416
+
417
+ const setMessageInStore = (response) => {
418
+ if (response.hasOwnProperty('message')) {
419
+ localStorage.setItem('message', response.message)
420
+ }
421
+ if (response.hasOwnProperty('subMessage')) {
422
+ localStorage.setItem('subMessage', response.subMessage)
423
+ }
424
+ }
425
+
426
+ const sendToken = (data) => {
427
+ data['fraud_detection'] = {
428
+ "device_unique_identifier": session_id
429
+ }
430
+ data['date_of_birth'] = document.getElementById('date_of_birth').value;
431
+ // console.log('Datos para el envio: ', data)
432
+ // console.log(dataDecidir)
433
+ if (dataDecidir?.config?.public_cybersource != 'deshabilitado') {
434
+ data['address'] = {
435
+ 'name': document.getElementById('address').value,
436
+ 'number': document.getElementById('nro').value
437
+ }
438
+ data['subtotal'] = document.getElementById('total_con_interes').value
439
+ data['dues'] = document.getElementById('tipo_interes').value;
440
+ }
441
+
442
+ try {
443
+ fetch(dataRedirect, {
444
+ method: 'POST',
445
+ body: JSON.stringify(data),
446
+ headers: {
447
+ 'Content-Type': 'application/json'
448
+ }
449
+ }).then(res => res.json())
450
+ .catch(error => {
451
+ console.error('Error:', error)
452
+ processError(response)
453
+ })
454
+ .then(response => {
455
+ // console.log('Success:', response)
456
+ setMessageInStore(response)
457
+ if (response.hasOwnProperty('status')) {
458
+ if (response.status == 'approved' || response.status == 'partially_authorized') {
459
+ processResponse(response)
460
+ } else {
461
+ processError(response)
462
+ }
463
+ } else {
464
+ processError(response)
465
+ }
466
+ });
467
+ } catch (error) {
468
+ processError(response)
469
+ }
470
+ localStorage.removeItem('dataRedirect')
471
+ localStorage.removeItem('dataDecidir')
472
+ localStorage.removeItem('subtotal')
473
+ }
474
+
475
+ const sdkResponseHandler = (status, response) => {
476
+ // console.log('Respuesta: ', response)
477
+ if (status != 200 && status != 201) {
478
+ //Manejo de error: Ver Respuesta de Error
479
+ processError(response)
480
+ } else {
481
+ //Manejo de respuesta donde response = {token: "99ab0740-4ef9-4b38-bdf9-c4c963459b22"}
482
+ sendToken(response)
483
+ }
484
+ }
485
+
486
+ const sendForm = (event) => {
487
+ isLoad(true)
488
+ // console.log('Formulario: ', form)
489
+ event.preventDefault();
490
+ decidir.createToken(form, sdkResponseHandler);
491
+ return false;
492
+ }
493
+
494
+ const processError = (error) => {
495
+ // console.log("ERROR ENVIO BACK ", error);
496
+ isLoad(false)
497
+ localStorage.setItem('state', 'failure')
498
+ }
499
+
500
+ const processResponse = (response) => {
501
+ // console.log("ENVIO BACK ", response);
502
+ isLoad(false)
503
+ localStorage.setItem('state', response.status == 'approved' ? 'success' : 'partially_authorized')
504
+ }
505
+
506
+ form.addEventListener('submit', sendForm);
507
+
508
+ };
509
+
510
+
511
+ </script>
512
+ </body>
513
+
514
+ </html>