小程序前端生成界面二維碼

本來年底跑路了诵肛,但上上家公司還一直打電話镀虐、發(fā)視頻叫我?guī)兔ψ鍪孪潴。疃嗟木褪巧尚〕绦蚪缑娑S碼供市場部推廣(寫需求也不少,還拖欠一個月工資刮便,蠻過分的)顽腾,總不能一直做重復(fù)工作吧,因此诺核,寫了一個組件抄肖,引入需要生成二維碼的界面,點擊即可生成窖杀,一勞永逸漓摩。


效果圖

1、二維碼生成組件

? ? 1入客、1在工程根目錄新建component文件夾管毙,然后右鍵新建Component


目錄結(jié)構(gòu)

? ? 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:{}

? ? }

? },

? /**

? * 組件的初始數(shù)據(jù)

? */

? 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('組件數(shù)據(jù):',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 業(yè)務(wù)邏輯

? ? 獲取二維碼卓舵,先要獲取token,需要傳appid和小程序secret膀钠,最開始我采用B接口掏湾,因為數(shù)量無限,且永不過期肿嘲,但是scene長度微信做了限制融击,我需要傳的界面參數(shù)id大于32,只能放棄b接口。

1雳窟、4尊浪、1獲取token


獲取token

1、4、2 獲取二維碼

? ? 有三個需要注意的地方:

? ? ? ? 1拇涤、token不能放在body里捣作,需要直接在url后面拼接;

? ? ? ? 2工育、重點:responseType要指定為'arraybuffer'虾宇,不然微信返回的二進(jìn)制image組件顯示不了搓彻;

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

獲取二維碼

2旭贬、使用組件

? ? wxml

? ? qrdata父組件傳值給qrcode組件

wxml

js

傳頁面路徑和參數(shù)


js

收工

? ? 我是iOS怔接,不是正經(jīng)h5,代碼寫的粗糙稀轨,各位輕噴扼脐。。奋刽。簡書的Markdown不太會用瓦侮,各位湊合著看吧。佣谐。肚吏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狭魂,隨后出現(xiàn)的幾起案子罚攀,更是在濱河造成了極大的恐慌,老刑警劉巖雌澄,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斋泄,死亡現(xiàn)場離奇詭異,居然都是意外死亡镐牺,警方通過查閱死者的電腦和手機(jī)炫掐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睬涧,“玉大人卒废,你說我怎么就攤上這事≈娴兀” “怎么了摔认?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宅粥。 經(jīng)常有香客問我参袱,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任抹蚀,我火速辦了婚禮剿牺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘环壤。我一直安慰自己晒来,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布郑现。 她就那樣靜靜地躺著湃崩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪接箫。 梳的紋絲不亂的頭發(fā)上攒读,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音辛友,去河邊找鬼薄扁。 笑死,一個胖子當(dāng)著我的面吹牛废累,可吹牛的內(nèi)容都是我干的邓梅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼邑滨,長吁一口氣:“原來是場噩夢啊……” “哼日缨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驼修,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤殿遂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乙各,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耳峦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹲坷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡循签,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出县匠,到底是詐尸還是另有隱情撒轮,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布题山,位于F島的核電站,受9級特大地震影響故痊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愕秫,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豫领。 院中可真熱鬧抡柿,春花似錦舔琅、人聲如沸等恐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽课蔬。三九已至,卻和暖如春郊尝,著一層夾襖步出監(jiān)牢的瞬間二跋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工流昏, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留扎即,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓况凉,卻偏偏與公主長得像谚鄙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刁绒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

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