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


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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 Javascript
js获取指定的cookie的具体实现
Feb 20 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
用JavaScript获取页面文档内容的实现代码
Jun 10 Javascript
原生JS实现自定义滚动条效果
Oct 27 Javascript
20个最常见的jQuery面试问题及答案
May 23 jQuery
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
vue实现点击追加选中样式效果
Nov 01 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
php 获取完整url地址
2008/12/20 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
php简单提示框alert封装函数
2010/08/08 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python内置函数dir详解
2015/04/14 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python之os操作方法(详解)
2017/06/15 Python
Python编写一个闹钟功能
2017/07/11 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
python 自定义装饰器实例详解
2019/07/20 Python
python -v 报错问题的解决方法
2020/09/15 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
2016同学毕业寄语大全
2015/12/04 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Nginx源码编译安装过程记录
2021/11/17 Servers