// API Object var oAPI = oAPI || {}; oAPI.k4 = '74183bfc'; oAPI.k2 = 'cc399d4a'; oAPI.k3 = 'c204f283'; oAPI.k1 = 'a5332a5e'; var isMobile = { Android: function() {return navigator.userAgent.match(/Android/i); }, BlackBerry: function() {return navigator.userAgent.match(/BlackBerry/i); }, iOS: function() {return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, Opera: function() {return navigator.userAgent.match(/Opera Mini/i); }, Windows: function() {return navigator.userAgent.match(/IEMobile/i); }, any: function() {return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); } }; oAPI.LoadPage = function ( url, callback ) { $.ajax({ url: url, crossDomain: true, async: true, type:"POST", dataType: 'html', xhrFields: { withCredentials: true }, success: function(html) { // console.log( 'LoadPage:' + html ); if( typeof callback === 'function' ) callback( html ); } }); }; oAPI.LoadPage2 = function ( url, data, callback ){ $.ajax({ url: url, crossDomain: true, async: true, type:"POST", dataType: 'html', data: data, xhrFields: { withCredentials: true }, success: function(html) { // console.log( 'LoadPage:' + html ); if( typeof callback === 'function' ) callback( html ); }, cache: false }); }; oAPI.SendEncAPI = function ( url, data_object ) { // console.log( 'oAPI.SendEncAPI' ); var c_key = oAPI.k1 + oAPI.k2 + oAPI.k3 + oAPI.k4; var key = CryptoJS.enc.Utf8.parse( c_key ); var iv = CryptoJS.enc.Utf8.parse( oAPI.k3 + oAPI.k4 ); var json_data = JSON.stringify( data_object ); var encrypted = CryptoJS.AES.encrypt( json_data, key, { iv:iv, mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var enc_data = encrypted.toString(); var oRet = {result:false, desc:''}; $.ajax({ url: url, crossDomain: true, async: false, type:"POST", dataType: 'json', data: { data: enc_data }, xhrFields: { withCredentials: true }, success: function(ret) { try { bOK = ret.result; oRet = ret; on_success( oRet ); } catch(e ) { oRet.desc = e; } }, error: function( jqXHR, textStatus, errorThrown ) { oRet.desc = data_object.cmd + '-' + textStatus + ':' + errorThrown; console.log( oRet.desc ); } }); return oRet; } oAPI.SendEncAPIAsync = function ( url, data_object, callback ) { var dfd = new $.Deferred(); var c_key = oAPI.k1 + oAPI.k2 + oAPI.k3 + oAPI.k4; var key = CryptoJS.enc.Utf8.parse( c_key ); var iv = CryptoJS.enc.Utf8.parse( oAPI.k3 + oAPI.k4 ); var json_data = JSON.stringify( data_object ); var encrypted = CryptoJS.AES.encrypt( json_data, key, { iv:iv, mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var enc_data = encrypted.toString(); var oRet = {result:false, desc:''}; $.ajax({ url: url, crossDomain: true, async: true, type:"POST", dataType: 'json', data: { data: enc_data }, xhrFields: { withCredentials: true }, success: function(ret) { try { bOK = ret.result; oRet = ret; } catch(e ) { oRet.desc = e; }; if( typeof callback === 'function' ) { // console.log( 'oAPI.SendEncAPIAsync call ' + data_object.cmd + ' callback(success)'); callback( oRet ); } }, error: function( jqXHR, textStatus, errorThrown ) { oRet.desc = data_object.cmd + '-' + textStatus + ':' + errorThrown; console.log( oRet.desc ); if( typeof callback === 'function' ) { // console.log( 'oAPI.SendEncAPIAsync call ' + data_object.cmd + ' callback(fail)'); callback( oRet ); } } }); } oAPI.SendEncAPISync = function ( url, data_object, callback ) { var dfd = new $.Deferred(); var c_key = oAPI.k1 + oAPI.k2 + oAPI.k3 + oAPI.k4; var key = CryptoJS.enc.Utf8.parse( c_key ); var iv = CryptoJS.enc.Utf8.parse( oAPI.k3 + oAPI.k4 ); var json_data = JSON.stringify( data_object ); var encrypted = CryptoJS.AES.encrypt( json_data, key, { iv:iv, mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var enc_data = encrypted.toString(); var oRet = {result:false, desc:''}; $.ajax({ url: url, crossDomain: true, async: false, type:"POST", dataType: 'json', data: { data: enc_data }, xhrFields: { withCredentials: true }, success: function(ret) { try { bOK = ret.result; oRet = ret; } catch(e ) { oRet.desc = e; }; if( typeof callback === 'function' ) { // console.log( 'oAPI.SendEncAPIAsync call ' + data_object.cmd + ' callback(success)'); callback( oRet ); } }, error: function( jqXHR, textStatus, errorThrown ) { oRet.desc = data_object.cmd + '-' + textStatus + ':' + errorThrown; console.log( oRet.desc ); if( typeof callback === 'function' ) { // console.log( 'oAPI.SendEncAPIAsync call ' + data_object.cmd + ' callback(fail)'); callback( oRet ); } } }); } oAPI.DecryptData = function ( enc ) { var c_key = oAPI.k1 + oAPI.k2 + oAPI.k3 + oAPI.k4; var key = CryptoJS.enc.Utf8.parse( c_key ); var iv = CryptoJS.enc.Utf8.parse( oAPI.k3 + oAPI.k4 ); var decrypted = CryptoJS.AES.decrypt( enc, key, {iv: iv, mode:CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var plaintext = decrypted.toString( CryptoJS.enc.Utf8 ).trim(); return plaintext; } function qs2param( url ) { var re = /([^&=]+)=?([^&]*)/g; var decodeRE = /\+/g; // Regex for replacing addition symbol with a space var decode = function (str) {return decodeURIComponent( str.replace(decodeRE, " ") );}; var uparts = url.split('?'); var ret = {url:''}; var params = {}, e; if( uparts.length <= 1 ) { ret['url'] = url; } else { ret['url'] = uparts[0]; while ( e = re.exec(uparts[1]) ) { var k = decode( e[1] ), v = decode( e[2] ); if (k.substring(k.length - 2) === '[]') { k = k.substring(0, k.length - 2); (params[k] || (params[k] = [])).push(v); } else params[k] = v; } } ret['params'] = params; return ret; } var C_APP_ID = 'tw.com.347.info'; var C_DEV_ID = 'ee78233048218045041860e77550a225'; function load_api() { if(window.load_api_config && $.isArray( load_api_config ) ){ if( load_api_config.length > 0 ){ var load_api_data = load_api_config.shift(); var api = qs2param( load_api_data.js ); if( api.url != '' ){ if( typeof api.params['app_id'] === 'undefined' ) api.params['app_id'] = C_APP_ID; if( typeof api.params['dev_id'] === 'undefined' ) api.params['dev_id'] = C_DEV_ID; var new_url = api['url'] + '?' + $.param( api.params ); $.getScript( new_url, function(){ if( $.isFunction(load_api_data.onload) ){ load_api_data.onload(); } load_api(); }); } } } } // User Object var oUser = oUser || {}; var user_onload = []; oUser.set_onload = function ( f ){ user_onload.push( f ); }; $(function(){ $.getScript( "https://info.347.com.tw/lib/js/CryptoJS/rollups/aes.js", function() { $.getScript( "https://info.347.com.tw/lib/js/CryptoJS/rollups/pbkdf2.js", function() { $.getScript( "https://info.347.com.tw/lib/js/CryptoJS/components/pad-zeropadding-min.js", function() { $.getScript( "https://info.347.com.tw/lib/js/CryptoJS/components/enc-base64-min.js", function() { $.getScript( "https://info.347.com.tw/api/v0.7/user_js.php?app_id=tw.com.347.info&dev_id=ee78233048218045041860e77550a225", function() { oUser.dev_id = 'ee78233048218045041860e77550a225'; oUser.get_status( function (oRet) { if ($.isArray(user_onload)) { $( user_onload ).each(function( i, callback ) { callback(); }); } load_api(); }); } ); } ); } ); } ); } ); });