node实现微信扫码群发消息《附上github代码》
本篇文章就是为大家介绍一下我是如何用node去实现扫码群发功能,源代码地址在最后面
获取登录二维码 -> 扫码登录服务端

首先介绍一下主要流程,并附上关键代码
1.获取UUID并请求二维码图片
调用接口:https://login.wx.qq.com/jslogin
返回数据:code为200表示成功,并返回uuid


function getUUID(){
var hreq = https.get('https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1508239448402',function(ress){
ress.setEncoding('utf-8');
var str = '';
ress.on('end',function(){
var regxp = new RegExp(/^""$/)
var uuid = str.split('"')[1];
console.log('uuid=='+uuid)
var img = '<img src="https://login.weixin.qq.com/qrcode/'+uuid + '"/>'
res.send(img)
getTicket(uuid)
});
ress.on('data',function(chunk){
str+=chunk;
});
});
}
2,通过uuid轮训获取ticket
调用接口:https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login
如果返回code是200,表示用户扫码,返回的信息redirect_uri中有登录微信用的ticket等信息
function getTicket(uuid){
var hreq = https.get('https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid='+uuid+'&tip=0&r=-880061546&_='+Date.now(),function(ress){
ress.setEncoding('utf-8');
var str = '';
ress.on('end',function(){
console.log('请求ticket。。。。。。');
console.log(str);
var code = str.split(';')[0].split('=')[1];
console.log('code='+code);
if(code == 200){
if(str.match(/wx2.qq.com/) != null) {
wx2 = "2";
headers.Host = "wx2.qq.com";
headers.Referer = "https://wx2.qq.com/"
}
var ticket = str.split('ticket=')[1].split('&uuid')[0];
console.log('ticket=' + ticket);
getPassTicket(ticket,uuid);
}else if(code == 408 || code==201){
getTicket(uuid);
}else{
console.log(str);
console.log('超时');
}
});
ress.on('data',function(chunk){
str+=chunk;
});
});
}
3. 获取微信登录唯一标志信息wxsid、skey、pass_ticket
调用接口:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
返回信息wxsid、skey、pass_ticket,并且会把cookie种植上
到这一步获取到的信息,在后面所有的请求将畅行无阻
function getPassTicket(ticket,uuid){
request.get({
url:'https://wx'+wx2+'.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket='+ticket+'&uuid='+uuid+'&lang=zh_CN&scan='+parseInt(Date.now())+'&fun=new&version=v2&lang=zh_CN',
}, function(error, response, body){
console.log('请求PassTicket------->>>>>>>>');
console.log(body);
var str = body.toString();
pass_ticket = str.split('<pass_ticket>')[1].split('</pass_ticket>')[0];
skey = str.split('<skey>')[1].split('</skey>')[0];
sid = str.split('<wxsid>')[1].split('</wxsid>')[0];
uin = str.split('<wxuin>')[1].split('</wxuin>')[0];
setCookie(response.headers['set-cookie'])
wxInit()
});
}
4.获取联系人列表,并群发消息
联系人列表调用接口:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
返回所有用户联系人信息,每个用户都有此次登录中唯一的ID
发送消息调用接口:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg
如果BaseResponse.ErrorMsg为空,表示消息发送成功
function getAllUsers(){
request.get({
headers: headers,
url:'https://wx'+wx2+'.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket='+pass_ticket+'&r='+Date.now()+'&seq=0&skey='+skey
}, function(error, response, body){
console.log('getAllUsers..........')
console.log(body)
var list = JSON.parse(body).MemberList;
console.log(list.length)
for (var i = 0; i < list.length; i++) {
var member = list[i];
console.log(member.NickName,member.UserName);
// 群发消息要慎重
// if(member.NickName == '北风吹雪') {
// postMsg(myUserName,member.UserName,'消息内容');
// break;
// }
}
});
}
源代码GitHub地址https://github.com/ColdDay/wxPro(如果对你有帮助请给个star✨,星星到位了后面才会有更有趣的功能,)
node实现微信扫码群发消息《附上github代码》的更多相关文章
- C#开发微信门户及应用(45)--微信扫码登录
在前面随笔<C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理>介绍了基于微信开放平台接口实现的微信扫码直接登录的过程.本篇介绍对扫码登录的一些改进和处理,以便更方便应用在实 ...
- 微信开放平台开发——网页微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- 第三方登录:微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- PC 端微信扫码注册和登录
一.前言 先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展现思路,如果对代码效率有着苛刻要求的项目切勿照搬. 相信做过微信开发的人授权这块都没少做过,但是一般来说我们更多的是为移动端的网 ...
- Net MVC微信扫码支付
微信扫码支付+Asp.Net MVC 这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下. 一.准备工作 使用的微信API中的统一下单方法,关键的 ...
- asp.net core 微信扫码支付(扫码支付,H5支付,公众号支付,app支付)之1
2018-08-13更新生成二维码的方法 在做微信支付前,首先要了解你需要什么方式的微信支付,目前本人做过的支付包含扫码支付.H5支付.公众号支付.App支付等,本人使用的是asp.net mvc c ...
- 微信扫码支付springboot版本
发布时间:2018-11-06 技术:springboot+freemarker 概述 该项目是一个采用springboot构建的web项目,主要实现了微信扫码支付功能.包含最基本的创建订单, ...
- ThinkPHP微信扫码支付接口
最近折腾微信扫码支付,看了微信官方文档,找了很多网页,发现和文档/demo不匹配,现在自己算是弄出来了(文件名称有所更改),贴出来分享一下 一.将有用的官方lib文件和使用的相关文件放置到vendor ...
- Web应用多账号系统设计及微信扫码登录实现
Web应用多账号系统设计及微信扫码登录实现 1 前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...
随机推荐
- uva11059(最大乘积)
Problem D - Maximum Product Time Limit: 1 second Given a sequence of integers S = {S1, S2, ..., Sn}, ...
- html5视频标签
<video width="200" height="200" poster="img/shamo.jpg" src="vi ...
- 使用boost::multi_index高速构建排行榜
使用boost::multi_index高速构建排行榜 前几天在boost的maillist上看到boost::multi_index将要支持ranked_index(邮件内容见附件2),这实乃我等苦 ...
- Linux网络编程--wireshark分析TCP包头的格式
摘要: 本文简介了TCP面向连接理论知识,具体讲述了TCP报文各个字段含义.并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠传输 ...
- Highcharts使用CSV格式数据绘制图表
Highcharts使用CSV格式数据绘制图表 CSV(Comma-Separated Values,逗号分隔值文本格式)是採用逗号切割的纯文本数据.通常情况下.每一个数据之间使用逗号切割,几个相关数 ...
- 对使用多个swiper下标有时显示不出来的问题
这久写了一个网页,其中有很多的轮播图及tab页面切换,就使用了swiper框架,有时一个网页要用到6-8个,如此就出现了下图这种问题: 有时刷新看不到,有时又能看到,tab切换过去的页面也看不到,其实 ...
- 利用MJModel解决关键字
#import "CJAddressModel.h" @implementation CJAddressModel +(NSDictionary *)mj_replacedKeyF ...
- 修改文件系统属性chattr,查看文件系统属性lsattr
chattr chattr +i 文件或目录 , chattr +a 文件或目录,chattr -i 文件或目录,chattr -a 文件或目录,chattr =i 文件或目录,chattr =a 文 ...
- JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。
JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.
- 遍历map的几种方式
1,平时开发中对map的使用很多,然后发现了很多map可能存在的各种问题:如HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize ...