// Node 脚本:生成带 storeId 的小程序 URL Link(可指定体验版) // 优点:可直接分享为链接或转成二维码,支持 env_version // 用法(Windows PowerShell): // $env:WX_APPID="wxbb048b80cd2a14b9"; $env:WX_SECRET="<你的AppSecret>"; node server/generate-url-link.js const https = require('https'); const APPID = process.env.WX_APPID || 'wxbb048b80cd2a14b9'; const SECRET = process.env.WX_SECRET; // 必须提供 AppSecret const STORE_ID = 'ARhMGM5Y1W'; const PATH = 'nova-pbf/pages/index/index'; const QUERY = `storeId=${STORE_ID}`; const ENV_VERSION = 'trial'; // 可选: 'develop' | 'trial' | 'release' function httpGetJson(url) { return new Promise((resolve, reject) => { https .get(url, (res) => { let data = ''; res.on('data', (chunk) => (data += chunk)); res.on('end', () => { try { const json = JSON.parse(data); resolve(json); } catch (e) { reject(e); } }); }) .on('error', reject); }); } function httpPostJson(url, bodyObj) { const body = JSON.stringify(bodyObj); return new Promise((resolve, reject) => { const req = https.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body), }, }); let data = ''; req.on('response', (res) => { res.on('data', (chunk) => (data += chunk)); res.on('end', () => { try { const json = JSON.parse(data); resolve(json); } catch (e) { reject(e); } }); }); req.on('error', reject); req.write(body); req.end(); }); } async function main() { if (!SECRET) { console.error('❌ 未提供 WX_SECRET(AppSecret)。请设置环境变量后重试。'); process.exit(1); } console.log('🔑 获取 access_token...'); const tokenResp = await httpGetJson( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${SECRET}` ); if (!tokenResp.access_token) { console.error('❌ 获取 access_token 失败:', tokenResp); process.exit(1); } const accessToken = tokenResp.access_token; console.log('✅ access_token 获取成功'); console.log('🔗 生成 URL Link...'); const apiUrl = `https://api.weixin.qq.com/wxa/generate_urllink?access_token=${accessToken}`; const payload = { path: PATH, query: QUERY, env_version: ENV_VERSION, is_expire: false, }; const resp = await httpPostJson(apiUrl, payload); if (!resp.url_link) { console.error('❌ 生成 URL Link 失败:', resp); process.exit(1); } console.log('✅ URL Link 生成成功:'); console.log(resp.url_link); console.log('📌 打开该链接即可跳转到小程序(环境:', ENV_VERSION, '),并携带 query:', QUERY); } main().catch((e) => { console.error('程序异常:', e); process.exit(1); });