云函数生成小程序码并保存

        微信小程序官方给出了很多的生成小程序码的方式,因为以前的一些操作的原因,本人在这里依旧使用云函数进行操作,并采用了微信小程序官方推荐的 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
        }
    })

先利用云下载函数下载之前保存的小程序码文件,再将临时文件码传递即可

 本文部分内容参考,其中该作者还提供了其他的生成方式,感兴趣的朋友可以看下

[开盖即食]利用“云函数”生成小程序码和将buffer流转化图片 | 微信开放社区

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值