1. 没有涉及支付,订阅号就行,一旦涉及支付,一定要服务号
2. 一个用户关注公众号和关注同一个公众号下的小程序产生的openid是不一样的,不便于管理,最好的办法就是通过微信开放平台,把产品链路打通,从平台下面统一去拿unionid, 从而获取用户的资料(所以要在微信开放平台注册一个账号,绑定你的测试号,公众号,小程序)
3. 开发微信公众号最好借助代理工具实现内网端口映射: 花生壳(windows用户友好),魔法隧道(window用户友好),Ngrok(用起来蛮好用)
4. 开发微信公众号第一步: 买一台服务器+域名,把腾讯的服务接管过来我们自己的服务器上(网页登录微信公众号-基本配置-配置服务器地址)
5. 你填写的服务器 url 需要提供服务如下:
//auth.js文件
var express = require('express');
var app = express();
app.use (function (req,res){
res.send(req.query.echostr) //这是简单粗暴的返回,其实实际开发这里还要验证请求是否来自与微信
});
app.listen(9003);
// 当在微信公众号的基本配置里面修改配置(token随便写)点击提交后,腾讯服务器会向我们填写的url发送验证请求,我们返回如上就可以提交成功!
6. 微信公众号消息的自动回复:(基于上一步已经验证成功的基础上,服务不能停)
// app.js
var app = require('express');
app.use(require('express-xml-bodyparser')()) //解析用户发过来的消息
app.post('/', function(req,res){
console.log(req.body.xml) //输出用户发过来的消息对象
res.send("") // 给用户回复也要以xml的格式回复,这里就不写了,有点多
})
7. 公众号自定义菜单: 订阅号是无法直接使用自定义菜单的接口的,所以用测试号来使用(首先要先获取access_token)
// token.js 用来获取 access_token ,这个接口一天只能使用2000次,所以要把 access_token 存在本地文件
var request = require('superagent'); //这是一个发请求的库
var jsonfile = require('jsonfile'); //写json的库
// 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET'; 这是官方文档给的接口
module.exports = function (req,res,next) {
var json_token = jsonfile.readFileSync('./token.json')
// 判断这个token是否过期
if(Date.now()+ 15*60*1000 > json_token.end_time){
request
.get('https://api.weixin.qq.com/cgi-bin/token)
.query({
grant_type: 'client_credential',
appid: "你测试号的apppid",
secret: "你测试号的appsecret"
})
.end(function (err,data){
var token = data.body
token.end_time = Date.now() + token.expires_in * 1000
jsonfile.writeFileSync('./token.json',data.body,{spaces:4}) //将取到的token存到token.json文件
res.locals.token = token.access_token
console.log('from remote',token.access_token)
next()
})
}else{ //未过期就本地获取
res.locals.token.json_token.access_token
console.log('from local',token.access_token)
next()
}
}
8. node 适合场景:高并发,前后端分离