小程序前端生成界面二维码

本来年底跑路了,但上上家公司还一直打电话、发视频叫我帮忙做事,最多的就是生成小程序界面二维码供市场部推广(写需求也不少,还拖欠一个月工资,蛮过分的),总不能一直做重复工作吧,因此,写了一个组件,引入需要生成二维码的界面,点击即可生成,一劳永逸。


效果图

1、二维码生成组件

    1、1在工程根目录新建component文件夹,然后右键新建Component


目录结构

    1、2 全局引入,注意路径


引入组件

1、3 废话不多说,直接上代码

```

<!--components/qrcode-tool.wxml-->

<view class="mainView" hidden="{{hidden}}">

  <image class="qrimg" src="{{qrimg}}" mode="scaleToFill" hidden="{{!flag}}"></image>

  <button type="warn" class="createBtn" bindtap="getToken">{{flag ? '完成' : '生成二维码'}}</button>

</view>

```

wxml

wxss

```

.mainView{

  position: absolute;

  height: 100vh;

  width: 100vw;

  top: 0;

  left: 0;

  z-index: 50;

  background: rgba(0, 0, 0, 0.5);

}

.qrimg{

  position: fixed;

  top: 10vh;

margin:auto;

  left: 0;

  right: 0;

  width: 200px;

  height: 200px;

}

.createBtn{

  position: fixed;

  bottom: 5vh;

  margin-left: 10vw;

  margin-right: 10vw;

  height: 50px;

  width: 80%;

  background-color: #00808D;

  text-align: center;

}

```

js

```

// components/qrcode-tool.js

const config = require('../utils/config.js');

Component({

  /**

  * 组件的属性列表

  */

  properties: {

    qrdata: {

      type:Object,

      value:{}

    }

  },

  /**

  * 组件的初始数据

  */

  data: {

    hidden:false,

    qrimg:'',

    flag:false

  },

  /**

  * 组件的方法列表

  */

  methods: {

    getToken: function () {

      if(this.data.flag){

        this.setData({hidden:true});

        return;

      }

      wx.showLoading({

        title: '正在生成中...',

      })

      let domain = 'https://api.weixin.qq.com/cgi-bin/token';

      let appid = config.appId();

      let appsecrt = config.appSecr();

      var param = {};

      param['grant_type'] = 'client_credential';

      param['appid'] = appid;

      param['secret'] = appsecrt;

      var that = this;

      wx.request({

        url: domain,

        data: param,

        method: 'get',

        success: function (res) {

          console.log('获取token成功,', res);

          that.getQRcode(res.data.access_token);

        },

        fail: function (fail) {

          console.log('获取token失败,', fail);

          wx.hideLoading()

          wx.showModal({

            title: '失败',

            content: '获取tokeo失败',

          })

        }

      })

    },

    getQRcode: function (token) {

      //var param = {'scene':this.qrdata.pa};

      //console.log('token:',token);

      //console.log('组件数据:',JSON.stringify(this.data.qrdata));


      let domian = 'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + token; //token要直接拼,不然报41001错误


      var param = {};

      //param['access_token'] = token;

      //param['scene'] = decodeURIComponent(this.data.qrdata.id);

      //param['page'] = this.data.qrdata.path;

      param['path'] = this.data.qrdata.path + '?' + this.data.qrdata.id

      //console.log('param:',JSON.stringify(param));

      var that = this;

      wx.request({

        url: domian,

        data: param,

        method: 'POST',

        responseType: 'arraybuffer',

        success: function(res){

          wx.hideLoading()

          console.log('获取小程序二维码成功');

          that.setData({

            flag:true,

            qrimg: "data:image/PNG;base64," + wx.arrayBufferToBase64(res.data)

          })

        },

        fail: function(fail){

          console.log('获取小程序二维码失败',fail);

          wx.hideLoading()

          wx.showModal({

            title: '失败',

            content: '请求二维码',

          })

        }

      })

    }

  }

})

```

1、4 业务逻辑

    获取二维码,先要获取token,需要传appid和小程序secret,最开始我采用B接口,因为数量无限,且永不过期,但是scene长度微信做了限制,我需要传的界面参数id大于32,只能放弃b接口。

1、4、1获取token


获取token

1、4、2 获取二维码

    有三个需要注意的地方:

        1、token不能放在body里,需要直接在url后面拼接;

        2、重点:responseType要指定为'arraybuffer',不然微信返回的二进制image组件显示不了;

        3、加上"data:image/PNG;base64,",然后拼接wx.arrayBufferToBase64返回的base64

获取二维码

2、使用组件

    wxml

    qrdata父组件传值给qrcode组件

wxml

js

传页面路径和参数


js

收工

    我是iOS,不是正经h5,代码写的粗糙,各位轻喷。。。简书的Markdown不太会用,各位凑合着看吧。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容