微信小程序的开放平台有两种API调用方式,一种是作为小程序开发者的身份,在前端直接调用微信封装的接口;二是作为服务器开发者,在云端接入微信后台开发者。
前端
小程序开发的接入文档要看API这一栏,通过手机终端直接调用小程序服务器的接口,基本的流程是:
- 微信登录(调用wx.login),产生code临时码,传到服务端。(服务端有用)
- 判断是否需要授权,因为部分接口是需要用户同意的比如地理和相机。
- 正式调用小程序的其他业务接口。
上述的核心是调用小程序api一定是某个用户的登录态(必须wx.login),这个登录态是有期限的,期限多久是小程序内部的判断逻辑,我们只有通过接口(wx.checkSession)获取。
服务端
服务端开发的接入文档要看服务端的一栏,利用云对接小程序服务器,可以调用一些小程序的云服务接口,接入流程是:
- 配置小程序后台的基本信息,拿到APPID和Secret等开发信息,配置后台域名供微信小程序开发者与开发者服务器通信,现在要求必须是https,而且要做到备案。
- 获取访问令牌access_token(调用auth.getAccessToken接口),有效时长两小时,需要有处理失效再更新的环节。
- 利用获取的access_token去调用其他的云开发接口。
- 前端传上来的code,换取sessionkey(调用auth.code2Session接口)作为秘钥解签,验证前端传来的客户信息数据是否被篡改。(细节说明)
以上流程只是当需要用到微信后端的开放接口才使用,一般简单的场景只考虑和前端开发写好业务接口即可,上述可以跳过。
细节
这是官方给出的登录流程,现在说一些细节问题。
-
后端拿到的sessionkey有什么用?
小程序获取code后传到开发者服务器来获取sessionkey,sessionkey和登录用户的openid绑定,确定了某个用户在某段时间内的通信秘钥,这个秘钥不传给小程序前端,而是保留在服务端,作为数据验签的秘钥。重新获取则当前会失效。
sessionkey验哪个数据的签?小程序调用前端接口获取用户的信息,如果这些数据服务端也需要就得传给服务端。但是为了防止这些信息在传递前被篡改,服务端通过sessionkey这个秘钥解签和参数一一对比,即可验证数据的准确性。官方也给出了具体过程:
-
回过头再解释下各个参数的作用。
AppID(小程序ID)和秘钥:服务器api使用,换取access_token访问令牌。
access_token:服务器api使用,访问服务器api的信任凭证,也是必要参数。
code:前端wx.login接口获取,服务端使用。传到开发者服务器用来获取sessionkey。
sessionkey:服务器接口获取并使用,用来验签,证明前端传来的数据未被篡改。
-
微信配置里有消息推送的配置,这个是牵扯到客服会话之类的,我也暂时没研究。
这个Tokenn和URL填写后是会实时验证的,在点击提交的时候小程序回去调这个接口,拿到返回值和你填的对比是否一致,不一致的话是不会通过的。所以填这个玩意一定要先在URL写好对应接口内容,并返回要使用的token,才会通过。