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


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 相关文章推荐
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
javascript Window及document对象详细整理
Jan 12 Javascript
jquery 页面滚动到底部自动加载插件集合
Jan 31 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 Javascript
jquery tmpl模板(实例讲解)
Sep 02 jQuery
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
RequireJS用法简单示例
Aug 20 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
JS出现404错误原理及解决方案
Jul 01 Javascript
js实现缓动动画
Nov 25 Javascript
js 实现验证码输入框示例详解
Sep 23 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 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python统计一个文本中重复行数的方法
2014/11/19 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python获取栅格点和面值的实现
2020/03/10 Python
基于keras中的回调函数用法说明
2020/06/17 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
时尚休闲吧创业计划书
2014/01/25 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
领导干部失职检讨书
2015/05/05 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers