2. 调用生成小程序码API前,需要先获取到access_token (代码顺序不做整理,只是说明)
因为业务的需要,有时候我们生成的小程序码不止一个小程序,我们可以将多个小程序的appid及对应secret一起存放在后台某个文件中,然后根据用户接口传递当前小程序appid信息,再去获取到对应的secret
接着调用微信API获取access_token信息,引用request模块和拿到的appid以及secret数据请求接口
let request = require('request');
const opt = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${app_id}&secret=${secret}`
request(opt, (error, response, body) => {
if (!error && response.statusCode === 200) {
}
}
3. 下一步开始获取小程序码
小程序接口地址需要注意的是,虽然为POST请求,但是access_token的信息并不放在请求body里,而是跟在地址栏的后面
小程序码接收的参数以string类型放在scene里面,这里需要注意的是 (最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~
,其它字符请自行编码为合法字符(因不支持%
,中文无法使用 urlencode
处理,请使用其他编码方式))
page是小程序码识别后跳转的地址,必须是已经发布的小程序存在的页面!!!
其他的信息还是根据文档来操作即可,设置resposeType格式为arrayBuffer,返回来的图片使用 fs 模块解析
let fs = require('fs')
const url = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`
let page = path
let scene = `id=${id}`
const option = {
url: url,
json: true,
method: "POST",
body: {
page: page,
scene: scene,
is_hyaline: true
},
resposeType: 'arrayBuffer'
}
request(option).pipe(fs.createWriteStream(`./public/upload/${XXXX}.png`).on('finish', () => {
return callback(`/upload/${XXXX}.png`)
}))
图片保存名字根据传参及appid等信息进行命名,然后返回图片地址
再将返回的地址及文件名存入到数据库中,将图片地址返回到用户前端。
4. 用户页面如果再次请求获取小程序码,可先到数据库中查找对应参数的小程序码是否已经生成过,生成过的直接返回图片地址,没生成过的重复以上步骤,完成收割。