云开发又简称TCB,是微信官方给我们提供的基于腾讯云的云服务器。
云开发包含:云数据库,云函数,云存储,云调用四项。
引用自官方的介绍
微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。
开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。
开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。
官网:https://cloud.weixin.qq.com/cloudbase
云开发的优势

云开发的能力概览

PS:如果小程序安装使用你都懂了,这些准备工作你可以不用看,直接可以从步骤11看起了。
1.微信官方文档中下载微信者开发工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html

2.点击红色框中进入下载详情页,也可以直接点击下面链接,直接进入下载页面。下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
3.选择自己需要的版本

4.找到下载的安装包,安装就是一直下一步,没什么可说的
5.登陆微信开发者工具,使用自己的微信扫码登陆即可
6.新建一个小程序

7.小程序注册(已经注册的略过),注册地址:https://mp.weixin.qq.com/
因为我自己的邮箱都用过了,就不一一演示了,注册的时候选择个人就行了。
8.AppID的获取(知道怎么使用和获取AppID的略过),红色框中就是你自己的AppID

9.填写小程序信息,填写自己的项目名称,目录就是小程序文件存放地址,AppID要使用自己的,需要自己去官网注册,才有自己的AppID。后端服务默认是微信云开发,但是我们也可以先不选择不使用云开发。需要的时候我们自己再开通,最后点击确定。

10.微信开发者工具登陆成功的页面

11-1.直接使用云开发,在登陆成功界面点击云开发按钮,这里的环境id可以先复制,下面要用

11-2.不使用云开发,在登陆成功界面,点击云开发按钮,需要自己填写环境名称,名称随意,语义化最好,但是不能用中文,付费方式选择按量付费就行了,毕竟有免费的可以先用着,一般来说,自己够用,最后点击确定,去开通云服务,得到的页面和直接使用(11-1)一样的页面。

12.添加云开发环境id,记得添加自己的环境id

官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/getting-started.html
创建集合并命名。(PS:个人喜欢仙剑,你们根据自己业务需要起名,这里只是举例。

这里我们可以点击页面上的添加记录,在这里直接添加一条记录,选择默认就行,直接点击确定
这样就有了第一条数据,但是只有默认的id,并没有数据,我们点击添加字段,自行添加字段

这里说一下,字段类型,就如下图,这些就是云数据库包含的数据类型

数据权限说明,默认选择仅创建者可读写,根据自己需求改变

在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用:
const db = wx.cloud.database()
// 如需获取其他环境的数据库引用,可以在调用时传入一个对象参数,在其中通过 `env` 字段指定要使用的环境。此时方法会返回一个对测试环境数据库的引用。
// 示例:假设有一个环境名为 `test`,用做测试环境,那么可以如下获取测试环境数据库:
const testDB = wx.cloud.database({
env: 'test' // 应为环境id
})
db.collection('xianjian').add({
data: {
name: this.data.user.name,
age: this.data.user.age
}
})
.then(res => {
console.log('成功', res)
})
.catch(err => {
console.log('失败', err)
})
db.collection('xianjian').doc('16db756f629f166a0633bd2b56c703f7').remove()
.then(res => {
console.log('成功', res)
})
.catch(err => {
console.log('失败', err)
})
PS:删除不是自己创建的数据的时候,会失败

db.collection('xianjian').doc('16db756f629f166a0633bd2b56c703f7').update({
data: {
name: '长卿',
age: 19
}
})
.then(res => {
console.log('成功', res)
})
.catch(err => {
console.log('失败', err)
})
PS:更新不是自己创建的数据的时候,虽然也返回成功,但是,修改成功的却是0

// 常规写法
db.collection('xianjian').get({
success(res) {
console.log(res)
},
fail(err) {
console.log(err)
}
})
// Promise写法
db.collection('xianjian').get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
// 需要使用doc
db.collection('xianjian').doc('16db756f629ec2e2062867784f3af2b9').get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
// 我们也可以一次性获取多条记录。通过调用集合上的 `where` 方法可以指定查询条件,再调用 `get` 方法即可只返回满足指定查询条件的记录。
// `where` 方法接收一个对象参数,该对象中每个字段和它的值构成一个需满足的匹配条件,各个字段间的关系是 "与" 的关系,即需同时满足这些匹配条件。
db.collection('todos').where({
'_id': '16db756f629ec2e2062867784f3af2b9',
'age': 18
})
.get({
success: function(res) {
console.log(res)
}
})
PS:可能会发现你请求的时候,data里面是空的,但是实际数据库有值,这是因为上面说的权限你没有修改,因为你在数据库直接添加的数据,和你现在查,是不算一个用户的。
PS:云数据库直接获取,最多只能获取20条数据,使用云函数的获取云数据库数据的话,最多能获取100条。
orderBy 接收两个参数,第一个是根据哪个字段排序,第二个字段是升序asc,还是降序descdb.collection('xianjian')
.orderBy('age','asc')
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
limitdb.collection('xianjian')
.limit(1)
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
skip 通常和limit一起使用,用于分页db.collection('xianjian')
.skip(1)
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
// 分页,返回第二页的10条数据
db.collection('xianjian')
.skip(10)
.limit(10)
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
command 有很多种,这里说两种
const _ = db.command
db.collection('xianjian')
.where({
age: _.gt(18)
})
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})

