在小程序中,可以直接分享小程序到聊天窗口,但是无法分享小程序到朋友圈,但是朋友圈又是一个重要的推广场地,所以分享小程序码就成了重要途径。常常被朋友圈刷屏的各种带有小程序码的海报,就是一个应用场景。
普通的分享小程序码,直接在后台放一个通用的小程序码就可以了。但是如果需要分享一个特定路径+参数的小程序码就必须要借助小程序提供的API来实现了。
此次来和大家说一说如何利用云函数来实现获取特定路径+参数的小程序码。
云函数为我们提供了三种获取小程序码的API:
前两个都有数量限制,无法满足一些类似详情分享的场景,所以留给我们的道路只有wxacode.getUnlimited接口了。
先来看一下这个接口的主要参数:
其他参数就不一一列举了,有需要可以直接去官方文档查看。 根据上面的参数,我们可以指定任意page,而且还可以传入页面参数,最终在小程序页面加载的时候,通过options来获取到scene,从而做数据加载。
先来看一下云函数如何配置。 新建一个云函数qrcode后,在config.json中配置如下:
{ "permissions": { "openapi": [ "wxacode.getUnlimited" ] } } 复制代码
然后在index.js中加入如下代码:
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async(event, context) => { try { let param = { // 小程序传入的 scene 参数 scene: event.scene, // 可以换成任意 page page: 'pages/index/index', }; // 调用接口 var result = await cloud.openapi.wxacode.getUnlimited(param) return result } catch (err) { return err } } 复制代码
然后部署到云端,云函数部分就完成了。
再来看看小程序端如何调用:
requestQrcode(scene) { let that = this; wx.cloud.callFunction({ name: 'qrcode', data: { scene: scene } }) .then((res) => { let path = wx.env.USER_DATA_PATH + '/' + res.requestID + '.jpg' if (res.result.contentType == 'image/jpeg') { // 返回的结束是 base64 编码的二进制流 // 这里直接保存到文件 wx.getFileSystemManager() .writeFile({ filePath: path, data: res.result.buffer, encoding: 'base64', success: (res) => { }, fail: (res) => { } }) } else { // 异常处理 } }) }, 复制代码
最终在页面的onLoad(options)中可以这样获取到小程序码传递的参数scene:
onLoad: function(options) { let scene = options.scene; }, 复制代码
这样就完成了利用云函数来生成特定路径+参数的小程序码了,后面就可以利用这个小程序码来绘制海报。
不知道你是否注意到scene参数有一个限制,最大32个可见字符,有时候很容易就超出了,那岂不是就没法用了?
没有什么可以难倒程序员!如果有,那一定是需求不合理~
短链,一个很好的方案。把所有的参数生成一个唯一的短链,作为scene参数传递,最后在加载的时候先解析短链,就可以获取到超长参数啦~
如果你不需要给页面传入参数,直接在小程序管理平台最上方,有个工具->生成小程序码,填上页面路径就可以生成小程序码素材啦~
最后分享一个成品~