小程序云函数获取openid_微信小程序云开发之旅

小程序云函数获取openid_微信小程序云开发之旅_第1张图片

眨眼间功夫,距离上次开发小程序已经过了2 年有余,近期刚好因工作需要,又重新关注了一下小程序的最新发展。 发现其生态完善了许多,几乎涵盖了客户端90%以上的功能,特别是 云开发 这个特性,拉近了前后端开发的距离。

接下来我们通过一个具体的小程序案例来介绍一下云开发过程中遇到的一些问题。

先来看下官方的介绍
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
云开发提供的能力
能力 作用 说明
云函数 无需自建服务器 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
数据库 无需自建数据库 一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
存储 无需自建存储和 CDN 在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理
云调用 无需自建数据库 基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力
基于以上 云开发所提供的能力,我们开发了一个 名为  趣文沸点 的 小程序,主要目的是通过这个小程序去验证 云开发一些列功能的完善程度和整体的体验。

趣文沸点 是一个在线 语录、格言、段子查询类工具

接下来 我们重点介绍一下 开发 这个小程序过程中遇到的一些问题以及是如何解决的。
常见问题

1. 鉴权如何处理?

在小程序开发过程中需要加一个用户关注的功能,因此需要用户进行授权获取唯一标识以便 与数据进行关联。 传统的开发模式如下图所示:

小程序云函数获取openid_微信小程序云开发之旅_第2张图片

通过 wx.login()获取code然后将之发送至后台服务再结合 appid 和 appsecret 通过一些加密规则 调用微信接口获取 openid等信息,然后开发者服务器自定义用户的登录状态返回返回至小程序前台页面。整个流程还是相对较复杂的。 在云开发模式中,官方提供了 clound.getWXContext()函数 ,其背后已经将开发者服务器与微信接口服务交互的逻辑打通,用户层面直接通过其 获取OPENID,APPID, UNIONID等唯一标识。只需通过小程序与云函数间对用户的信息进行处理。

小程序云函数获取openid_微信小程序云开发之旅_第3张图片

2. 微信服务端已开放云调用的接口,如何使用? 这里我们通过具体的代码来介绍一下 以 security.msgSecCheck 如何使用
1) 在云函数的config.json 中添加如下配置

{
"permissions": { // 需要授权的接口
"openapi": [
"security.msgSecCheck",
]
}
}

2) 封装函数对外暴露

云函数文件:openapi.js

const cloud = require('wx-server-sdk');

cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});

exports.main = async (event, context) => {
return await cloud.openapi.security.msgSecCheck({ content: event.content });
}

3) 业务代码中调用

wx.cloud.callFunction({
name: 'openapi',
data: {
content: cont
},
success: res => {
// 具体逻辑处理
},
fail: err => {
// 接口调用异常梳理
}
});

  1. 数据库的一些常规操作

const cloud = require('wx-server-sdk');

cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});

let db = cloud.database();


1) 查询

db.collection("表名").where(db.command.and([{
cont: db.RegExp({ // cont 支持模糊搜索
regexp: `.*${event.cont}`,
options: 'i'
}),
types: db.command.in([0, 1, 2, 3]) // 类目查询
}]))
.orderBy('字段名', 'desc')
.orderBy('字段名', 'asc')
.skip(0)
.limit(20)
.get()

2) update 操作

db.collection("表名").doc("_id").update({
data: {
likes: db.command.inc(1) // 模拟字段,点击 自增加1
}
});

3)添加操作

db.collection("表名").add({
data: {
createTime: db.serverDate(), // 系统时间
likes: 0,
}
});

4)更新表结构

db.collection('表名').where({
type: db.command.eq(3) // 类型为 3
})
.update({
data: {
createTime: db.serverDate() // 新增字段
}
});

5) 删除操作

db.collection('表名').doc("_id").remove()

  1. 云服务器的选择

每个小程序默认可以免费申请 3个月的云服务器,配置为基础版本,可以设置两个环境,分别用于测试和生产。如果小程序上线后需要长时间维护,且有一定的用户基数,建议购买稍微高配置的服务。 注意事项 如果代码中没有设置环境配置,小程序默认会选择 第一个 创建的 环境。
部分效果图

小程序云函数获取openid_微信小程序云开发之旅_第4张图片

小程序云函数获取openid_微信小程序云开发之旅_第5张图片

小程序云函数获取openid_微信小程序云开发之旅_第6张图片

查看完整效果请直接点击文章底部小程序
源码地址

https://github.com/blue68/wx-qwfd

结语
小程序目前对个人用户限制较大,开放的类目在逐渐缩小,且审核阶段也较为严格,只要代码不符合相关规则就有被拒的风险。 如果有好的想法和思路建议申请企业号做深度开发且一定要合规,这样才能提高代码审核的通过率。

你可能感兴趣的:(小程序云函数获取openid)