// 单个字段的逻辑操作符使用
// 方法一,流式写法
const _ = db.command
db.collection('xianjian')
.where({
age: _.gt(16).and(_.lt(20))
})
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
// 方法二,前置写法
const _ = db.command
db.collection('xianjian')
.where({
age:_.and(_.gt(16),_.lt(20)),
money:_.and([_.gt(10),_.lt(2000)]) // 前置写法也可以接收一个数组
})
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
// 多个字段的逻辑操作符使用
const _ = db.command
db.collection('xianjian')
.where(_.or([
{
age: _.gt(16).and(_.lt(18))
},
{
money: _.gte(1000)
}
]))
.get()
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
PS:逻辑操作符的组合使用多种多样,只要符合传参规则,怎么组合使用,可以说随你造。
云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源;各云函数完全独立;可分别部署在不同的地区。开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。
一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作,而且我们还可以通过云函数后端 SDK 搭配使用多种服务,比如使用云函数 SDK 中提供的数据库和存储 API 进行数据库和存储的操作,这部分可参考数据库和存储后端 API 文档。
云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。
官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions.html
cloud 文件夹
cloud 文件夹
cloud 文件夹就变了样子,上面有一朵云,这代表我们初始化成功了
uniapp中使用云函数方法一样,但是准备工作就有些不一样了
functions 文件夹(名称随便叫的,只是为了和原生的 cloud 区分开,写个不一样的)
根目安装依赖 npm install copy-webpack-plugin@5.0.3 -s
在根目录新建一个文件 vue.config.js,配置如下,请注意如果你的路径还有名称不一样,请记得修改

// vue.config.js
const path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
configureWebpack: {
plugins: [
new CopyWebpackPlugin([
{
from: path.join(__dirname, 'functions'),
to: path.join(__dirname, 'unpackage/dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM, 'functions')
}
])
]
}
}
manifest.json 添加云函数配置,记得点源码视图
4.1 添加如下配置 "cloudfunctionRoot": "./functions/"




// 我们可以用云函数来增删改查自己的数据库数据,方法同云数据库一样,只是多了云数据库这一步骤
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
return cloud.database().collection('xianjian').get()
}
npm i 下载依赖

wx.cloud.callFunction({
name: 'getList'
}).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
const cloud = require('wx-server-sdk')
// 给定字符串环境 ID:接下来的 API 调用都将请求到环境 另一个环境id
cloud.init({
env: '你的另一个环境id'
})
// 或者我们可以使用常量
const cloud = require('wx-server-sdk')
// 给定 DYNAMIC_CURRENT_ENV 常量:接下来的 API 调用都将请求到与该云函数当前所在环境相同的环境
// 请安装 wx-server-sdk v1.1.0 或以上以使用该常量
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
云存储提供高可用、高稳定、强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理。云存储包含以下功能:
- 存储管理:支持文件夹,方便文件归类。支持文件的上传、删除、移动、下载、搜索等,并可以查看文件的详情信息
- 权限设置:支持基础权限设置和高级安全规则权限控制
- 上传管理:在这里可以查看文件上传历史、进度及状态
- 文件搜索:支持文件前缀名称及子目录文件的搜索
- 组件支持:支持在
image、audio等组件中传入云文件 ID
官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/storage.html
// wxml
<button bindtap="upload" type="primary">点击上传</button>
<image src="{{imgurl}}" mode="aspectFill" />
// js
upload:function(){
let that = this
wx.chooseImage({
success (res) {
wx.showLoading({
title: '上传中,请稍等...',
})
let tempFilePaths = res.tempFilePaths
wx.cloud.uploadFile({
cloudPath: 'example.png',
filePath: tempFilePaths[0], // 文件路径
}).then(res => {
console.log(res.fileID)
that.setData({
imgurl: res.fileID
})
wx.hideLoading();
}).catch(error => {
console.log(error)
wx.hideLoading();
})
}
})
}
在云开发–> 存储中查看我们上传的图片,其他上传的文件也都在这里管理和查看,就不一一演示了。

