import wx from 'jweixin-module'; import { wechatApi } from '@/api/index.js'; /** * 微信 JS-SDK 初始化和扫码功能封装 */ class WeChatScanService { constructor() { this.isWxReady = false; this.config = { debug: true, // 开发环境设置为 true 便于调试 jsApiList: ['scanQRCode'] }; } /** * 初始化微信 JS-SDK */ async initWxSDK() { try { console.log('[WxSDK] 开始初始化...'); // 获取当前页面 URL (去掉 hash 部分) const currentUrl = window.location.href.split('#')[0]; console.log('[WxSDK] 当前URL:', currentUrl); // 调用后端接口获取签名 const signatureData = await wechatApi.getJssdkConfig(currentUrl); console.log('[WxSDK] 获取到签名配置:', signatureData); return new Promise((resolve, reject) => { wx.config({ debug: this.config.debug, appId: signatureData.app_id, timestamp: signatureData.timestamp, nonceStr: signatureData.nonce_str, signature: signatureData.signature, jsApiList: this.config.jsApiList }); wx.ready(() => { console.log('[WxSDK] 初始化成功'); this.isWxReady = true; resolve({ success: true }); }); wx.error((res) => { console.error('[WxSDK] 初始化失败:', res); this.isWxReady = false; reject({ success: false, error: res.errMsg || '微信配置失败' }); }); }); } catch (e) { console.error('[WxSDK] 初始化异常:', e); return { success: false, error: e.message || '初始化失败' }; } } /** * 调用微信扫一扫功能 */ async scanQRCode(options = {}) { return new Promise((resolve, reject) => { if (!this.isWxReady) { reject({ success: false, error: '微信 JS-SDK 未就绪,请先初始化' }); return; } const defaultOptions = { needResult: 1, scanType: ['qrCode', 'barCode'] }; const scanOptions = { ...defaultOptions, ...options }; wx.scanQRCode({ needResult: scanOptions.needResult, scanType: scanOptions.scanType, success: (res) => { console.log('[WxSDK] 扫码成功:', res); resolve({ success: true, result: res.resultStr || res.result, data: res }); }, fail: (err) => { console.error('[WxSDK] 扫码失败:', err); reject({ success: false, error: err, message: '扫码失败,请重试' }); } }); }); } /** * 检查是否在微信环境中 */ isInWechat() { return /micromessenger/i.test(navigator.userAgent); } } // 导出单例 export default new WeChatScanService();