python +飞书 读取飞书EHR的个人信息

本文介绍了如何使用Python实现飞书EHR的个人信息读取,包括免登流程和遇到的问题。通过开放平台身份验证,实现了小程序、网页和机器人应用的身份验证,并提供了源代码示例。
摘要由CSDN通过智能技术生成

python 读取飞书EHR个人信息
关于飞书,不做过多介绍,毕竟现在太火爆了。以至于下班的时候,在地铁以前看到都是用微信沟通,现在在下班的地铁上,随处可见使用飞书的同学。

最近公司也在使用飞书,打算做一个程序,在程序设计之初,要实现飞书免登录,在这个过程中,把走过的一些坑记录下,希望帮助有需要的同学。

应用免登概述

开放平台应用支持小程序、网页和机器人三种能力。小程序和网页可在应用中心打开。另外,网页还可在聊天框内点击链接打开,移动端内会启动 webview 承载应用网页,PC 端内会跳转到系统浏览器。
应用可通过开放平台身份验证能力获取用户身份,完成用户在应用中的登录流程。身份验证时,客户端内免登,浏览器上需要用户完成扫码登录或密码登录。当前,开放平台身份验证存在如下四种场景:
小程序免登
浏览器内网页登录
客户端内网页免登
应用管理后台免登

基于以上,可以实现效果如下:
在这里插入图片描述
具体实现过程:
auth.py

import logging
from urllib import parse
from flask import redirect, request

# const
# open api capability
AUTH_URI = "/open-apis/authen/v1/index"
USER_ACCESS_TOKEN_URI = "/open-apis/authen/v1/access_token"
APP_ACCESS_TOKEN_URI = "/open-apis/auth/v3/app_access_token/internal"
USER_INFO_URI = "/open-apis/authen/v1/user_info"
USER_INFO_URL_EXTEND = '/open-apis/contact/v3/users/'
USER_INFO_EHR=''

class Auth(object):
    def __init__(self, lark_host, app_id, app_secret):
        self.lark_host = lark_host
        self.app_id = app_id
        self.app_secret = app_secret
        self._app_access_token = ""
        self._user_access_token = ""

    @property
    def user_access_token(self):
        return self._user_access_token

    @property
    def app_access_token(self):
        return self._app_access_token

    def authorize_user_access_token(self):
        # get user_access_token, implemented based on Feishu open api capability. doc link: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/authen-v1/authen/access_token
        self.authorize_app_access_token()
        code = request.args.get("code")
        url = self._gen_url(USER_ACCESS_TOKEN_URI)
        headers = {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + self.app_access_token,
        }
        req_body = {"grant_type": "authorization_code", "code": code}
        response = requests.post(url=url, headers=headers, json=req_body)
        Auth._check_error_response(response)

        self._user_access_token = response.json().get("data").get("access_token")

    def redirect(self, redirect_url):
        # redirect to return authorization code, implemented based on Feishu open api capability. doc link: https://open.feishu.cn/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/get-
        args = {"app_id": self.app_id, "redirect_uri": redirect_url}
        # authorization url
        redirect_auth_url = Auth._build_url_with_query_params(
            self._gen_url(AUTH_URI), args
        )
        return redirect(redirect_auth_url)

    def get_user_info(self):
        # get user info, implemented based on Feishu open api capability. doc link: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/authen-v1/authen/user_info
        url = self._gen_url(USER_INFO_URI)
        headers = {
            "Authorization": "Bearer " + self.user_access_token,
            "Content-Type": "application/json",
        }
        response = requests.get(url=url, headers=headers)
        Auth._check_error_response(response)
        return response.json().get("data")
    
    #get user extend info By 用户获取用户更多数据,方便填写信息时候落入本地数据库;
    def get_user_info_extend(self,userid):
        url = self._gen_url(USER_INFO_URL_EXTEND)
        headers = {
                "Authorization": "Bearer " + self.user_access_token,
                "Content-Type": "application
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值