// wxml
<button bindtap="download" type="primary">点击下载</button>
// js
download: function() {
// 这里我就固定下载文件了,实际业务肯定是点哪张下载哪张的
wx.cloud.downloadFile({
fileID: 'cloud://cloud1-8gq0wljn30854480.636c-cloud1-8gq0wljn30854480-1312356497/example.png'
}).then(res => {
console.log(res.tempFilePath)
wx.saveImageToPhotosAlbum({
filePath:res.tempFilePath,
success (res) {
console.log(res);
wx.showToast({
title: '下载成功',
icon: 'none',
mask: true
})
},
fail (err) {
console.log(err);
wx.showToast({
title: '下载失败,请重新尝试',
icon: 'none',
mask: true
})
}
})
}).catch(error => {
console.log(error)
})
}
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信
对传统的餐饮商家来说,小程序很好地解决了餐厅线下线上连接的问题,在引流获客、节约人力、营销宣传、塑造会员体系、改善消费体验等方面都有很大帮助。小程序点餐可以帮助餐饮企业节省一大把人力开支。一个包含扫码点单、菜品管理、优惠券推送、外卖配送的小程序,商家花几万元就能完成开发测试并投入。商家为什么要开通“扫码点餐”1.解决服务员不够用的问题。2.不怕顾客跑单漏单。3.在微信就能管理菜品、查看营业额。4.订单小票显示顾客桌号和已点菜品。5.可在“附近的小程序”找到您的门店。如今餐饮业常用的三种经营模式:1堂食点单模式客人通过小程序堂食点单。商家可以在微信扫码点餐小程序管理后台根据自己店内情况来设置不同
在开发微信小程序的时候,我们可能需要开发环境和测试环境,或者其他环境,下面是切换环境的方法。首先需要明确的是:前端的页面代码是不区分环境的,环境的区分指的是云函数、云数据库、云存储这些。1、更改云函数的使用云环境这里我们从cloud1更改为test-cloud,这个改完是没有用的,因为在前端代码指定了使用的云环境。cloudfunctions文件和miniprogram文件虽然都在一个目录下,但是这两个没有直接联系。2、在evList.js中添加自己云环境evList.js存储了云环境列表,这里把test-cloud加到这个列表里,需要填写envId和alias,参照cloud1写就行。3、更
前言微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的。一、申请流程和步骤图1-1注册微信支付账号获取微信小程序APPID获取微信商家的商户ID获取微信商家的API私钥配置微信支付回调地址绑定微信小程序和微信支付的关系搭建SpringBoot工程编写后台支付接口发布部署接口服务项目使用微信小程序或者UniAPP调用微信支付功能支付接口的封装配置jwt或者openid的token派发原生微信小程序完成支付对接二、注册商家2.1商户平台商家或者企业想要通过微信支付来进行商品的销售,必须先通过微信平台(pay.weixin.qq.com)去将商家进行注册。注册成
介绍 最近在做微信小程序时,顶部标题栏总是与胶囊对不齐。往往是在这款手机上对齐了,在另外一款手机差很多。我在查阅资料后,提出了一种方法解决这个问题,即:在页面onLoad或组件created时,利用微信小程序提供的API,获取系统状态栏高度和胶囊信息,进而动态调整顶部标题栏样式。在苹果、小米、荣耀手机做验证,能做到精准对齐。理论 胶囊样式应该是垂直居中,有1px的border,border-radius为18px。 若要使顶部标题栏与胶囊对齐,则其高度必须是导航栏高度,标题栏内容也要垂直居中,顶部标题栏的外边距或内边距必须是状态栏高度。 如果顶部
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。 因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不
微信小程序webview中使用cover-view展示分享弹窗公司业务需要在webview中添加分享弹窗,可以发送给朋友及生成海报分享,因为好几个详情都需要这个功能,因此抽离了share-sheet的组件,ui效果如下图:点击分享,显示以下弹窗share-sheet.wxml如下:{!show}}"catchtouchmove="poptouchmove">发送给朋友生成海报取消share-sheet.js如下:Component({options:{addGlobalClass:true,},/***组件的属性列表*/properties:{//控制弹窗显示与否show:{type:Bool