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


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 相关文章推荐
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
jquery获取input表单值的代码
Apr 19 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
Mar 27 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
Jun 08 Javascript
详解使用fetch发送post请求时的参数处理
Apr 05 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
Rollup处理并打包JS文件项目实例代码
May 31 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
vue实现倒计时获取验证码效果
Apr 17 Javascript
vue如何使用rem适配
Feb 06 Vue.js
一文帮你理解PReact10.5.13源码
Apr 03 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python守护进程用法实例分析
2015/06/04 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
详解django中Template语言
2020/02/22 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
农民致富事迹材料
2014/01/23 职场文书
英语生日邀请函
2014/01/23 职场文书
擅自离岗检讨书
2014/09/12 职场文书
中学校园广播稿
2015/08/18 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
Mysql如何查看是否使用到索引
2022/12/24 MySQL