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


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 相关文章推荐
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 Javascript
js实现StringBuffer的简单实例
Sep 02 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
在vue中解决提示警告 for循环报错的方法
Sep 28 Javascript
详解js实时获取并显示当前时间的方法
May 10 Javascript
jquery中为什么能用$操作
Jun 18 jQuery
vuejs移动端实现div拖拽移动
Jul 25 Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
Feb 23 Javascript
小程序自定义轮播图圆点组件
Jun 25 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python松散正则表达式用法分析
2016/04/29 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
Pytorch to(device)用法
2020/01/08 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
保护动物倡议书
2014/04/15 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
保密工作目标责任书
2014/07/28 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书