小程序结合云开发获取小程序码

最近开发小程序遇到一个生成小程序码的功能,常规操作是通过以下接口请求:

POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

但是今天突然不想走寻常路,决定用一用云开发玩一玩。

话不多说,码它!

wxml:

<button bindstap="creatCode">点击获取</button>

 

云函数,我定义了一个getcode函数,首先往函数下的config.json文件配置一下云调用权限

config.json:

openapi.wxacode.get

 

接着往index.js里面写入逻辑代码:

index.js:

const cloud = require(‘wx-server-sdk‘)

cloud.init()

exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.wxacode.get({
        path: ‘page/index/index‘,
        width: 430
      })
    console.log(result)
    return result
  } catch (err) {
    console.log(err)
    return err
  }
}

 

最后用方法creatCode调用以上云函数

js:

creatCode(){
    console.log(‘开始生成小程序码‘)
    wx.cloud.callFunction({
      name:‘getcode‘,
      data:{},
      success:res=>{
          console.log(res)
          let fileManager = wx.getFileSystemManager();
          let filePath = wx.env.USER_DATA_PATH+‘/qr.jpg‘;
          fileManager.writeFile({
            filePath:filePath,
            encoding:"binary",
            data:res.result.buffer,
            success:res=>{
              console.log(res)
              wx.previewImage({//图片预览

                urls: [filePath],

              })


            }
          })
      },
      fail: err=>{

      }
    })
    

}

查了一下官方文档,云函数返回的数据是一个包含二进制数据及其数据类型的对象,是一个ArrayBuffer类型的东西

这里遇到一个坑,直接将这个类型转为base64然后在image标签中调用出来,在微信开发工具上是可以出来的,但是真机上就gg了,直接空白

需要将这个数据存成本地临时文件

于是通过

let fileManager = wx.getFileSystemManager()
fileManager.writeFile

将二进制数据保存。

完事!

小程序结合云开发获取小程序码

上一篇:jackjson学习2+CVE-2019-14379漏洞分析


下一篇:干掉微信小程序-wx.navigateBack()携带参数给返回的页面