微信订阅号
申请订阅号,设置
后台管理功能
-
素材管理--群发图文消息
-
自定义回复
-
自定义菜单
-
投票管理
自定义开发
-
基本配置
注意:自定义功能和微信提供的功能只能启用一个
-
node发送http请求,和解析网页
-
安装发送请求的包
-
地址:
-
安装:npm install request --save
-
-
安装解析html的包
- 地址:
- 安装:npm install cheerio --save
-
练习,解析糗事百科
const request = require("request");const cheerio = require("cheerio");//发送http请求request({ method: "get", url: "http://www.qiushibaike.com", headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" }}, (err, response, body) => { //解析body let $ = cheerio.load(body); $("#content-left .content span").each((index, item) => { console.log($(item).text()); })})
- 验证微信服务器
app.get("/wx", (req, res) => { //接入验证微信服务器 var query = req.query; console.log(query.signature); console.log(query.echostr); console.log(query.timestamp); console.log(query.nonce); res.send(query.echostr); });
-
接收消息,当用户给订阅号发消息,微信服务器会以post的形式把消息以xml的格式,发送给设置的服务器
-
解析xml的包 xml2js
- 安装 npm install xml2js --save
app.post("/wx", (req, res) => { //接收post过来的数据,进行处理 req.on("data", (buffer) => { //console.log(buffer.toString()); //处理xml的包 const parseString = require("xml2js").parseString; parseString(buffer.toString(), (err, result) => { console.log(result); }); });});
- 发送文本消息
let touser = result.xml.FromUserName[0];let fromuser = result.xml.ToUserName[0];//回复消息if(result.xml.MsgType[0] === "text") { let txt = "回复你妹"; //回复文本消息 let msg = ``; res.send(msg);}else if(result.xml.MsgType[0] === "location") { let txt = result.xml.Label[0]; //回复文本消息 let msg = ` ${Date.now()} `; res.send(msg);} ${Date.now()}
- 发送图文消息
设置自定义菜单
-
获取ACCESS_TOKEN,ACCESS_TOKEN有过期时间(2小时),有每日2000次的限制
http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 获取返回值 {"access_token":"ACCESS_TOKEN","expires_in":7200}
//获取access_tokenconst appid = "xxxx";const secret = "xxxxx";request("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret, (err, response, body)=> { let json = JSON.parse(body); //access_token -- json.access_token //console.log(json.access_token);});
-
设置自定义菜单
//创建自定义菜单//获取access_tokenrequest("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret, (err, response, body)=> { let json = JSON.parse(body); //access_token -- json.access_token //console.log(json.access_token); //创建自定义菜单 let data = { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"view", "name":"视频", "url":"http://v.qq.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" }] }] }; let url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + json.access_token; request({ method: "post", url: url, headers: { "Content-Type": "application/json" }, body: JSON.stringify(data) }, (err, response, body) => { console.log(body); })});
自定义分享到朋友圈的标题
- 获取签名等信息
//发送http请求,获取access_token request("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret, (err, response, body)=>{ let json = JSON.parse(body); //access_token -- json.access_token //console.log(json.access_token); //发送请求获取jsticket request("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ json.access_token +"&type=jsapi", (err, response, body) => { let json = JSON.parse(body); //ticket --> json.ticket const sign = require("./sign"); let result = sign(json.ticket, 'http://wx001.ittun.com/take.html'); console.log(result); }); });
-
页面上设置
- 引入JavaScript
- 配置签名信息
wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wxc629aa477087151a', // 必填,公众号的唯一标识 timestamp: '1479299885', // 必填,生成签名的时间戳 nonceStr: 'fb6t2dntsxopdvd', // 必填,生成签名的随机串 signature: '2a45a7c3217cd243c6f4c5ca01c35edc8c832b9b',// 必填,签名,见附录1 jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 });
- 设置分享的自定义信息
wx.onMenuShareTimeline({ title: '互联网之子', // 分享标题 link: 'http://movie.douban.com/subject/25785114/', // 分享链接 imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', // 分享图标 success: function () { // 用户确认分享后执行的回调函数 alert("wokao"); }, cancel: function () { // 用户取消分享后执行的回调函数 alert("取消了") } })