【前情提要】
1-小程序云函数生成小程序码
2-小程序云函数上传到云存储,云存储包括 小程序云存储/腾讯云存储
(因为云函数 就是node.js语法写的吗,所以下面写法对于node同样适用)
3-这里是借助了 tcb-router 所以写法跟 云函数稍微有一点不一样但是里面整体内容是一样的
一、生成小程序码+上传到小程序云存储
先附上官方文档:wxacode.createQRCode | 微信开放文档
有三个方法可以生成小程序码,自己选择使用,我使用的是getUnlimited
【注意点】
1 - 如果想要生成圆形的小程序码,设置Is_hyaline的属性为true,即透明,就是圆的小程序码,不设置默认为false,也就是白的打底的方二维码
2 - 返回的图片格式是buffer,小程序云存储是支持上传buffer文件的,直接上传即可
2-tcb-router 写法
扫描二维码关注公众号,回复:
16680875 查看本文章
//tcb-router版本
const cloud = require("wx-server-sdk");
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
});
const createCode = async (ctx, next) => {
try {
const result: object = await cloud.openapi.wxacode.getUnlimited({
path: "pages/index/index",//这里是地址
width: 200,//宽度
scene: `id=xx`, //如果有需要的参数可以设置在这里用户扫码进入小程序的时候能够通过scene获得属性
is_hyaline: true,//是否透明 设置为true生成的是圆的二维码
});
let msg = await cloud.uploadFile({
cloudPath: `public/1.jpg`,//路径 根据自己的定 我这个相是进入public文件夹
fileContent: result.buffer, //这里小程序上传文件支持buffer类型
});
ctx.data = msg //把数据返回回去
} catch (err) {
ctx.data = err;
}
}
export { createCode };
【如果没有借助tcb-router的,就是正常的云函数格式】
2-云函数写法如下:
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.wxacode.getUnlimited({
"page": 'pages/index/index',
"scene": 'a=1',
})
let msg = await cloud.uploadFile({
cloudPath: `public/1.jpg`,//路径 根据自己的定 我这个相是进入public文件夹
fileContent: result.buffer, //这里小程序上传文件支持buffer类型
});
return msg
} catch (err) {
return err
}
}
二、生成小程序码+上传到腾讯云存储
1 - 安装sdk
yarn add cos-nodejs-sdk-v5 --save
npm i cos-nodejs-sdk-v5 --save
2 - 初始化(这里我使用的永久密钥)
var COS = require("cos-nodejs-sdk-v5");
var cos = new COS({
SecretId: '写自己的'
SecretKey: '写自己的'
});
3 - 上传对象
cos.putObject(
{
Bucket: "存储桶名字",
Region: "地区",
Key: `存储内容的地址 例子:1.jpg` ,
Body: Buffer.from('xxx'), //因为小程序返回的buffer格式
ServerSideEncryption: "AES256", //必须
},
function (err, data) {
return err || data;// data里面能得到地址
}
);
4 - 完整代码 生成小程序码+上传到腾讯云云存储
const cloud: any = require("wx-server-sdk");
var COS = require("cos-nodejs-sdk-v5");
var cos = new COS({
SecretId:
SecretKey:
});
function myUpload(result) {
cos.putObject(
{
Bucket: "存储桶名字",
Region: "地区",
Key: `存储内容的地址 例子:1.jpg` ,
Body: Buffer.from(result.buffer), //因为小程序返回的buffer格式
ServerSideEncryption: "AES256", //必须
},
function (err, data) {
return err || data;
}
);
}
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
});
const createCode = async (ctx, next) => {
try {
const result: object = await cloud.openapi.wxacode.getUnlimited({
path: "pages/index/index",
width: 200,
scene: `id=1`,
is_hyaline: true,
});
ctx.data = myUpload(result);
} catch (err) {
ctx.data = err;
}
await next(); // 执行下一中间件
};
export { createCode };
就ok啦~这样就可以把生成的二维码上传搭配存储啦,如果需要下载就调用下载的方法 然后再调用保存图片到相册即可~
tcb-router的用法之后可以出一篇文章写一下,其实比较简单,类似于koa的洋葱模型,用了中间件,github上的用法已经比较详细喽~