最近开发小程序遇到一个生成小程序码的功能,常规操作是通过以下接口请求:
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
将二进制数据保存。
完事!