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


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 相关文章推荐
Prototype Class对象学习
Jul 19 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
jQuery实现复选框批量选择与反选的方法
Jun 17 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 Javascript
深入理解js generator数据类型
Aug 16 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
Dec 27 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
mpvue+vant app搭建微信小程序的方法步骤
Feb 11 Javascript
vue实现页面切换滑动效果
Jun 29 Javascript
Echarts如何重新渲染实例详解
May 30 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
PHP文本数据库的搜索方法
2006/10/09 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
python实现批量监控网站
2016/09/09 Python
python实现ip代理池功能示例
2019/07/05 Python
python增加图像对比度的方法
2019/07/12 Python
python判断自身是否正在运行的方法
2019/08/08 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
创先争优活动方案
2014/02/12 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
商场促销活动策划方案
2014/08/18 职场文书
党校个人总结
2015/03/04 职场文书
户外亲子活动总结
2015/05/08 职场文书