如何用Node.js改写微信协议实现长尾词登录功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计609个文字,预计阅读时间需要3分钟。
使用Node.js实现微信协议登录的简单示例代码:
javascriptconst http=require('http');const https=require('https');const crypto=require('crypto');const fs=require('fs');const express=require('express');const iconv=require('iconv-lite');
var app=express();
app.get('/wechatlogin', function(req, res) { // 登录逻辑代码});
wechatlogin.js//使用NodeJs实现微信协议登录
var login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid="+nowUuid+"&tip=1&r="+checkTime+"&_="+time;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
isResponsed=true;
var code = getSubstr(body,'window.code=',';');
switch (code){
case "200":
url=getSubstr(body,'window.redirect_uri="','";');
url+="&fun=new&version=v2";
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
BaseRequest.skey=getSubstr(body,'
',' '); var cookieArr=response.headers['set-cookie']; Config.cookie=""; cookieArr.forEach(function (cookie){ var c=getSubstr(cookie,"",'; Domain'); Config.cookie+=c+"; "; }); debug("Wechat login success!"); res.end(); url = "wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r="+(~getTimeStamps())+"&pass_ticket="+BaseRequest.pass_ticket; request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest}) }, function(error, response, body) { if (!error && response.statusCode == 200) { body=JSON.parse(body); Config.myinfo=body.User; Config.last=body.SyncKey; debug("Listen wechat message..."); //Now start listen wechat message if(!progressListen){ //if not listenning... msgloop(); progressListen=true; } }else{ debug("Listen wechat message error"); } }); }else{ debug("Wechat login error!"); } }); break; case "201": res.setHeader("Refresh",1); res.end("Please confirm the login request!"); debug("Please confirm the request of login"); break; case "408": progressWaiting=false; debug("Login timeout and refresh please"); break; default: res.setHeader("Refresh",1); res.end(); progressWaiting=false; console.log(body); } }else{ progressWaiting=false; debug("Error with "+response.statusCode); } }); setTimeout(function() { if(!isResponsed){ progressWaiting=false; res.setHeader("Refresh",1); res.end(); } }, 3000); } }); function msgloop(){ debug("Getting Message..."); url = "wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid="+BaseRequest.Sid+"&skey="+BaseRequest.skey+"&lang=zh_CN&pass_ticket="+BaseRequest.pass_ticket; request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest,"SyncKey":Config.last,"rr":(~getTimeStamps())}) }, function(error, response, body) { if (!error && response.statusCode == 200) { body=JSON.parse(body); //console.log(body); Config.last=body.SyncKey; body.AddMsgList.forEach(function (msg){ console.log("MSG from "+msg.FromUserName+" : "+msg.Content); var fromType=msg.FromUserName.substring(0,2); if(fromType=="@@"){ //群消息 debug("Msg From Group : "+msg.Content); responseMsg(msg.FromUserName,"[自动回复]:"+msg.Content); }else{ fromType=msg.FromUserName.substring(0,1); if(fromType=="@"){ //个人消息 debug("Msg From Person : "+msg.Content); responseMsg(msg.FromUserName,"[自动回复]:"+msg.Content); }else{ //公众号消息 debug("Msg From MpAccount : "+msg.Content); } } }); } setTimeout(function(){ msgloop(); },rand(1000,5000)); }); } function responseMsg(FromUserName,Content){ var url="wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?lang=zh_CN&pass_ticket="+BaseRequest.pass_ticket; var localId=(getTimeStamps()+rand(100,999)); request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest,"Msg":{ "ClientMsgId":localId, "Content":Content, "FromUserName":Config.myinfo.UserName, "LocalID":localId, "ToUserName":FromUserName, "Type":1 },"Scene":0}) }, function(error, response, body) { debug("Message response success!"); }); } app.get('/*', function(req, res) { var params = req.originalUrl; res.send("
808 Not Found
Nginx&Node本文共计609个文字,预计阅读时间需要3分钟。
使用Node.js实现微信协议登录的简单示例代码:
javascriptconst http=require('http');const https=require('https');const crypto=require('crypto');const fs=require('fs');const express=require('express');const iconv=require('iconv-lite');
var app=express();
app.get('/wechatlogin', function(req, res) { // 登录逻辑代码});
wechatlogin.js//使用NodeJs实现微信协议登录
var login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid="+nowUuid+"&tip=1&r="+checkTime+"&_="+time;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
isResponsed=true;
var code = getSubstr(body,'window.code=',';');
switch (code){
case "200":
url=getSubstr(body,'window.redirect_uri="','";');
url+="&fun=new&version=v2";
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
BaseRequest.skey=getSubstr(body,'
',' '); var cookieArr=response.headers['set-cookie']; Config.cookie=""; cookieArr.forEach(function (cookie){ var c=getSubstr(cookie,"",'; Domain'); Config.cookie+=c+"; "; }); debug("Wechat login success!"); res.end(); url = "wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r="+(~getTimeStamps())+"&pass_ticket="+BaseRequest.pass_ticket; request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest}) }, function(error, response, body) { if (!error && response.statusCode == 200) { body=JSON.parse(body); Config.myinfo=body.User; Config.last=body.SyncKey; debug("Listen wechat message..."); //Now start listen wechat message if(!progressListen){ //if not listenning... msgloop(); progressListen=true; } }else{ debug("Listen wechat message error"); } }); }else{ debug("Wechat login error!"); } }); break; case "201": res.setHeader("Refresh",1); res.end("Please confirm the login request!"); debug("Please confirm the request of login"); break; case "408": progressWaiting=false; debug("Login timeout and refresh please"); break; default: res.setHeader("Refresh",1); res.end(); progressWaiting=false; console.log(body); } }else{ progressWaiting=false; debug("Error with "+response.statusCode); } }); setTimeout(function() { if(!isResponsed){ progressWaiting=false; res.setHeader("Refresh",1); res.end(); } }, 3000); } }); function msgloop(){ debug("Getting Message..."); url = "wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid="+BaseRequest.Sid+"&skey="+BaseRequest.skey+"&lang=zh_CN&pass_ticket="+BaseRequest.pass_ticket; request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest,"SyncKey":Config.last,"rr":(~getTimeStamps())}) }, function(error, response, body) { if (!error && response.statusCode == 200) { body=JSON.parse(body); //console.log(body); Config.last=body.SyncKey; body.AddMsgList.forEach(function (msg){ console.log("MSG from "+msg.FromUserName+" : "+msg.Content); var fromType=msg.FromUserName.substring(0,2); if(fromType=="@@"){ //群消息 debug("Msg From Group : "+msg.Content); responseMsg(msg.FromUserName,"[自动回复]:"+msg.Content); }else{ fromType=msg.FromUserName.substring(0,1); if(fromType=="@"){ //个人消息 debug("Msg From Person : "+msg.Content); responseMsg(msg.FromUserName,"[自动回复]:"+msg.Content); }else{ //公众号消息 debug("Msg From MpAccount : "+msg.Content); } } }); } setTimeout(function(){ msgloop(); },rand(1000,5000)); }); } function responseMsg(FromUserName,Content){ var url="wx.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?lang=zh_CN&pass_ticket="+BaseRequest.pass_ticket; var localId=(getTimeStamps()+rand(100,999)); request({ url: url, method: "POST", json: false, headers: { "content-type": "application/json", }, body: JSON.stringify({"BaseRequest":BaseRequest,"Msg":{ "ClientMsgId":localId, "Content":Content, "FromUserName":Config.myinfo.UserName, "LocalID":localId, "ToUserName":FromUserName, "Type":1 },"Scene":0}) }, function(error, response, body) { debug("Message response success!"); }); } app.get('/*', function(req, res) { var params = req.originalUrl; res.send("

