前言

日子中运用微信小程序的场景越来越多,它完结了用户对于运用“触手可及、用完即走”的抱负需求。微信小程序的开发难度也低于APP的开发制造,运用它会更便利、低本钱、高经济效益。

可是要完结一个小程序涉及到的技术栈比较多,要开发的模块也许多。比方:

  1. 微信小程序端的开发
  2. 小程序与后端接口的开发
  3. 后端办理体系的开发

等等

今日就来介绍下怎么运用kintone+小程序进行整合,完结包含从用户授权认证,到整个O2O体系的开发。

小程序开发

首先谈谈小程序的优势。它对于开发者友好,打破了平台壁垒,安卓和ios,咱们只需求开发一套代码,就能在各种终端运用。用户体系互通,都是依托微信的生态。而且能获得许多手机的开放才干,包含相机,音视频等,来完结各种pc端无法完结的功用。

下面就来详细说下从前后台完好完结一个小程序需求做哪些。

微信小程序+web数据库的开发实践

1.小程序结构


小程序客户端的开发主要是运用微信官方供给的开发结构,也能够运用第三方的开发结构,比方uniapp,taro等等。

那为什么要运用这些第三方结构呢?为了削减学习本钱和开发本钱!

由于咱们的供给的服务往往是多终端的。比方说有小程序,有运用app,有h5等。由于平台不同,开发言语也会不同,假如这些悉数交给独立团队进行开发,那本钱将十分高。而三方结构便是为了解决这个问题。运用一套工具,一套代码完结多端开发,多端布置。一个团队就能搞定啦!(抱负中的,假如事务不太杂乱,的确能够。)

uni-app 是运用 Vue.js 开发小程序的结构。市面上应该有一大半的小程序是运用uniapp来进行开发的。当然不仅是小程序,它还支撑 H5、App 等多端开发。由于是根据 Vue.js的语法,加上国内运用vue的程序猿十分多,所以这样能够削减咱们的学习本钱。

taro是运用react来进行小程序开发的结构。相同的,由于react也是十分盛行的前端结构,所以也是十分棒的第三方开发结构。

至于咱们倾向于哪种结构,咱们能够评论告诉咱们,哈哈。

2.单纯小程序客户端难以解决的问题


单纯只依托小程序客户端,仍是有许多问题需求面对。

  1. 每次事务的修正代码都需求发布一个版别。

    假如咱们把事务的处理封装成接口放在服务端后,只要接口的参数不变,咱们都不需求进行小程序的从头发布。

  2. 无法获取一些微信的才干,比方授权获取用户手机号。

    这些都是需求在服务端先经过获取access token,再去调用微信的api去获取用户手机。像这种恳求,都是不能够在客户端完结的。或许说是不安全,且受限的。一起像事务逻辑的处理之后的数据落地,也需求在服务端进行。

  3. 客户端的运算才干有限。

    一些核算型的事务放在服务端比方ocr辨认,ai言语模型的调用等等,运用服务端强壮的算力来解决,加速运算速度。

所以一个功用完好的小程序开发一般仍是需求用到中心的小程序服务层的。

3.小程序服务端开发


服务端开发能够运用云原生的办法开发也能够运用自建服务器进行开发。

其间unicloud(也是uniapp这家公司的)它供给了一个叫服务空间的解决方案。便是一种云原生的开发办法。它依托云服务商供给了一套云端nodejs的运行时环境,还供给了目标存储、mongodb数据库、redis缓存数据库等等。

然后云服务商你又能够自行挑选阿里云,腾讯云等。相当于原本你需求一个个配置的服务帮你打包卖给你,然后又供给了完好的接口去连接这些云服务,从底层抹平了云服务厂商间的差异。

事实证明,这套下来仍是省去了许多开发本钱以及云原生开发的学习本钱。当然假如你想运用其他言语进行后端开发,比方java、python、php等,那你也能够运用腾讯的云保管,经过docker来进行布置。而uniapp+unicloud的开发相当于你只运用js来完结全栈的开发。

kintone的人物

在小程序开发之前,咱们需求先完结一个后台体系,或许叫后端的开发。

拿kintone开发社区小程序举例。咱们的开发社区小程序做了“每日一题”、“活动报名”、“积分商城”等功用。 在这个体系中存储的数据部分来自于用户,还有部分数据则来自于体系本身的运营。比方体系运营人员经过后台添加活动,添加的每日答题等等。

