ServiceCorpApi.py 2.5 KB
#!/usr/bin/env python
# -*- coding:utf-8 -*-
##
# Copyright (C) 2018 All rights reserved.
#
# @File ServiceCorp.py
# @Brief
# @Author abelzhu, abelzhu@tencent.com
# @Version 1.0
# @Date 2018-02-24
#
#
from abc import ABC

from .CorpApi import *

SERVICE_CORP_API_TYPE = {
	'GET_CORP_TOKEN': ['/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
	'GET_SUITE_TOKEN': ['/cgi-bin/service/get_suite_token', 'POST'],
	'GET_PRE_AUTH_CODE': ['/cgi-bin/service/get_pre_auth_code?suite_access_token=SUITE_ACCESS_TOKEN', 'GET'],
	'SET_SESSION_INFO': ['/cgi-bin/service/set_session_info?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
	'GET_PERMANENT_CODE': ['/cgi-bin/service/get_permanent_code?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
	'GET_AUTH_INFO': ['/cgi-bin/service/get_auth_info?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
	'GET_ADMIN_LIST': ['/cgi-bin/service/get_admin_list?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
	'GET_USER_INFO_BY_3RD': ['/cgi-bin/service/getuserinfo3rd?suite_access_token=SUITE_ACCESS_TOKEN', 'GET'],
	'GET_USER_DETAIL_BY_3RD': ['/cgi-bin/service/getuserdetail3rd?suite_access_token=SUITE_ACCESS_TOKEN', 'POST'],
}


class ServiceCorpApi(CorpApi, ABC):
	def __init__(self, suite_id, suite_secret, suite_ticket, corpid, secret, auth_corpid=None, permanent_code=None):
		super().__init__(corpid, secret)
		self.suite_id = suite_id
		self.suite_secret = suite_secret
		self.suite_ticket = suite_ticket

		# 调用 CorpAPI 的function, 需要设置这两个参数
		self.auth_corpid = auth_corpid
		self.permanent_code = permanent_code

		self.access_token = None
		self.suite_access_token = None

	# override CorpApi 的 refreshAccessToken, 使用第三方服务商的方法
	def getAccessToken(self):
		if self.access_token is None:
			self.refreshAccessToken()
		return self.access_token

	def refreshAccessToken(self):
		response = self.httpCall(
			SERVICE_CORP_API_TYPE['GET_CORP_TOKEN'],
			{
				"auth_corpid": self.auth_corpid,
				"permanent_code": self.permanent_code,
			})
		self.access_token = response.get('access_token')

	def getSuiteAccessToken(self):
		if self.suite_access_token is None:
			self.refreshSuiteAccessToken()
		return self.suite_access_token

	def refreshSuiteAccessToken(self):
		response = self.httpCall(
			SERVICE_CORP_API_TYPE['GET_SUITE_TOKEN'],
			{
				"suite_id": self.suite_id,
				"suite_secret": self.suite_secret,
				"suite_ticket": self.suite_ticket,
			})
		self.suite_access_token = response.get('suite_access_token')