一,方案

看了官方的文档,获取小程序码有三种,我采用的是第二种:生成数量不受限制的分享码。
对应的官方文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html
其中又分为https调用和云开发调用。
因为我用的是unicloud云开发,如果采用微信的云开发,还需要引入wx-server-sdk,然后要配置一堆东西,文档又不全,尝试了两次未果,就放弃了这种方案。
最后是采用的https调用的方式。

二,实现思路

【第一步】需要获取ACCESS_TOKEN值。
这种微信的接口,必须服务端调用,不能前端直接https进行调用。虽然在开发阶段能够调用成功,那是因为微信开发者工具-项目信息-本地设置中勾选了不校验合法域名导致的成功。当你发布体验版和正式版时是调用不通的。
所以,获取ACCESS_TOKEN必须在服务端直接调用微信接口获取。
官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
实现的云对象代码:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {_before: function () { // 通用预处理器},async addCodeInfo(infoObj){//获取access_tokenconst APPID='xxx'const APPSECRET='xxx'const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`const requestOptions = {method: 'GET',dataType: 'json'}const res1 = await uniCloud.httpclient.request(URL,requestOptions)const access_token=res1.data.access_tokenreturn access_token}
}

【第二步】需要利用ACCESS_TOKEN再调用微信的生成分享码的接口
这个接口依旧是微信的接口,所以依旧是需要在服务端发起。
于是,在上一步获取到access_token的基础上,继续调用获取分享码的接口:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {_before: function () { // 通用预处理器},//数据库中增加wifi信息,增加完毕后返回分享二维码async addCodeInfo(infoObj){//获取access_tokenconst APPID='wxe0bc57edf31dad80'const APPSECRET='7e5f676a5fad20d044434792360c28d4'const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`const requestOptions = {method: 'GET',dataType: 'json'}const res1 = await uniCloud.httpclient.request(URL,requestOptions)const access_token=res1.data.access_token//由此id生成分享码const codeUrl=`https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`const codeOptions={method:'POST',data: JSON.stringify({"scene":'id',"page":'pages/index/index',"check_path":false,"width":500,"env_version":'trial'//trial:体验版}),}const res3 = await uniCloud.httpclient.request(codeUrl,codeOptions)return res3}
}

【第三步】获取到的分享码结果类型是buffer的二进制格式,需要转图片
如下图:

也就是,res.data是个buffer类型的数据,它有两个字段:data字段存储内容,type字段显示类型。
于是需要在服务端转成base64后再传给前端:

const buffer=res3.data
const result=buffer.toString('base64')

三,完整的代码实现

前端

<img :src="shareCode" alt="" ><script>export default {data() {return {shareCode:'',}},onLoad(options) {this.getWeixinCode()},methods: {//调用后端接口,生成小程序分享码async getWeixinCode() { // 注意异步const _this=thisconst wifiCode = uniCloud.importObject('wifiCode') // 导入云对象try {const params={}const res=await wifiCode.addCodeInfo(params)console.log("++++",res)this.shareCode="data:image/png;base64," + res} catch (e) {console.log(e)}}}}
</script>

后端:
主要就是wifiCode这个云对象:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {_before: function () { // 通用预处理器},//数据库中增加wifi信息,增加完毕后返回分享二维码async addCodeInfo(infoObj){//获取access_tokenconst APPID='xxx'const APPSECRET='xxx'const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`const requestOptions = {method: 'GET',dataType: 'json'}const res1 = await uniCloud.httpclient.request(URL,requestOptions)const access_token=res1.data.access_token//由此id生成分享码const codeUrl=`https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`const codeOptions={method:'POST',data: JSON.stringify({"scene":"23","page":'pages/index/index',"check_path":false,"width":500,"env_version":'trial'//trial:体验版}),}const res3 = await uniCloud.httpclient.request(codeUrl,codeOptions)const buffer=res3.dataconsole.log("---响应--",buffer)// const buf = new Buffer (buffer)console.log("buffer转化",buffer.toString('base64'))const result=buffer.toString('base64')return result}
}

四,坑点

1,微信的接口需要服务端调用
2,获取分享码的接口的post接口参数需要JSON.stringify处理一次
3,scenez只支持32位,一些特殊字符还不支持。
4,获取分享码的接口的access_token参数,必须放在url上,也就是和我代码中一样的写法。
5,本地开发完成后,云对象啥的需要上传部署后,体验版和真机调试才能用。并且,需要配置小程序的接口白名单。https://tcb-api.tencentcloudapi.com和
https://tcb-wbk382fznzzwna3-8chuc14d8e99.service.tcloudbase.com
6,获取分享码的接口,返回的是buffer二进制流,所以获取二维码的接口,我没有配置datatype这个参数,而是让它采用默认的值。获取到结果后还需要转化成base64才可以渲染在页面上。

总而言之,比较坑,但是我没哭。
呐,就这样吧~
希望对后续看到的小伙伴有所帮助~

unicloud生成微信小程序分享码相关推荐

  1. 全新圣诞节头像框制作生成微信小程序源码下载支持多模板

    一款可以制作圣诞帽头像的一款小程序 里面有多种模板选择,当然啦里面不只是可以制作圣诞帽 还可以制作贴图头像框,各种卡通,卡哇伊,男神女神标等等模板可以制作的 另外还支持检测你的手机型号,自动辨别手机真 ...

  2. 星际旅行飞船乘坐票制作生成微信小程序源码下载

    这是一款非常票制作生成的一款微信小程序源码 当然啦并不是说制作了就真的能坐飞船一样 这只是一种娱乐啊,请勿当真 支持制作情侣票,闺蜜票,单人票 安装方法: 使用微信开发者工具打开源码 然后提交上传审核 ...

  3. 微信小程序:微信也可以发闪照了闪照制作生成微信小程序源码下载,自定义闪照时间

    这是一款闪照制作的一款微信小程序源码 该源码呢也就是让用户在微信也可以实现QQ上面的闪照功能 用户可以自主上传照片,可以自定义的选择闪照的时间 另外这款小程序还支持流量主模式 这种东西目前在微信还是挺 ...

  4. (已更新)趣味制作生成微信小程序源码下载-安装简单方便

    这是一个diy类型的制作生成小程序源码 里面有多种素材生成,可以用来娱乐吧! 比如有的类型如:退出酒场告知书,喝酒认怂书,等等 小程序安装的话还是挺方便的,特别适合新手 PS:里面的二维码的话小编替换 ...

  5. 微信小程序:检讨书生成微信小程序源码

    对于经常写检讨的小伙伴来说,福音来了 因为这是一款检讨书生成小程序 所以再也不用为了写检讨而烦恼了哦 支持自定义字数下线,主题自定义 支持多种类型检讨比如:学生党的,男朋友,领导演讲稿,共青团申请书等 ...

  6. 2022全新超火超热门模板的姓氏头像制作生成微信小程序源码下载

    这是一款姓氏头像小程序源码 姓氏头像可以说是一个比较热门的一个东西 之前小编也发过好几款姓氏头像小程序源码 但是模板都太单一了,虎年哪一款在这之前还是挺好的因为检查有模板更新 而且还不需要重新更新源码 ...

  7. 小程序源码:2022全新超火超热门模板的姓氏头像制作生成微信小程序源码-多玩法安装简单

    这是一款姓氏头像小程序源码 姓氏头像可以说是一个比较热门的一个东西 之前小编也发过好几款姓氏头像小程序源码 但是模板都太单一了,虎年哪一款在这之前还是挺好的因为检查有模板更新 而且还不需要重新更新源码 ...

  8. 威信也可以发闪照了闪照制作生成微信小程序源码下载,自定义闪照时间

    这是一款单照制作的一款微信小程序源码 该源码呢也就是让用户在威信也可以实现Q上面的闪照功能 用户可以自主上传照片,可以自定义的选择闪照的时间 这种东西目前在威信还是挺少见的,用来在朋友面前装装还是挺好 ...

  9. 小程序源码:微信也可以发闪照了闪照制作生成微信小程序源码下载,自定义闪照时间

    这是一款闪照制作的一款微信小程序源码 该源码呢也就是让用户在微信也可以实现QQ上面的闪照功能 用户可以自主上传照片,可以自定义的选择闪照的时间 另外这款小程序还支持流量主模式 这种东西目前在微信还是挺 ...

最新文章

  1. Oracle归档日志删除
  2. Oracle存储过程中执行DDL操作
  3. AFAB 科目要求一个成本会计分配
  4. Python学习week7-文件路径操作
  5. 项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS
  6. SharePoint 2013 Workflow - Advanced Workflow Debugging with Fiddler
  7. 4g内存只有1.6g可用_linux服务器内存异常,究竟在哪消耗了2.5G?
  8. Swift语言指南(二)--语言基础之注释和分号
  9. 甘特图制作_使用excel制作甘特图其实很简单,仅需4步搞定,项目进度一目了然...
  10. Error occurred during initialization of VM Could not reserve enough space for object heap
  11. SSM毕设项目户籍管理系统jrg02(java+VUE+Mybatis+Maven+Mysql)
  12. [血泪整理]为何加载EDEM和FLUENT耦合接口显示ERROR126
  13. 第二章第三章 查找和排序(上)
  14. 减脂单吃全麦面包太乏味?全麦面包的N种吃法合集
  15. 《前端单位和网络地址》随手学习笔记
  16. PRML读书笔记(一)
  17. HTML字符实体(关于amp;nbsp;amp;gt;amp;lt;等)
  18. 中央直属企业名单【中国级别最高的169家企业】(转)--找工作按这个来
  19. 邵阳学院大学计算机基础实验报告答案,实验报告正文(大学计算机基础)
  20. mpt matlab 工具箱,matlab的mpt工具箱(含voronoi函数)

热门文章

  1. box-shadow阴影选择器-react
  2. LAMP下搭建discuz论坛
  3. 如何使用word自动生成目录?
  4. uniapp上下元素联动
  5. android 仿美团联动,仿美团弹出分类选择框(左右两个listview联动)
  6. ADS器件无法连接导线的问题
  7. docker-01 docker-centos7-安装配置阿里元镜像加速
  8. 金智视讯java,公安行业平台解决方案
  9. 好中层的八个标准:如何成为一名优秀的管理者
  10. S32K系列S32K144学习笔记——FTM3定时器