今天分享一下如何在[uni-app](https://www.aliyue.net/10258.html)中生成帶有參數的二維碼,主要用于分享和推廣使用。首先分享一下思路和流程,最后總結一下需要注意的事項。
首先看一下效果圖吧。【請忽略圖上的二維碼。】

**需求:**
* 1、點擊生成專屬二維碼
* 2、彈出框展示生成的二維碼,附帶當前用戶的個人信息
* 3、點擊保存可以保存到手機相冊
代碼如下:
~~~
<view class="my_list_item" @click="createQrCode">
<view>生成專屬二維碼</view>
</view>
~~~
彈出框:
~~~
<!-- 二維碼彈出層 -->
<view class="qrcode" v-if="showQrcode">
<view class="code_content">
<image :src="src2" style="width: 400rpx;height: 400rpx; margin: 10px auto; display: block;" mode="widthFix"></image>
<button class="savePoster" @click="savePoster" type="primary">保存到相冊</button>
</view>
<image src="../../../static/icon_close.png" class="close_code" @click="closeCode"></image>
</view>
~~~
微信官方文檔:[https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html?](https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html)
??注意: 需要注意的是小程序分享二維碼有三種方法,分別對應不同的需求,具體詳情請看微信官方文檔。
### 第一步: 獲取 access\_token
~~~
getToken() {
uni.showLoading({
title: '加載中',
mask: true
})
let APPID = '從后臺獲取'
let APPSECRET = '從后臺獲取'
uni.request({
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`,
method: "GET",
}).then((res) => {
if (res[1].data.expires_in != 7200) {
uni.showToast({
title: "分享失敗,請重新嘗試。",
icon: "none",
duration: 2000
})
uni.hideLoading();
return
}
console.log(res)
this.shareToken = res[1].data.access_token
uni.hideLoading();
}).catch(err => {
console.log(err)
uni.hideLoading();
})
},
~~~
這里需要注意的是,現在我們是在前端寫的,測試的時候設置成為不校驗域名,真是線上版本的時候,是不能這么寫的,因為涉及到機密的數據:APPID 和?APPSECRET,微信是強制不讓在前端做這個。
報錯: https://api.weixin.qq.com不在以下 request 合法域名列表中,請參考文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/network.html

所以必須在服務器上獲取token 然后再通過后臺的服務器返回 token給前端。(沒有服務器的也不要擔心,云開發可以解決這個難題,寫一個云函數來代替服務器返回token)
### 第二步:將要轉換的頁面和參數轉換為小程序碼
??: 請求微信的接口的時候請求方式為post,要注意設置相應的數據格式為**arraybuffer**,請求完畢后將數值轉換為base64。
~~~
getWxCode() {
let that = this
let userId = uni.getStorageSync('userId') //這里是我要傳遞的參數
let scene='t/qrcode01*id/'+ userId; // 這里設置了渠道和分享人的信息
//let scene= 'id=123&name=jack' 也可以是這樣子的格式
console.log(scene)
uni.showLoading({
title: '加載中',
mask: true
})
uni.request({
url: `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${this.shareToken}`,
method: "POST",
data: {
scene: scene,
page: 'pages/index/index'
},
responseType: 'arraybuffer',
success: function(res) {
uni.hideLoading();
let src = wx.arrayBufferToBase64(res.data);
that.src2 = 'data:image/png;base64,' + src;
that.showQrcode = true //控制彈出框,展示二維碼
}
})
},
~~~
注意??????:**通過微信開發文檔將頁面轉換為帶參數的小程序碼(一定要保證當前小程序有線上版本)**
最后連貫起來就是:
~~~
createQrCode() {
console.log("生成專屬二維碼")
if(this.src2){
this.showQrcode = true
} else {
this.showQrcode = false
this.getToken()
}
},
~~~
頁面中如果獲取傳遞的參數呢?
~~~
onLoad: function (options) {
let scene = decodeURIComponent(options.scene)
console.log(scene)
},
~~~
[如何解處理所接收到的 scene](https://www.aliyue.net/10297.html)?所生成的圖片我們[如何保存到手機相冊](https://www.aliyue.net/10302.html)? 下一篇文章一起分享。
- 空白目錄
- thinkcmf的權限管理
- thinkcmf+unicmf添加頁面
- Thinkphp5做后臺 Uni-app做前臺解決跨域問題
- 組件
- h5跨域-uniapp
- thinkphp5 auth 教程
- thinkphp5Auth類
- uniapp添加與編輯的差別
- 常見的請求方式
- uni 單選回顯數據_uniapp 頁面跳轉傳值和接收
- uni-app 單選/多選/滑動 demo
- 關于uniapp checkbox多選框如何傳值傳數據
- uniApp 多選框checkbox ,判斷是否選中
- uniapp添加復選框和獲取復選框的值
- uni-app中全選多選單選
- uniapp多選框CheckBox 數據接收
- uniapp下拉列表單選框復選框實戰demo(編輯或詳情頁)
- uni-data-CheckBox-OK
- js 字符串數組轉換成數字數組
- js把字符串轉為數組對象
- js中數組對象字符串的相互轉換
- JS怎么把字符串數組轉換成整型數組
- 小程序開發
- tp5.1跨域請求
- uniapp-h5跨域
- 新增
- order
- uni-app中調取接口的三種方式與封裝uni.request()
- uView-checkbox
- 給u-view的u-select賦值
- uView-下拉框、復選框、單選框 數據發送及接收
- CURD操作
- thinkphp5.1增刪改查
- TP5.1添加數據成功之后返回自增主鍵id
- Thinkphp實戰之Request默認值except only 以及過濾參
- uni-app跨域解決方案
- thinkphp5.1+uni-app接口開發中跨域問題解決方案
- tp6 + uniapp 前后端跨域解決方案
- uniapp-token相關
- uniapp request請求封裝包含token兼容多端,簡單易用
- CORS.php
- ThinkPHP6 API開發前后端分離用戶信息保存在后端的方法
- thinkphp的jwt(JSON Web Token)身份驗證
- thinkphp6增刪改查
- PHP模擬GET,POST請求
- php模擬get、post發送請求的6種方法
- thinkphp6
- uniapp封裝網絡請求
- thinkphp6搭建后端api接口jwt-auth
- uniapp實現APP微信登錄流程
- [uni-app] 中保持用戶登錄狀態
- 詳解vue中localStorage的使用方法
- vue 實現通過vuex 存儲值 在不同界面使用
- dispatch:異步操作,數據提交至 actions ,可用于向后臺提交數據
- ThinkPHP6.0 + Vue + ElementUI + axios 的環境安裝到實現 CURD 操作
- tp6錯誤集
- TP6 模型插入/添加數據,自動插入時間(自動時間戳)
- 手機不開機維修思路
- thinkphp6解決vue跨域問題
- 從0基礎獲取短視頻去水印解析接口制作
- thinkphp5 刪除緩存
- thinkPHP,怎么把json文件里面的數據導入數據庫
- 數字轉字符php
- php – 直接用curl下載遠程文件
- thinkphp – 直接用curl下載遠程文件
- apiAdmin安裝
- echart
- thinkphp開發小程序推廣分享帶參數二維碼生成
- php同比增加函數
- PHP獲取同比上周、上一個月,上一個季度,去年時間區間
- “前3秒”金句100例,趕緊收藏起來!
- PHP配合微信公眾號生成推廣二維碼
- thinkphp5+php微信公眾號二維碼掃碼關注推廣二維碼事件實現
- 獲取當前時間上一周的開始時間和結束時間
- TP6 查找指定工作日
- PHP 獲取當天、近一周、本周、上月、本月、本季度、上季度時間方法大全
- php獲取今日、昨日、本周、本月 日期方法
- Tp5+mysql按年季度月周日小時查詢時無數據的時間段補0方法
- mysql按天統計的時候,該天沒有數據也要統計為0
- 列出一星期的日期 無數據補0
- thinkphp6本周 上周 周一 周末日期
- 補全日期 無數據補0
- php+pv統計代碼實現,Laravel 10 行代碼實現簡單的網站 pv uv 統計
- 通過API獲取ip地址以及城市和運營商
- 獲取訪客信息
- 13行代碼實現微信小程序設置概率觸發激勵視頻閱讀文章
- uniapp 微信小程序 獲取場景值和場景值個性化參數
- 微信小程序分享小程序碼的生成(帶參數)以及參數的獲取
- 小程序推廣分享帶參數二維碼生成
- uniapp微信小程序生成對應頁面二維碼
- uniapp獲取當前頁面url
- uniapp微信小程序--微信登錄
- 微信小程序,生成小程序碼中scene參數的存放和獲取問題
- uni-app 微信小程序生成二維碼帶參數
- uni-app 微信小程序如何把圖片保存到本地相冊?
- thinkPHP5使用assign()傳遞富文本,前端解析成HTML標簽
- tp6解析編輯器里面的html標簽原樣輸出
- PHP判斷url鏈接是否被百度收錄
- 微擎安裝模塊時提示 Failed to connect to we7.rewlkj.com port 80: Timed out
- 小程序碼生成
- thinkphp開發小程序推廣分享帶參數二維碼生成0
- tp3.2偽靜態
- apiadmin安裝教程-2022.8更新
- autojs事件代碼
- uuuu
- thinkphp6: API 多版本控制