抖音小程序登录
抖音开放平台小程序登录:
https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/tutorial/basic-ability/microapp-login
前端(通过tt.login获取code)
流程
静默登录依赖小程序 API tt.login,把tt.loginsuccess 回调中返回的 code 传给开发者服务端,换取开发者服务端生成的 token。
具体的前端流程如下:
- 判断抖音宿主是否登录。已登录,下一步。未登录,则显示登录抖音主端的按钮,提示用户登录。
- 登录抖音成功后,tt.login 会返回一个 code,前端携带 code 向开发者服务端请求。
- 开发者服务端通过 code2session 换取 sessionKey、open_id 和 union_id,并生成与 open_id 对应的唯一 token。
- 开发者服务端将 token 返回前端。
- 前端将 token 缓存,下次直接携带 token 向开发者服务端请求数据。
后端
具体流程
从前端的code去调用抖音接口去换取openid等信息,以此生成token
-
先调用接口换取openid
接口为
https://developer.toutiao.com/api/apps/v2/jscode2session
响应为
{
“err_no”: 0,
“err_tips”: “success”,
“log_id”: “2024102117013250E8ABC6F2D070B681DC”,
“data”: {
“session_key”: “hZy6t19VPjFqm********”,
“openid”: “V3WvSshYq9******”,
“anonymous_openid”: “”,
“unionid”: “f7510d9ab***********”
}
} -
我是根据openid和shopId作为用户的唯一依据的,一般来说就是根据openid就可以,如果存在这个用户就查询然后将id放到token的负载之后,没有则先注册到数据库返回id,放入token中
-
返回前端token
String appid = "********;
String secret = "*************************************";
public Map<String, Object> dyMiniLogin(String code, String ipAddr, Long shopsId) {
String url = "https://developer.toutiao.com/api/apps/v2/jscode2session";
// 创建请求体 JSON 对象
com.alibaba.fastjson2.JSONObject requestBody = new com.alibaba.fastjson2.JSONObject();
requestBody.put("anonymous_code", ""