PageSourceSearch

https://xn--80aaafbbryjke4bzamdacdt2p6c.xn--p1ai/web/java/ipay.js

js xn--80aaafbbryjke4bzamdacdt2p6c.xn--p1ai collected 2026-10-07 00:57:05 UTC 9,578 bytes, 256 lines download raw bytes

1(function () {
2  var defaults = {
3    api_token: 'MERCHANT_TOKEN', // public test token
4    language: 'en',
5    classNamePreloader: 'payment-preloader',
6    preloadBorderColor: '#13a024'  // Устанавливает цвет прелоадера. Пишется в HEX-формате.
7  };
8
9  var options = {};
10  
11  
12  this.IPAY = function() {
13
14    if (arguments[0] && typeof arguments[0] === "object") {
15      options = extendDefaults(defaults, arguments[0]);
16    }
17
18    function extendDefaults(source, properties) {
19      var property;
20      for (property in properties) {
21        if (properties.hasOwnProperty(property)) {
22          source[property] = properties[property];
23        }
24      }
25      return source;
26    }
27
28
29    //document.addEventListener("DOMContentLoaded", createPreloader);
30  };
31  
32
33  this.ipayCheckout = function(mylink, bgmsg, successCallback, failureCallback) {
34
35	 function createPreloader(bgmsg) {
36		 
37      var preloadBlock = document.createElement('div'),
38          preloader = document.createElement('div'),
39          style = document.createElement('style'),
40          keyFrames = '\
41                      @-webkit-keyframes load8 {\
42                          0% {\
43                              -webkit-transform: rotate(0deg);\
44                              transform: rotate(0deg);\
45                          }\
46                          100% {\
47                              -webkit-transform: rotate(360deg);\
48                              transform: rotate(360deg);\
49                          }\
50                      }\
51                      @keyframes load8 {\
52                           0% {\
53                                -webkit-transform: rotate(0deg);\
54                                transform: rotate(0deg);\
55                           }\
56                          100% {\
57                                -webkit-transform: rotate(360deg);\
58                                transform: rotate(360deg);\
59                          }\
60                      }';
61
62      preloadBlock.style.cssText = "position: fixed; \
63                                    height: 100%;\
64                                    left: 0; \
65                                    top: 0; \
66                                    width: 100%; \
67                                    background-color: rgba(27, 27, 27, 0.3); \
68                                    z-index: 100; \
69                                    display: none; \
70                                    ";
71      
72      preloader.style.cssText    =  "margin: auto; \
73                                     top: 0; \
74                                     bottom: 0; \
75                                     left: 0; \
76                                     right: 0; \
77                                     border-radius: 50%; \
78                                     width: 9em; \
79                                     height: 9em; \
80                                     font-size: 8px; \
81                                     position: absolute; \
82                                     text-indent: -9999em; \
83                                     border-top: 1.1em solid #fff; \
84                                     border-right: 1.1em solid #fff; \
85                                     border-bottom: 1.1em solid #fff; \
86                                     border-left-width: 1.1em; \
87                                     border-left-style: solid;\
88                                     transform: translateZ(0); \
89                                     -webkit-animation: load8 1s infinite linear;\
90                                     animation: load8 1s infinite linear;\
91                                     ";
92      
93      preloader.style.borderLeftColor = options.preloadBorderColor;
94
95      style.innerHTML = keyFrames;
96      document.querySelector('head').appendChild(style);
97      
98      preloadBlock.className = options.classNamePreloader;
99      
100	  $('body').html(bgmsg);
101		
102      preloadBlock.appendChild(preloader);
103      document.body.appendChild(preloadBlock);
104      return preloadBlock;
105    }
106	
107    function createIframe(mylink) {
108      var iframe       = document.createElement('iframe'),
109          iframeStyle  = iframe.style,
110          //orderStr     = JSON.stringify(order),
111          scrollLeft   = window.pageXOffset,
112          scrollTop    = window.pageYOffset + 'px',
113          scrollHeight = document.body.scrollHeight;
114
115      iframeStyle.position  = 'absolute';
116      iframeStyle.width     = '100%';
117      iframeStyle.height    = '100%';
118      iframeStyle.display   = 'block';
119      iframeStyle.border    = '0px';
120      iframeStyle.top       = '0px';
121      iframeStyle.left      = scrollLeft + 'px';
122      iframeStyle.overflowX = 'hidden';
123      iframeStyle.overflowY = 'scroll';
124      iframeStyle.zIndex    = '10000';
125      iframe.id             = options.api_token;
126		iframe.src            = mylink+'&modal=true';
127	 /*iframe.src            = 'https://3dsec.sberbank.ru/demopayment/docsite/payform-1.html?token='
128                            + options.api_token
129                            + '&modal=true&order='
130                            + orderStr;*/
131
132      iframe.setAttribute('allowfullscreen', ''); // на будущее, разрешение полноэкранного режима айфрейма
133      iframe.setAttribute('data-offset', scrollTop);
134
135      document.body.insertBefore(iframe, document.body.firstChild);
136
137      return iframe;
138    }
139
140    
141
142    function gotEvent(e) {
143      var data = e.data, 
144          offset = parseInt(iframe.getAttribute('data-offset')) || window.pageYOffset,
145          preloader = document.querySelector('.' + options.classNamePreloader),
146          scroll = {
147            offset: offset
148          };
149      //var logfunc = ajax_asynq("/myservice/project/log",function(){},function(){},"edata="+JSON.stringify(e.data)+"&order="+successCallback.toString()); return;
150      // Fix chrome bug
151      if (typeof e.data === 'string') {
152    	  try{
153    		  data = JSON.parse(e.data);
154    	  }
155    	  catch { ajax_asynq("/myservice/project/sber",function(){},function(){},"err=JSON_ERR&edata="+JSON.stringify(e.data)+"&order="+successCallback.toString()); return;}
156      }
157    	  
158      if (!('type' in data)) {
159    	  ajax_asynq("/myservice/project/sber",function(){},function(){},"err=TYPE_ERR&edata="+JSON.stringify(e.data)+"&order="+successCallback.toString());
160    	  return;
161      }
162      switch (data.type) {
163        case 'LOADED':
164          // Содержимое iframe загрузилось
165          if (data) {
166            scroll = JSON.stringify(scroll);
167            window.scrollTo(0, parseInt(offset));
168            /**
169             * Отсчитываем скролл сверху и передаём эту цифру в iframe
170             */
171            document.getElementById(options.api_token).contentWindow.postMessage(scroll, '*'); 
172            preloader.style.display = 'none'; //убираем прелоадер
173          }
174          break;
175
176        case 'ACS':
177          if (data) {
178            iframe.style.backgroundColor = '#fff';
179            window.scrollTo(0, 0);
180          }
181          break;
182
183        case 'APPROVE':
184          iframe.style.backgroundColor = 'transparent';
185          window.scrollTo(0, offset);
186          successCallback(data.data);
187          window.removeEventListener('message', gotEvent);
188          break;
189
190        case 'DECLINE':
191          iframe.style.backgroundColor = 'transparent';
192          window.scrollTo(0, offset);
193          failureCallback(data.data);
194          window.removeEventListener('message', gotEvent);
195          break;
196
197        case 'CLOSE':
198          window.removeEventListener('message', gotEvent);
199          break;
200
201        default:
202        	ajax_asynq("/myservice/project/sber",function(){},function(){},"err=APPROVE_ERR&edata="+JSON.stringify(e.data)+"&order="+successCallback.toString());
203          console.warn('Incorrect iframe message');
204      }
205    }
206	
207	function closeModal(e) {
208      var data   = e.data;
209      if (typeof e.data === 'string') {
210        data = JSON.parse(e.data);
211      }
212      if (!('type' in data)) {
213        return;
214      }
215      if (data.type === 'CLOSE') {
216        document.body.removeChild(iframe);       //По кнопке закрытия удаляем айфрейм из DOM-дерева
217        document.body.getAttribute('style');
218        document.body.removeAttribute('style');   //и разблокировываем исходную страницу
219        window.removeEventListener('message', closeModal);
220		location.href = getCookie("refdomain") + "/me/data";
221      }
222    }
223	createPreloader(bgmsg);
224    var preloader = document.querySelector('.' + options.classNamePreloader);
225	var sberbank_link = mylink;
226	createIframe(sberbank_link);// Создаем iframe в DOM-дереве
227	var iframe = document.querySelector('iframe');
228	preloader.style.display = 'block'; // Показываем прелоадер перед монтированием айфрейма
229	window.addEventListener('message', gotEvent);
230	
231	window.addEventListener('message', closeModal);
232	
233
234	
235
236     
237    
238   
239  };
240})();
241
242
243//выцепить id заказа из url
244function getOrderId(name, url) {
245    if (!url) url = window.location.href;
246    name = name.replace(/[\[\]]/g, "\\$&");
247    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
248        results = regex.exec(url);
249    if (!results) return null;
250    if (!results[2]) return '';
251    return decodeURIComponent(results[2].replace(/\+/g, " "));
252}
253
254var ipay = new IPAY({
255api_token : "api_token"
256});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.