// ==UserScript== // @name Bing Rewards 自动获取刷新令牌 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 自动从Microsoft授权页面获取刷新令牌 // @author 輕🌊ꫛꫀˑꪝ(ID28507) // @icon https://account.microsoft.com/favicon.ico // @match https://login.live.com/oauth20_desktop.srf* // @match https://login.live.com/oauth20_authorize.srf* // @grant GM_setValue // @grant GM_getValue // @grant GM_notification // @grant GM_setClipboard // @run-at document-start // @homepage https://www.yaohuo.me/bbs/userinfo.aspx?touserid=28507 // @supportURL https://www.yaohuo.me/bbs/userinfo.aspx?touserid=28507 // ==/UserScript== (function() { 'use strict'; // 检查当前页面是否是授权回调页面 function checkForAuthCode() { const url = window.location.href; const urlParams = new URLSearchParams(window.location.search); // 检查是否在回调页面且包含授权码 if (url.includes('oauth20_desktop.srf') && urlParams.has('code')) { const code = urlParams.get('code'); console.log('🎯 检测到授权码:', code.substring(0, 20) + '...'); // 显示处理状态 showProcessingUI(); // 获取刷新令牌 getRefreshTokenFromCode(code); } } // 显示处理界面 function showProcessingUI() { // 创建覆盖层 const overlay = document.createElement('div'); overlay.id = 'token-overlay'; overlay.style.cssText = ` position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); z-index: 99999; display: flex; justify-content: center; align-items: center; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; `; // 创建内容容器 const container = document.createElement('div'); container.style.cssText = ` background: white; padding: 30px; border-radius: 10px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); max-width: 600px; width: 90%; text-align: center; `; container.innerHTML = `

🔧 Bing Rewards 令牌获取工具

🔄 正在获取刷新令牌...

`; // 添加旋转动画 const style = document.createElement('style'); style.textContent = ` @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } `; document.head.appendChild(style); overlay.appendChild(container); document.body.appendChild(overlay); } // 更新状态显示 function updateStatus(html) { const statusContent = document.getElementById('status-content'); if (statusContent) { statusContent.innerHTML = html; } } // 通过授权码获取刷新令牌 async function getRefreshTokenFromCode(code) { const tokenUrl = "https://login.live.com/oauth20_token.srf"; const data = new URLSearchParams({ 'client_id': '0000000040170455', 'code': code, 'grant_type': 'authorization_code', 'redirect_uri': 'https://login.live.com/oauth20_desktop.srf', 'scope': 'service::prod.rewardsplatform.microsoft.com::MBI_SSL' }); try { const response = await fetch(tokenUrl, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: data }); if (response.ok) { const tokenData = await response.json(); if (tokenData.refresh_token) { const refreshToken = tokenData.refresh_token; // 保存令牌到本地存储 GM_setValue('bing_refresh_token', refreshToken); // 复制到剪贴板 GM_setClipboard(refreshToken); // 显示成功信息 showSuccessUI(refreshToken); // 发送通知 GM_notification({ text: '✅ 刷新令牌获取成功!已复制到剪贴板', title: 'Bing Rewards', timeout: 5000 }); console.log('✅ 刷新令牌获取成功:', refreshToken); } else { throw new Error('响应中未找到refresh_token'); } } else { throw new Error(`请求失败,状态码: ${response.status}`); } } catch (error) { console.error('❌ 获取令牌失败:', error); showErrorUI(error.message); GM_notification({ text: '❌ 获取令牌失败: ' + error.message, title: 'Bing Rewards', timeout: 5000 }); } } // 显示成功界面 function showSuccessUI(refreshToken) { const maskedToken = refreshToken.substring(0, 20) + '...'; updateStatus(`

刷新令牌获取成功!

🎯 您的刷新令牌: ${maskedToken}

📋 使用说明:

`); } // 显示错误界面 function showErrorUI(errorMessage) { updateStatus(`

获取令牌失败

错误信息: ${errorMessage}

💡 解决建议:

`); } // 在授权页面添加说明 function addAuthInstructions() { if (window.location.href.includes('oauth20_authorize.srf')) { // 等待页面加载完成 setTimeout(() => { const body = document.body; if (body) { const notice = document.createElement('div'); notice.style.cssText = ` position: fixed; top: 10px; right: 10px; background: #0078d4; color: white; padding: 15px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); z-index: 10000; font-family: 'Segoe UI', sans-serif; font-size: 14px; max-width: 300px; `; notice.innerHTML = `
🔧 Bing Rewards 令牌工具
完成授权后,页面会自动跳转并获取刷新令牌
油猴脚本已激活 ✓
`; body.appendChild(notice); // 5秒后自动隐藏 setTimeout(() => { notice.style.opacity = '0'; notice.style.transition = 'opacity 0.5s'; setTimeout(() => notice.remove(), 500); }, 5000); } }, 1000); } } // 添加控制台帮助函数 window.getBingRefreshToken = function() { const token = GM_getValue('bing_refresh_token'); if (token) { console.log('🎯 当前保存的刷新令牌:', token); GM_setClipboard(token); console.log('✅ 令牌已复制到剪贴板'); return token; } else { console.log('❌ 未找到保存的刷新令牌'); return null; } }; // 页面加载时执行 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { checkForAuthCode(); addAuthInstructions(); }); } else { checkForAuthCode(); addAuthInstructions(); } // 监听URL变化(用于单页应用) let currentUrl = window.location.href; const urlObserver = new MutationObserver(() => { if (window.location.href !== currentUrl) { currentUrl = window.location.href; checkForAuthCode(); addAuthInstructions(); } }); urlObserver.observe(document.body, { childList: true, subtree: true }); console.log('🔧 Bing Rewards 自动获取刷新令牌脚本已加载'); console.log('💡 使用 getBingRefreshToken() 函数可以获取已保存的令牌'); })();