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


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 input 数字验证代码
Jul 30 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
Mar 02 Javascript
Node.js中使用计时器定时执行函数详解
Aug 15 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 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
cmd下运行php脚本
2008/11/25 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
一个用js实现的页内搜索代码
2007/05/23 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python中对list去重的多种方法
2014/09/18 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python学习之time模块的基本使用
2021/01/17 Python
南京迈特望C/C++面试题
2012/07/09 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
运动会入场口号
2014/06/07 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
科技活动总结范文
2015/05/11 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技