微信小程序官方给出了很多的生成小程序码的方式,因为以前的一些操作的原因,本人在这里依旧使用云函数进行操作,并采用了微信小程序官方推荐的 getUnlimitedQRCode,
根据微信小程序官方推荐的操作,可将获得小程序码的步骤分为如下几步:
1、利用如下调用获得图片的二进制结果,具体示例代码如下:
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', "checkPath": true, "envVersion": 'release' }) return result } catch (err) { return err } }
以上方法的返回结果为ArrayBuffer对象,为了将该对象结果转化为图片结果,需要进行解码,根据我个人的搜索结果来看,应当采用 base64ToArrayBuffer 将结果解码,目前平台上搜索到的结果也大多是如此,但是在微信官方给出的最新结果中,wx.base64ToArrayBuffer 已经废弃,无法正常使用,即意味着这种解码方式已经走不通了。当然有其他的方式完成解码,在自己的后端完成解码即可,但是部分开发者没有如此多的后端资源,只想限定在小程序中,因此在不引用其他插件的情况下,配合云存储方式,本人查找到一种较为便利的解决方式,步骤如下:
1、云函数部分
const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { try { const result = await cloud.openapi.wxacode.getUnlimited({ scene: event.scene }); return await cloud.uploadFile({ cloudPath: 'target/' + event.targetId + '.jpg', fileContent: result.buffer, //处理buffer 二进制数据 success: res => { }, fail: console.error }) } catch (err) { console.log(err) return err } }
在云函数部分,利用getUnlimited函数,即上文提到的getUnlimitedQRCode,将返回结果中的buffer即图片结果对应的二级制代码,直接传入uploadFile的fileContent中,然后将上传后返回的云文件代码返回到前端,即参数结果中的fileID。
2、页面部分
// 调用云函数 获取 内容 wx.cloud.callFunction({ name: 'getWxacode', data: { scene: "my_param" }, success: res => { console.log('云函数调用成功', res); that.setData({ imgUrl: res.result.fileID }); }, fail: err => { console.error('云函数调用失败', err) } })
在页面中调用上述云函数,然后将返回结果直接存储为imgUrl,然后在前端页面中调用即可
3、获取scene中的参数
var scene = decodeURIComponent(e.query.scene)
直接在加载过程中获取即可,为了安全起见,进行简单的解码
4、分享小程序码-wx.showShareImageMenu
wx.cloud.downloadFile({ fileID: this.data.MiniProFildID, success: res => { // get temp file path wx.showShareImageMenu({ path:res.tempFilePath, success(res){ console.log(res) }, fail(err){ console.log(err) } }) }, fail: err => { // handle error } })
先利用云下载函数下载之前保存的小程序码文件,再将临时文件码传递即可
本文部分内容参考,其中该作者还提供了其他的生成方式,感兴趣的朋友可以看下