var axios = require('axios'); var qs = require('qs'); function TDEncrypt(l) { l = JSON.stringify(l); l = encodeURIComponent(l); var k = '', f = 0; do { var h = l.charCodeAt(f++); var d = l.charCodeAt(f++); var a = l.charCodeAt(f++); var b = h >> 2; h = ((h & 3) << 4) | (d >> 4); var e = ((d & 15) << 2) | (a >> 6); var c = a & 63; isNaN(d) ? (e = c = 64) : isNaN(a) && (c = 64); k = k + '23IL 0) { inputUrl = inputUrl.substring(0, queryIndex); } d = inputUrl.substring(l.length); } catch (error) { console.error('Error parsing URL:', error); } return d; } async function getJsToken( userAgent = 'jdapp;android;11.2.8;;;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36', url = 'https://plus.m.jd.com/', bizId = 'JD-PLUS', ) { const d = TDEncrypt({ ts: { deviceTime: Date.now(), deviceEndTime: Date.now() + 10 }, ca: { tdHash: '5b7096a993d442aef38ceb90cce4b485', contextName: 'webgl,experimental-webgl', webglversion: 'WebGL 1.0 (OpenGL ES 2.0 Chromium)', shadingLV: 'WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium)', vendor: 'WebKit', renderer: 'WebKit WebGL', extensions: [ 'ANGLE_instanced_arrays', 'EXT_blend_minmax', 'EXT_clip_control', 'EXT_color_buffer_half_float', 'EXT_depth_clamp', 'EXT_disjoint_timer_query', 'EXT_float_blend', 'EXT_frag_depth', 'EXT_polygon_offset_clamp', 'EXT_shader_texture_lod', 'EXT_texture_compression_bptc', 'EXT_texture_compression_rgtc', 'EXT_texture_filter_anisotropic', 'EXT_texture_mirror_clamp_to_edge', 'EXT_sRGB', 'KHR_parallel_shader_compile', 'OES_element_index_uint', 'OES_fbo_render_mipmap', 'OES_standard_derivatives', 'OES_texture_float', 'OES_texture_float_linear', 'OES_texture_half_float', 'OES_texture_half_float_linear', 'OES_vertex_array_object', 'WEBGL_blend_func_extended', 'WEBGL_color_buffer_float', 'WEBGL_compressed_texture_s3tc', 'WEBGL_compressed_texture_s3tc_srgb', 'WEBGL_debug_renderer_info', 'WEBGL_debug_shaders', 'WEBGL_depth_texture', 'WEBGL_draw_buffers', 'WEBGL_lose_context', 'WEBGL_multi_draw', 'WEBGL_polygon_mode', ], wuv: 'Google Inc. (Intel)', wur: 'ANGLE (Intel, Intel(R) UHD Graphics 730 (0x00004C8B) Direct3D11 vs_5_0 ps_5_0, D3D11)', }, m: { compatMode: 'CSS1Compat' }, n: { vendorSub: '', productSub: '20030107', vendor: 'Google Inc.', maxTouchPoints: 1, pdfViewerEnabled: false, hardwareConcurrency: 12, cookieEnabled: true, appCodeName: 'Mozilla', appName: 'Netscape', appVersion: getAppVersionFromUserAgent(userAgent), platform: 'Win32', product: 'Gecko', userAgent: userAgent, language: 'zh-CN', onLine: true, webdriver: false, javaEnabled: false, deprecatedRunAdAuctionEnforcesKAnonymity: true, deviceMemory: 8, enumerationOrder: [ 'vendorSub', 'productSub', 'vendor', 'maxTouchPoints', 'scheduling', 'userActivation', 'doNotTrack', 'geolocation', 'connection', 'plugins', 'mimeTypes', 'pdfViewerEnabled', 'webkitTemporaryStorage', 'webkitPersistentStorage', 'windowControlsOverlay', 'hardwareConcurrency', 'cookieEnabled', 'appCodeName', 'appName', 'appVersion', 'platform', 'product', 'userAgent', 'language', 'languages', 'onLine', 'webdriver', 'getGamepads', 'javaEnabled', 'sendBeacon', 'vibrate', 'deprecatedRunAdAuctionEnforcesKAnonymity', 'protectedAudience', 'bluetooth', 'storageBuckets', 'clipboard', 'credentials', 'keyboard', 'managed', 'mediaDevices', 'storage', 'serviceWorker', 'virtualKeyboard', 'wakeLock', 'deviceMemory', 'userAgentData', 'login', 'ink', 'mediaCapabilities', 'hid', 'locks', 'gpu', 'mediaSession', 'permissions', 'presentation', 'usb', 'xr', 'serial', 'adAuctionComponents', 'runAdAuction', 'canLoadAdAuctionFencedFrame', 'canShare', 'share', 'clearAppBadge', 'getBattery', 'getUserMedia', 'requestMIDIAccess', 'requestMediaKeySystemAccess', 'setAppBadge', 'webkitGetUserMedia', 'clearOriginJoinedAdInterestGroups', 'createAuctionNonce', 'joinAdInterestGroup', 'leaveAdInterestGroup', 'updateAdInterestGroups', 'deprecatedReplaceInURN', 'deprecatedURNToURL', 'getInstalledRelatedApps', 'registerProtocolHandler', 'unregisterProtocolHandler', ], }, p: [], w: { devicePixelRatio: 4, screenTop: 0, screenLeft: 0 }, s: { availHeight: 740, availWidth: 360, colorDepth: 24, height: 740, width: 360, pixelDepth: 24 }, sc: { ActiveBorder: 'rgb(0, 0, 0)', ActiveCaption: 'rgb(0, 0, 0)', AppWorkspace: 'rgb(255, 255, 255)', Background: 'rgb(255, 255, 255)', ButtonFace: 'rgb(240, 240, 240)', ButtonHighlight: 'rgb(240, 240, 240)', ButtonShadow: 'rgb(240, 240, 240)', ButtonText: 'rgb(0, 0, 0)', CaptionText: 'rgb(0, 0, 0)', GrayText: 'rgb(109, 109, 109)', Highlight: 'rgba(0, 86, 205, 0.8)', HighlightText: 'rgb(255, 255, 255)', InactiveBorder: 'rgb(0, 0, 0)', InactiveCaption: 'rgb(255, 255, 255)', InactiveCaptionText: 'rgb(128, 128, 128)', InfoBackground: 'rgb(255, 255, 255)', InfoText: 'rgb(0, 0, 0)', Menu: 'rgb(255, 255, 255)', MenuText: 'rgb(0, 0, 0)', Scrollbar: 'rgb(255, 255, 255)', ThreeDDarkShadow: 'rgb(0, 0, 0)', ThreeDFace: 'rgb(240, 240, 240)', ThreeDHighlight: 'rgb(0, 0, 0)', ThreeDLightShadow: 'rgb(0, 0, 0)', ThreeDShadow: 'rgb(0, 0, 0)', Window: 'rgb(255, 255, 255)', WindowFrame: 'rgb(0, 0, 0)', WindowText: 'rgb(0, 0, 0)', }, ss: { cookie: true, localStorage: true, sessionStorage: true, globalStorage: false, indexedDB: true }, tz: -480, lil: '', wil: '', }); const a = TDEncrypt({ pin: '', oid: '', bizId: bizId, fc: '', mode: 'strict', p: 's', fp: 'b772d9635edebaa1a47c5a1fd086186a', ctype: 1, v: '3.2.1.0', f: '3', o: getCurrentPageUrl(url), qs: '', qi: '', }); let { status, data } = await axios({ method: 'POST', url: `https://jra.jd.com/jsTk.do?a=${encodeURIComponent(a)}`, headers: { 'User-Agent': userAgent, 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8', }, data: qs.stringify({ d: d, }), }); if (status === 200 && data.data) { return data.data; } else return null; } module.exports.getJsToken = getJsToken;