微信mac版歷史版完整代碼示例與使用方法

微信是一款廣受歡迎的即時通訊軟件,為了方便用戶在Mac電腦上也能使用微信,微信團隊推出了Mac版微信。本文將主要講解微信mac版歷史版的完整代碼示例以及使用方法。

一、下載微信mac版歷史版

在官網上下載微信mac版,我們可以得到一個.dmg的安裝文件。打開文件並進行安裝後,我們就可以使用微信了。

二、連接微信API接口

要想使用微信API接口,我們首先需要在微信公眾平台進行開發者認證,獲取相應的接口權限。認證過後,在接口權限中可以獲取到一組WebSocket鏈接地址。我們需要使用WebSocket連接到該地址,使用socket.io庫來進行連接。

接下來是連接代碼示例:

const io = require('socket.io-client');
const WebSocket = require('ws');
const uuid = require('uuid');
const Qrterminal = require('qrcode-terminal');
const md5 = require('md5');

const API = 'wss://web.wechat.com'

let ioInst = null;
let connectFlag = false;
let uuidKey;

let ws;

function startWechat() {
    ws.on('open', () => {
        console.log('webSocket connect success')
        connectFlag = true;
        ioInst = io(API, {transports: ['websocket']});
        ioInst.on('connect', () => {
            console.log('socket io connect success')
        })
        ioInst.on('disconnect', () => {
            console.log('socket io disconnect')
        })
    })
    ws.on('message', (data) => {
        if (data.indexOf('wx2.qq.com/cgi-bin/mmwebwx-bin/webwxpushloginurl') > 0) {
          console.log('uuid getted:', data)
          uuidKey = data.match(/uuid=.+/)[0]
          Qrterminal.generate(API + '/qrcode/' + uuidKey.slice(5));
        } else if (data.indexOf('window.code=') === 0) {
            const code = +data.match(/window.code=(\d+);/)[1]
            switch (code) {
                case 201: {
                    console.log('scan success,請在手機上確認登錄')
                    break;
                }
                case 200: {
                    console.log('login success')
                    const currentUserName = data.match(/(.*?)<\/skey>/)[1]
                    break;
                }
                case 408: {
                    console.log('login timeout')
                    break;
                }
                default:
                    break;
            }
        }
    })
    ws.on('close', () => {
        console.log('webSocket disconnect')
        ioInst && ioInst.disconnect()
        connectFlag = false;
    })
    ws.on('error', (err) => {
        console.log('webSocket error', err)
    })
}

function startWebSocket() {
    return new Promise((resolve, reject) => {
        ws = new WebSocket('wss://webpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck')

        ws.on('error', (e) => {
            console.log('webSocket error', e);
            reject(-1);
        });

        ws.on('open', () => {
            console.log('webSocket connect success');
            resolve(0);
        });

        ws.on('message', (data) => {
            console.log(`webSocket receive message: ${data}`);
        });

        ws.on('close', () => {
            console.log('webSocket disconnect');
        });
    });
}

function uuidFunction() {
    return new Promise((resolve, reject) => {
        if (connectFlag) {
            const clientMsgId = Date.now() * 1000 + Math.floor(Math.random() * 1000 + 1);
            const data = {
                "BaseRequest": {
                    "Uin": "",
                    "Sid": "",
                    "Skey": "",
                    "DeviceID": "e225488245189445"
                },
                "Code": 3,
                "FromUserName": "",
                "ToUserName": "",
                "ClientMsgId": clientMsgId.toString()
            }
            ioInst.emit('newlogin', data, (response) => {
                uuidKey = response.baseResponse.redirectUrl.split('uuid=')[1]
                console.log(`wxuuid: ${uuidKey}`);
                startWebSocket().then(() => {
                    check();
                });
            })
            setTimeout(() => {
                reject('timeout')
            }, 30000)
        } else {
            reject('connectFlag is false')
        }
    })
}

function check() {
    setInterval(() => {
        if (connectFlag) {
            ws.send('2')
        } else {
            console.log('check error:connectFlag is false')
            clearInterval()
        }
    }, 5000)
}

startWebSocket().then(() => {
    console.log('webSocket connect success');
    startWechat();
    uuidFunction();
});

三、發送文本消息

與服務器的WebSocket連接成功後,我們就可以發送文本消息給其他微信用戶或者群組了。發送文本消息需要以下幾個步驟:

  • 獲取消息發送的toUserName和LocalID
  • 構建消息體
  • 將消息體發送給服務器

下面是發送文本消息的代碼示例:

const toUserName = '@XXXXX';
const localID = Date.now().toString() + Math.random().toString().slice(2, 7);

const text = {
    Type: 1,
    Content: '你好,世界!',
    FromUserName: '你的微信號',
    ToUserName: toUserName,
    LocalID: localID,
    ClientMsgId: localID
};

ioInst.emit('message', text, (response) => {
    console.log(response);
});

四、小標題4

其他的功能也均可以通過WebSocket與服務器進行交互來實現。

五、總結

本文主要講解了在Mac電腦上使用微信的方法以及微信API接口的使用。同時,也展示了一些基本的代碼示例,供大家參考使用。

原創文章,作者:TGZTY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374528.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TGZTY的頭像TGZTY
上一篇 2025-04-28 13:17
下一篇 2025-04-28 13:17

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件並生成完整的圖像

    OBJ格式是一種用於表示3D對象的標準格式,通常由一組頂點、面和紋理映射坐標組成。在本文中,我們將討論如何將多個OBJ文件拼接在一起,生成一個完整的3D模型。 一、讀取OBJ文件 …

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29

發表回復

登錄後才能評論