026 -- 自找麻烦之 微信公众号、小程序开发

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 适合场景:高并发,前后端分离

猜你喜欢

转载自blog.csdn.net/m0_37291785/article/details/81448038