dev 命令行参数调用_云开发·云调用生成小程序码
小程序云開發已經支持云調用,開放了很多接口,一直想要的獲取小程序碼也支持了。這下輕量的小程序也可以有自定義小程序碼的功能。
1. 需求
獲得一個帶參數的小程序碼,傳播出去以后,用戶掃碼進入指定頁面,根據參數做不同的處理。本文只講小程序碼生成、存儲、展示部分。參數處理不多介紹,可以查看 項目代碼 了解更多。
2. 開通云開發
新建小程序可以從開發工具的云開發模板初始化項目,根據云開發操作指引新建項目即可。
但是這里有個問題,已發布小程序的頁面才能生成小程序碼。如果現有的小程序沒有開通云開發,需要做以下幾步:
3. 生成小程序碼
下面可以開始寫代碼開發了,開始之前,建議先看完官方教程。特別是開發工具的使用步驟,開發和調試時如果遇到奇怪的問題,可以嘗試重啟開發工具、重裝開發工具,也可以去微信開放社區發帖。(重啟和重裝都是我在社區中發現的答案,能解決各種不應該存在的問題)。
3.1 準備文件
在 cloudfunctions目錄右鍵新建Node.js云函數 getqr。
生成小程序碼需要單獨指定權限。在 getqr 目錄新建 config.json ,里面寫以下內容:
{"permissions": {"openapi": ["wxacode.getUnlimited"]} } 小程序碼的獲取方式有三種,這里只用到了接口 getUnlimited,選擇這個接口的原因是漂亮的圓形小程序碼,數量無限制。具體區別可以去 獲取小程序碼官方文檔查看詳情。正常情況下,這個時候云函數可以部署測試了。如果遇到部署不成功、各種權限問題,可以嘗試本地部署上傳所有文件、重啟試試。
3.2 生成小程序碼
生成小程序碼的代碼如下,可以指定頁面和頁面參數 scene,還有小程序碼的尺寸。
注意這里的 scene 有限制: 1. 最大32個可見字符; 2. 只支持數字,大小寫英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~; 3. 注意參數格式:下面實例代碼生成小程序碼后,掃碼獲得 pages/demo/demo?scene=id%3D6 。
try {const result = await cloud.openapi.wxacode.getUnlimited({page: 'pages/demo/demo',scene: 'id=6',width: 240,})console.log(result)return result } catch (err) {console.log(err)return err }直接調用,比服務端調用少了 access_token 參數。
3.3 上傳到云存儲
返回值中的 buffer 就是圖片內容,直接上傳到云存儲:
const uploadResult = await cloud.uploadFile({cloudPath: 'shareqr/' + qr_name_hash + '.jpg',fileContent: result.buffer, });- 我在云存儲新建了 shareqr 目錄保存小程序碼;
- 圖片名根據參數取md5摘要;
- getUnlimited 返回的圖像是 jpeg 格式,后綴硬編碼寫 .jpg。
3.4 獲取圖片臨時路徑
直接上代碼
getURLReault = await cloud.getTempFileURL({fileList: [uploadResult.fileID] }); fileObj = getURLReault.fileList[0] return fileObj3.5 直接從存云存儲獲取
生成過以后圖片已經保存在云存儲,用同樣的參數第二次調用沒必要再生成一次,去掉一次網絡請求,可以節省不少時間。
前面說到文件名使用請求參數摘要,知道了目錄和文件名,再加上文件bucket前綴就可以拼出來 fileID,用fileID 可以查詢云存儲的文件。
比如我剛剛生成的 fileID 是 cloud://dev-xxxx.8888-dev-xxxx/qr/44ea42f05091c3bec771123e6e8cd4c2.jpg, 前綴就是 cloud://dev-xxxx.8888-dev-xxxx/。再拼上目錄、文件名、后綴就是 fileID。
注:此處的 fileID拼接方法并不是來自官方文檔,只是在使用中發現這個前綴不會變。還需要官方解釋說明fileID規則。 如果會改變,就需要再用云數據庫存儲fileID,更麻煩一些。3.6 云函數完整代碼
// 云函數入口文件 const cloud = require('wx-server-sdk'); const crypto = require('crypto'); const bucketPrefix = 'cloud://dev-xxxx.8888-idc-4d11a4-1257831628/qr/'; // env: 'dev-xxxx'// 云函數入口函數 exports.main = async (event, context) => {const full_path = event.page + '?' + event.scene;const qr_name_hash = crypto.createHash('md5').update(full_path).digest('hex');const temp_id = bucketPrefix + qr_name_hash + '.jpg';// return {// full_path,// qr_name_hash,// temp_id// }try {// 先嘗試獲取文件,存在就直接返回臨時路徑let getURLReault = await cloud.getTempFileURL({fileList: [temp_id]});// return getURLReault;let fileObj = getURLReault.fileList[0];if (fileObj.tempFileURL != '') {fileObj.fromCache = true;return fileObj;}// 生成小程序碼const wxacodeResult = await cloud.openapi.wxacode.getUnlimited({scene: event.scene,page: event.page,width: 240})// return wxacodeResult;if (wxacodeResult.errCode != 0) {// 生成二維碼失敗,返回錯誤信息return wxacodeResult;}// 上傳到云存儲const uploadResult = await cloud.uploadFile({cloudPath: 'qr/' + qr_name_hash + '.jpg',fileContent: wxacodeResult.buffer,});// return uploadResult;if (!uploadResult.fileID) {//上傳失敗,返回錯誤信息return uploadResult;}// 獲取圖片臨時路徑getURLReault = await cloud.getTempFileURL({fileList: [uploadResult.fileID]});fileObj = getURLReault.fileList[0];fileObj.fromCache = false;// 上傳成功,獲取文件臨時url,返回臨時路徑的查詢結果return fileObj;} catch (err) {return err}}4. 小程序頁面調用
調用頁面就比較簡單了,在小程序新建一個 pages/share/share 在 onLoad 函數調用云函數。
// 使用前記得先初始化云函數,一版放到 app.js onLaunch() 中 // wx.cloud.init({env: 'dev-8888'})wx.cloud.callFunction({name: 'getqr',data: {page: 'pages/demo/demo',scene: 'id=6',} }).then(res => {console.log(res.result);if (res.result.status == 0) {_this.setData({qr_url: res.result.tempFileURL})}else{wx.showToast({icon: 'none',title: '調用失敗',})} }).catch(err => {console.error(err);wx.showToast({icon: 'none',title: '調用失敗',}) })至此完整的調用過程已經全部完成,詳細代碼可以到 項目代碼 查看。
代碼中還對入口頁面和share頁面的參數做了包裝,云函數可以直接使用,小程序可以稍做修改適應自己業務。
寫在最后
小程序云開發已經開放了很多功能,除了這次提到的生成小程序碼,云調用還可以發送模板消息。有需要的開發者又一個理由可以快速上線新功能了。
云開發還開放了HTTP API,也就是用自己的服務器調用云函數。以前看完云開發介紹文章最大的疑問就是,你說的都很好,可是后臺數據怎么管理呢?不能跟自己的服務器結合,只能放一些輕量的小程序。有了 HTTP API 以后就可以用自己的服務器做管理后臺了。這時候你要問,都用上服務器了,還需要云開發做什么。首先,云開發免費;其次,免費功能已經夠強,就差不能做Web管理后臺了;最后,獲取access_token(小程序及小游戲調用不要求IP地址在白名單內。)
總結
以上是生活随笔為你收集整理的dev 命令行参数调用_云开发·云调用生成小程序码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python计算圆周率_Python实现
- 下一篇: python反转列表_Python实现l