所以咱们希望经过后端完结以下作业:

  • 数据库的规划
  • 后台办理体系
  • api接口的开发(供云函数调用

以此简要阐明下kintone的才干和定位。 咱们逐一进行剖析。

  1. 首先是数据库规划,咱们需求根据事务需求,规划数据库的结构,kintone经过拖拽就能完结。数据库中常见的外键,也能经过lookup完结。
  2. 然后是后台体系的开发,咱们需求根据事务完结包含且不限于增修正查等等这些功用。而在kintone中咱们在经过拖拽生成运用后,会主动完结增修正查这些功用。其次是平台自身才干。平台体系本身也需求自己的用户表,权限表等等来满意运营人员的办理。
  3. 最终是经过api供给对外开放的才干,kintone供给rest api接口,供给包含各种言语的sdk,包含js、java、python、php等。经过这个接口咱们就凭借云函数完结数据和小程序的双向流动了。

传统开发,需求开发的东西十分多,本钱大大添加。而kintone不仅供给了上述才干,还供给了流程审批,数据统计等等附加值事务。

事例剖析

下面咱们以一个简略的O2O体系的雏形为例,来讲下小程序的开发。

1.登录


小程序开发最根底、通用的功用:登录。做任何小程序想要辨认用户,第一步便是需求完结运用小程序登录。也便是经过辨认进入小程序的用户。

怎么完结辨认用户?

这部分包含2个部分:

  • 小程序中用户的仅有标识 open id
  • 授权获取用户的手机号

open id是小程序中的用户的仅有标识。其实经过它就能完结用户的主动辨认与登录。可是光有用户的open id 往往是不行的,为什么呢?由于许多时候咱们的体系是多端的,而pc端无法获取用户小程序的open id,所以并不能用它来差异用户,所以往往还需求经过授权获取用户手机号这种做法来差异用户。

2.微信服务认证 access token


可是想要获取手机号,光授权还不行,还需求合作服务端进行一些开发才干完结。它需求先经过小程序的appId、appSecret来获取微信服务的access token,然后经过access token令牌来调用api获取用户手机信息。

access token怎么保存?

access token的过期时刻一般是2小时,而且官方也建议咱们在token有效期内对这个access token进行缓存。所以一般的做法都是先存入redis,而且设置expire时刻。每非必须执行微信的api前先在缓存中获取token,假如不存在就先去获取access token而且存入缓存中。

在unicloud的开发中,他们的服务空间供给了另一种办法,便是经过运用定期触发器,在token过期的时刻内(比方说2小时)守时获取token而且保存在redis中。这样免除你在运用逻辑中遇到token过期,再去取token的状况。节省恳求时刻。

当然你也能够经过kintone来存储token。(只需求设置过期时刻,留意阅读权限)

3.授权才干


除了授权获取手机号,经过用户授权还能获得更多才干。比方常见的用户的地理信息、通讯地址、发票信息等。这些都能够经过授权办法来获取。不过这儿有些坑需求留意,授权的接口常常会做调整,比方之前常用的获取经过wx.getUserInfo获取用户头像昵称的才干现在在新创建的小程序中现已无法运用了。

4.小程序客户端与服务端之间的身份认证


咱们不能每次建议恳求就要跳一次登录,所以需求将登录状况转化为服务之间的身份认证。

小程序客户端和小程序服务端的身份认证该怎么去做呢?这块可不是微信帮你做好的,需求你自己去做。

常见的身份认证办法还分两种:

  1. 一种是有状况的身份认证,比方说session认证。
    session是需求在服务端保存的。会消耗服务端资源。
  2. 还有一种是无状况的身份认证。比方说jwt token。
    jwt token则是一种去中心化的认证。它经过非对称加密来完结。所以不需求服务器。

这两者差异今日就不做展开剖析。由于比较杂乱。今日咱们就主要以jwt token认证来讲讲小程序假如运用它来做身份认证。

jwt 优点许多,去中心化、无状况、不需求服务端存储,只需求每次恳求都在头部中带上认证信息。不过他也有个缺陷,token假如走漏,你无法让他失效。

咱们能够运用一些用户的信息(用户名)经过私钥来生成jwt token,今后小程序端每次只要带上这个token就能完结身份认证了。

详细咱们经过微信官方的图来做一个解说阐明

小程序登录 | 微信开放文档 (qq.com)

微信小程序+web数据库的开发实践

微信登录的流程是经过wx.login()来获取用户的open_id,其间open_id便是你在这个小程序中的仅有用户id,能够用它来辨认用户。

身份认证信息怎么运用?

在小程序端,一些需求身份认证的画面,建议恳求时都会带上token。然后在云函数端会对token校验,假如校验成功则去kintone建议rest api恳求获取数据。失利,则回来报错信息。

假如服务端不做认证的辨认,那恳求很简略被假造。以一个事务恳求举例,比方参加活动、答题等恳求。恳求参数是用户id、积分。那你只需求假造这个恳求,带上这个用户id和假造一个很大的积分,假如服务端不加辨认就接受,是不是这个用户的积分就能被随意篡改了?

微信小程序+web数据库的开发实践

5.refresh token 机制


此刻咱们发现只用access token来进行用户身份认证会遇到一个问题。假如把token时刻设置的过长,那就有token泄漏的危险。而你又无法主动将客户端的token失效。(除非服务端将jwt token耐久化下来,然后主动让他失效。可是存储下来这就违背了jwt token去中心化、无状况的规划初衷了)。但你将token时刻设置的过短,则会呈现用户需求频繁登录的问题,影响用户体验。此刻咱们常常会选用access token + refresh token的办法来进行验证。详细是怎么做的呢?用一张图来做解说,其实这也是淘宝、京东这些客户端怎么完结永久登录的一个办法。

微信小程序+web数据库的开发实践

此刻,根据refresh token的失效时刻,只要在失效时刻段内登录,比方每周、每月登录一次,就能换取新的access token和refresh token。这样就完结了永久登录状况。不需求从头登录了。

最终是token的客户端保存。咱们需求用到手机端存储storage。可是每次进入小程序,都需求从storage中取出token,然后将token放入全局状况办理(vuex或pinia)。以便每个页面都能判断用户登录状况。所以推荐运用小程序上的一个pinia耐久化插件”pinia-plugin-unistorage”,经过它能够完结小程序初始化时会主动从storage中获取,而数据更新时,又会主动同步到storage中。坚持了数据在storage和pinia中的一致性。

6.小程序服务端结构


在小程序端向服务端建议恳求时,服务端身份校验的这部分代码能够以中心件形式的办法进行开发。在小程序端也有相似koa的分层开发结构。(koa是nodejs端常用的web开发结构)比方uni-cloud-router,能够完结mvc办法进行开发,一起它也供给了中心件的办法,能够用它来完结用户身份认证,权限校验等功用。

7.简略的O2O体系规划


刚才咱们讲了我现现已过微信授权获取到了用户的手机号,一起也经过自己规划token完结了小程序端和服务端的认证连接,那接下来的就来规划一个实例,怎么开发一个小程序来完结O2O功用。O2O咱们应该很熟悉,比方在抖音、大众点评上进行团购、线上消费、生成二维码、线下商家扫码核销买单等。今日咱们拿相似的功用做类比。比方:

  • 经过小程序进行线上报名参加学习会,报名后回来一个参会二维码。
  • 参会那天,作业人员可对此二维码进行扫码核销。
  • 核销后,主动给此小程序账号添加积分。
  • 后期能够进行积分兑换奖品。

那咱们剖析下,要完结这样的功用有哪些要做的,又有哪些留意点呢?

首先经过例图来剖析咱们需求做什么?

微信小程序+web数据库的开发实践

8.kintone运用构建


接下来咱们需求在kintone上进行运用的规划,相当于传统开发中的数据库规划:

  1. 用户表:用来存储小程序端授权登陆的用户。
  2. 活动表:办理员能够经过增修正查上线一些咱们的学习会。
  3. 活动参加表:用户的报名数据被记载到这张表里。
  4. 积分表:记载用户的积分。用户报名成功,以及参加活动后后台核销成功都会更新积分。
  5. 积分改变履历表:来跟踪用户所有的积分改变。这样呈现程序问题或许恶意漏洞,被修正积分时,做到有迹可循。

其间活动参加表、积分表,都能够规划一个lookup字段来和用户表进行微信openid的相关。完结外键的相关。

这几张表经过简略的拖拽就完结了。

微信小程序+web数据库的开发实践

小程序开发中常用插件及用法

更多代码参考:微信小程序+kintone的开发实践