uni-app 小程序二維碼的生成及保存

前言:最近寫(xiě)了小程序二維碼,分享一下

前面只寫(xiě)了小程序端的實(shí)現(xiàn)(有人在評(píng)論指出),現(xiàn)在更新下兼容版本且预,主要實(shí)現(xiàn)還是在-圖像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'))
    })
}

應(yīng)用:

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

下面是從前的內(nèi)容

  • 通過(guò)接口獲取token烙无,直接調(diào)取微信接口POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
    這個(gè)方法在模擬器上可以實(shí)現(xiàn)锋谐,但是由于安全域名的配置不能是https://api.weixin.qq.com。截酷。怀估。所以必須由后臺(tái)獲取

  • 說(shuō)一下實(shí)現(xiàn):
    獲取接口返回的數(shù)據(jù)(我這邊由后臺(tái)處理返回的是base64),然后把數(shù)據(jù)轉(zhuǎn)圖片文件合搅,由canvas畫(huà)出來(lái)(小程序的canvas繪制圖片,圖片路徑必須為本地的路徑)

  • 組件代碼(接口返回?cái)?shù)據(jù)處理):

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() //畫(huà)圖
    })
})

  • base64轉(zhuǎn)圖片文件代碼:
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})
}

好啦歧蕉,完成灾部。。惯退。撒花花~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赌髓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子催跪,更是在濱河造成了極大的恐慌锁蠕,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懊蒸,死亡現(xiàn)場(chǎng)離奇詭異荣倾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骑丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)舌仍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妒貌,“玉大人,你說(shuō)我怎么就攤上這事铸豁」嗍铮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵节芥,是天一觀的道長(zhǎng)在刺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)头镊,這世上最難降的妖魔是什么蚣驼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮拧晕,結(jié)果婚禮上隙姿,老公的妹妹穿的比我還像新娘。我一直安慰自己厂捞,他們只是感情好输玷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著靡馁,像睡著了一般欲鹏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臭墨,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天赔嚎,我揣著相機(jī)與錄音,去河邊找鬼胧弛。 笑死尤误,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的结缚。 我是一名探鬼主播损晤,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼红竭!你這毒婦竟也來(lái)了尤勋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茵宪,失蹤者是張志新(化名)和其女友劉穎最冰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體稀火,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暖哨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凰狞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹿蜀。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箕慧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茴恰,到底是詐尸還是另有隱情颠焦,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布往枣,位于F島的核電站伐庭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏分冈。R本人自食惡果不足惜圾另,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雕沉。 院中可真熱鬧集乔,春花似錦、人聲如沸坡椒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)倔叼。三九已至汗唱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丈攒,已是汗流浹背哩罪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巡验,地道東北人际插。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像显设,于是被迫代替她去往敵國(guó)和親框弛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,093評(píng)論 1 32
  • 1敷硅、開(kāi)啟公眾號(hào)開(kāi)發(fā)者模式 公眾平臺(tái)的技術(shù)文檔目的為了簡(jiǎn)明扼要的交代接口的使用,語(yǔ)句難免苦澀難懂愉阎,甚至對(duì)于不同的讀者...
    good7758閱讀 1,513評(píng)論 0 1
  • 導(dǎo)語(yǔ):在小程序項(xiàng)目開(kāi)發(fā)中绞蹦,分享能力幾乎是每個(gè)項(xiàng)目必備的要求,但原生的分享能力比較有限榜旦,不夠靈活幽七,今天就我們就一起來(lái)...
    極樂(lè)叔閱讀 1,753評(píng)論 1 11
  • 本次收獲get正確打開(kāi)繪本的方式澡屡。閱讀繪本的關(guān)鍵點(diǎn):1.定義2.真繪本3.讀者結(jié)構(gòu)4.獨(dú)特價(jià)值5.圖文元素6.獨(dú)特...
    開(kāi)心果_8d1b閱讀 230評(píng)論 0 1
  • 1猿挚、從本篇文章中我學(xué)到的最重要的概念:The combination of characteristics tha...
    332三七就是二十一閱讀 146評(píng)論 2 1