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


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 相关文章推荐
javascript 仿QQ滑动菜单效果代码
Sep 03 Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
JavaScript中扩展Array contains方法实例
Aug 23 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
javascript中的深复制详解及实例分析
Dec 29 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
ES6模块化的import和export用法方法总结
Aug 08 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 Javascript
js实现小时钟效果
Mar 25 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
使用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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
十天学会php(1)
2006/10/09 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
python实现大量图片重命名
2020/03/23 Python
如何在django中添加日志功能
2020/02/06 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
揠苗助长教学反思
2014/02/04 职场文书
运动会800米加油稿
2014/02/22 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
教育见习报告范文
2014/11/03 职场文书
工程合作意向书范本
2015/05/09 职场文书
工会经费申请报告
2015/05/15 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
Java设计模式之享元模式示例详解
2022/03/03 Java/Android