微信小程序 生成携带参数的二维码


Posted in Javascript onOctober 23, 2019

第一步第二步都要必须由后端完成,返回图片地址给前端!!原因??如下图:

微信小程序 生成携带参数的二维码

微信小程序 生成携带参数的二维码

想了解,想尝试的可以看看:

第一步:获取ACCESS_TOKEN

// 这一步 前端可以试试请求玩玩,一般由后端获取access_Token。后端请求微信API接口时会用到这个access_Token,前端

再请求会造成重复请求,会使之前的access_token过期。

第二步:获取小程序二维码并渲染:

小程序API地址

wx.request({
    // url:'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + accessToken, // a
    // url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + accessToken, // b
    url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token' + accessToken, // c
    method: "POST",
    data: {
      'path': "/pages/index/index?openid=" + openid, // 携参数openid
      'width': '430'
    },
    responseType: 'arraybuffer',
    success: function (res) {
      console.log(res.data)  // 二维码
      that.setData({
        qrcode: res.data
      })
    },
    fail: function (res) {
      console.log('fail')
    }
  })

最后结果会出现小程序乱码,(这是个二进制流文件):

微信小程序 生成携带参数的二维码

解决?

可以利用微信小程序拓展接口,(后台转二进制流也是可以的,后台获取后,直接保存为图片,然后将图片路径返回给前台)。

wx.arrayBufferToBase64(arrayBuffer) 可以将二进制流转为base64,拓展接口方法地址

// 前端请求完整方法:

wx.request({
    // url:'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + accessToken, // a
    // url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + accessToken, // b
    url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token' + accessToken, // c
    method: "POST",
    data: {
      'path': "/pages/index/index?openid=" + openid, // 携参数openid  
      'width': '430'
    },
    responseType: 'arraybuffer', // arraybuffer是以数组的语法处理二进制数据,称为二进制数组。
    success: function (res) {
      let data = wx.arrayBufferToBase64(res.data);
      that.setData({
        qrcode: 'data:image/png;base64,' + data
      })
    },
    fail: function (res) {
      console.log('fail')
    }
  })

wxml文件:

<image src='{{qrcode}}' />

这样二维码就可以出现了,

首页获取二维码参数

onLoad: function (options) {
  // console.log(options.openid) 
  if (options.openid) {
    wx.setStorageSync('openid', options.openid) // 将openid缓存
  }
}

要使用的时候,拿缓存则:let openid = wx.getStorageSync("openid");

如果后端给你传的是base64?

那么恭喜你,本该传图片路径给你...

解决base64图片显示的方法:

var array = wx.base64ToArrayBuffer(res.data.data)
var base64 = wx.arrayBufferToBase64(array)
if (res.statusCode == 200) {
  that.setData({
    qrcode: 'data:image/jpeg;base64,' + base64, // data 为接口返回的base64字符串 
  })
}

附:前端请求获取access_token与小程序二维码(试试)

wx.request({
      // 获取token
      url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',
      data: {
        appid: '***', // 小程序appid
        secret: '***' // 小程序秘钥
      },
      success(res) {
        // res.data.access_token 
        wx.request({
          url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + res.data.access_token,
          method: 'POST',
          data: {
            'path': "/pages/index/index",
            "width": 430
          },
          success(res) {
            console.log(res.data)
            // 后台转二进制流,后台获取后,直接保存为图片,然后将图片路径返回给前台
            // 前端转,如上 
          }
        })
      }
    })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
15 个 JavaScript Web UI 库
May 19 Javascript
IE中createElement需要注意的一个问题
Jul 13 Javascript
node.js实现多图片上传实例
Jun 03 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
JS往数组中添加项性能分析
Feb 25 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
Vue过滤器的用法和自定义过滤器使用
Feb 08 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
js装饰设计模式学习心得
Feb 17 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
解决Vue打包上线之后部分CSS不生效的问题
Nov 12 Javascript
使用p5.js临摹动态图形
Oct 23 #Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 #Javascript
p5.js临摹动态图形实现方法详解
Oct 23 #Javascript
jQuery实现轮播图源码
Oct 23 #jQuery
JavaScript实现图片轮播特效
Oct 23 #Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 #jQuery
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 #Javascript
You might like
php cli 小技巧
2013/06/03 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
laravel请求参数校验方法
2019/10/10 PHP
javascript 表单规则集合对象
2009/07/21 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
Vue表单实例代码
2016/09/05 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python返回数组/List长度的实例
2018/06/23 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
公诉意见书范文
2015/06/05 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
周一问候语大全
2015/11/10 职场文书
小学思品教学反思
2016/02/20 职场文书
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL