51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* channel.weixin — WeChat login via box-side WeChat SDK.
|
|
*
|
|
* method: login
|
|
* params : { callId, timeout, emit }
|
|
* returns: abort function (called on cancel)
|
|
*
|
|
* emit(msg) sends a sys-call reply back to VPS:
|
|
* action:'event', event:'qrcode', data:{ url, expire, index }
|
|
* action:'progress', event:'scanned', data:{ status:'waiting_confirm' }
|
|
* action:'finish', event:'success', data:{ wxid }
|
|
* action:'finish', event:'failed', code, message
|
|
*
|
|
* TODO: integrate with a concrete WeChat SDK (wechaty / itchat / custom binary).
|
|
*/
|
|
|
|
const log = require('../logger');
|
|
|
|
function login({ callId, timeout = 180, emit }) {
|
|
log.info('weixin', `login requested callId=${callId} timeout=${timeout}`);
|
|
|
|
// TODO: start WeChat SDK, get QR code, watch for scan / confirm / expire
|
|
// Example skeleton:
|
|
//
|
|
// const bot = startWechatyBot();
|
|
//
|
|
// bot.on('scan', (url, status) => {
|
|
// emit({ action: 'event', event: 'qrcode', data: { url, expire: 30, index: ++qrIndex } });
|
|
// });
|
|
// bot.on('login', (user) => {
|
|
// emit({ action: 'finish', event: 'success', data: { wxid: user.id } });
|
|
// });
|
|
// bot.on('error', (err) => {
|
|
// emit({ action: 'finish', event: 'failed', code: 1001, message: err.message });
|
|
// });
|
|
// bot.start();
|
|
//
|
|
// return () => bot.stop(); // ← abort function
|
|
|
|
// Temporary stub: immediately report not implemented
|
|
emit({ action: 'finish', event: 'failed', code: 501, message: 'weixin SDK not implemented' });
|
|
|
|
return () => {
|
|
log.info('weixin', `login cancelled callId=${callId}`);
|
|
};
|
|
}
|
|
|
|
module.exports = { login };
|