美文网首页
uni-app 小程序二维码的生成及保存

uni-app 小程序二维码的生成及保存

作者: 葶子123 | 来源:发表于2019-07-17 15:06 被阅读0次

前言:最近写了小程序二维码,分享一下

前面只写了小程序端的实现(有人在评论指出),现在更新下兼容版本,主要实现还是在-图像base64保存为文件,下面上一下兼容版本的

export function base64ToPath(base64) {
    return new Promise(function(resolve, reject) {
        if (typeof window === 'object' && 'document' in window) {
            base64 = base64.split(',')
            var type = base64[0].match(/:(.*?);/)[1]
            var str = atob(base64[1])
            var n = str.length
            var array = new Uint8Array(n)
            while (n--) {
                array[n] = str.charCodeAt(n)
            }
            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
        }
        var extName = base64.match(/data\:\S+\/(\S+);/)
        if (extName) {
            extName = extName[1]
        } else {
            reject(new Error('base64 error'))
        }
        var fileName = Date.now() + '.' + extName
        if (typeof plus === 'object') {
            var bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
            bitmap.loadBase64Data(base64, function() {
                var filePath = '_doc/uniapp_temp/' + fileName
                bitmap.save(filePath, {}, function() {
                    bitmap.clear()
                    resolve(filePath)
                }, function(error) {
                    bitmap.clear()
                    reject(error)
                })
            }, function(error) {
                bitmap.clear()
                reject(error)
            })
            return
        }
        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
            wx.getFileSystemManager().writeFile({
                filePath: filePath,
                data: base64.replace(/^data:\S+\/\S+;base64,/, ''),
                encoding: 'base64',
                success: function() {
                    resolve(filePath)
                },
                fail: function(error) {
                    reject(error)
                }
            })
            return
        }
        reject(new Error('not support'))
    })
}

应用:

import { base64ToPath } from '@/common/plus.js'
base64ToPath(url).then(path=>{
    console.log(path)
})

下面是从前的内容

  • 通过接口获取token,直接调取微信接口POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
    这个方法在模拟器上可以实现,但是由于安全域名的配置不能是https://api.weixin.qq.com。。。所以必须由后台获取

  • 说一下实现:
    获取接口返回的数据(我这边由后台处理返回的是base64),然后把数据转图片文件,由canvas画出来(小程序的canvas绘制图片,图片路径必须为本地的路径)

  • 组件代码(接口返回数据处理):

import {getQrCode} from "@/api/spu.js"
//获取小程序码
getQrCode(this.option.path).then(res=>{
    uni.showLoading({title: '正在生成图片'});
    this.base64ToPath(res.result,path=>{
        console.log(path)
        this.qrCodeRes = path
        this.toDrawCanvas() //画图
    })
})

  • base64转图片文件代码:
base64ToPath(path,success) {
    let that = this
    var fileName = Date.now() + '.' + 'png'
    if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
        var filePath = wx.env.USER_DATA_PATH + '/' + fileName
        wx.getFileSystemManager().writeFile({
            filePath: filePath,
            data: path,
            encoding: 'base64',
            success() {
                success(filePath)
            },
            fail(error) {
                that.$toast(error)
            }
        })
        return
    }
}
  • 接口代码:
//获取微信小程序二维码(接口)
export function getQrCode(path,success) {
    let param = {
        "page":"pages/product/detail/index",
        "scene":path.split('?')[1],
        "width":"280"
    }
    return apiBase('wx/getXcxQrCode',param,{showLoading:false,resAll:true})
}

好啦,完成。。。撒花花~~~

相关文章

网友评论

      本文标题:uni-app 小程序二维码的生成及保存

      本文链接:https://www.haomeiwen.com/subject/vgiqlctx.html