国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

python公司內項目對接釘釘審批流程的實現

瀏覽:44日期:2022-07-28 13:08:29

最近把組內的一個項目對接釘釘審批接口,通過python3.6。

釘釘官方文檔

廢話不多說了,上代碼:

import requestsimport jsonimport timefrom dingtalk.crypto import DingTalkCryptofrom django.conf import settings# settings.BASE_DIRclass Crypto(object): def __init__(self, token):# 隨便填的字符串self.token = token# 自己生成的43位隨機字符串self.aes_key = settings.DINGDING.get('DINGTALK_AES_TOKEN')# 釘釘企業IDself.corp_id = settings.DINGDING.get('CorpId') #print('corp_id:', self.corp_id)self.nonce = settings.DINGDING.get('nonce')self.crypto = DingTalkCrypto( token=self.nonce, encoding_aes_key=self.aes_key, corpid_or_suitekey=self.corp_id) def encrypt_success(self):# 返回加密successresult = self.crypto.encrypt_message( msg='success', nonce=self.nonce, timestamp=int(time.time()*1000))return resultclass DING(object): def __init__(self, approve_process):self.AgentId = settings.DINGDING.get('AgentId')self.AppKey = settings.DINGDING.get('AppKey')self.AppSecret = settings.DINGDING.get('AppSecret')self.dingding_url = settings.DINGDING.get('URL')self.process_code = settings.DINGDING.get('APPROVE_PROCESS').get(approve_process)[’process_code’]self.aes_key = settings.DINGDING.get('DINGTALK_AES_TOKEN')self.nonce = settings.DINGDING.get('nonce') def get_token(self):’’’獲取釘釘的token:return: 釘釘token’’’url = self.dingding_url + ’/gettoken?appkey={}&appsecret={}’.format(self.AppKey, self.AppSecret)req = requests.get(url)req = json.loads(req.text)return req[’access_token’]# def createCallbackDd():# ’’’# 注冊釘釘回調函數# :return:# ’’’# url = ’https://oapi.dingtalk.com/call_back/register_call_back?access_token=’ + self.getToken()# data = {# 'call_back_tag': ['bpms_task_change', 'bpms_instance_change'], #這兩個回調種類是審批的# 'token': TOKEN, #自定義的字符串# 'aes_key': AES_KEY, #自定義的43位字符串,密鑰# 'url': URL #回調地址# }# requests.post(url, data=json.dumps(data))# return (’OK’) def create_process(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list, has_cc=0):’’’創建釘釘審批approvers為list 元素為釘釘userid cc_list同理’’’url = self.dingding_url + ’/topapi/processinstance/create?access_token=’ + self.get_token()print('form_component_value_vo:', form_component_value_vo)if has_cc == 0: data = {’agent_id’: self.AgentId,’process_code’: self.process_code, #工單id’originator_user_id’: originator_user_id,’dept_id’: dept_id, #創建人的釘釘部門id’form_component_values’: str(form_component_value_vo), #釘釘后臺配置的需要填寫的字段,’approvers’: approvers,’cc_list’: cc_list,’cc_position’: ’START_FINISH’ # 發起和完成時與抄送 }else: data = {’agent_id’: self.AgentId,’process_code’: self.process_code, #工單id’originator_user_id’: originator_user_id, #創建人的釘釘userid’dept_id’: dept_id, #創建人的釘釘部門id’form_component_values’: str(form_component_value_vo), #釘釘后臺配置的需要填寫的字段,’approvers’: approvers, }print('dingding_utils:', data)response = requests.post(url, data=data)return response.json() def get_status(self, process_instance_id):url = self.dingding_url + ’/topapi/processinstance/get?access_token=’ + self.get_token()data = { 'process_instance_id': process_instance_id}response = requests.post(url, data=data)return response.json() def register_callback(self, call_back_url):# 注冊回調url = self.dingding_url + ’/call_back/register_call_back?access_token=’ + self.get_token()print('self.get_token():', self.get_token())data = { 'call_back_tag': [’bpms_task_change’, ’bpms_instance_change’], 'token': self.nonce, 'aes_key': self.aes_key, 'url': call_back_url,}response = requests.post(url, data=json.dumps(data))return response.json() def get_callback(self):url = self.dingding_url + ’/call_back/get_call_back?access_token=’ + self.get_token()req = requests.get(url)req = json.loads(req.text)return req def create_process_approver_v2(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list):’’’創建釘釘審批’’’url = self.dingding_url + ’/topapi/processinstance/create?access_token=’ + self.get_token()data = { ’agent_id’: self.AgentId, ’process_code’: self.process_code, ’originator_user_id’: originator_user_id, ’dept_id’: dept_id, ’form_component_values’: str(form_component_value_vo), ’approvers_v2’: json.dumps(approvers)}if cc_list: data[’cc_list’] = cc_list data[’cc_position’] = ’FINISH’response = requests.post(url, data=data)return response.json() def create_process_approver_v2_test(self, originator_user_id, dept_id, form_component_value_vo):’’’創建釘釘審批’’’url = self.dingding_url + ’/topapi/processinstance/create?access_token=’ + self.get_token()data = { ’agent_id’: self.AgentId, ’process_code’: self.process_code, ’originator_user_id’: originator_user_id, ’dept_id’: dept_id, ’form_component_values’: str(form_component_value_vo), ’approvers_v2’: json.dumps([{ 'task_action_type': 'NONE', 'user_ids': ['dingding_id'], # 單獨審批人},{ 'task_action_type': 'OR', 'user_ids': ['dingding_id1', 'dingding_id2'], # 或簽},{ 'task_action_type': 'AND', 'user_ids': ['dingding_id1', 'dingding_id2'], # 會簽} ])}response = requests.post(url, data=data)return response.json()if __name__ == '__main__': import django, os, sys sys.path.append(’xxxxxx’) # 項目路徑 os.environ[’DJANGO_SETTINGS_MODULE’] = ’xx.settings’ # print('settings.DINGDING', settings.DINGDING) ding = DING('create_xx') # print(ding.get_token()) # info = [{’name’: ’單行輸入框’,’value’: ’testixxxxxxxx’}] # # print(ding.create_process(’11’, 11, info)) a = [{’name’: '輸入框1', ’value’: 'value1'},{’name’: '輸入框2', ’value’: 'value2'}, ] # print(ding.create_process_test(’11’, 11, a)) # print(ding.create_process_approver_v2_test(’11’, 11, a)) # print(ding.create_process_test2()) # print(ding.get_status(’xxx’)) print(ding.get_status(’xx’)) # # 驗證 回調 # a = ding.get_token() # print(a) # c = Crypto(a) # print(c.encrypt_success()) # 注冊回調 # print(ding.register_callback('http://xxxx.vaiwan.com/xxx')) # print(ding.get_callback())

說明:

1 Crypto類用于對接釘釘回調用的。一個公司只有一個corpId,并且一個corpid只能注冊一個回調地址。我司有公共組注冊好了回調。只要接入公司內的回調即可。所以我實際沒有使用到Crypto。

2 在釘釘管理后臺中創建應用后會有這三個東西:AgentId、AppKey,AppSecret 。在創建釘釘審批流程,可以從審批流程瀏覽器中獲取到APPROVE_PROCESS。別忘啦給這個流程審批接口權限。這些官方文檔有說。

3 配置setting變量:

DINGDING = { 'AgentId': 123, 'AppKey': 'xx', 'AppSecret': 'xx', 'URL': 'https://oapi.dingtalk.com', 'APPROVE_PROCESS': { # process_code'create_xx': { 'process_code': 'abc', # 審批流程的id }, 'DINGTALK_AES_TOKEN': 'abc', 'nonce': 'abc', 'CorpId': 'abc',}

 4 接口形式創建的審批流程,與釘釘管理后臺創建的流程有一些不同:

1 不能在不同的審批環節設置不同的抄送人

2 不能審批流程前后有相同的人,不能自動顯示成 “自動同意”(管理后臺設置成去重后,但是接口指定審批人場景,不支持)

 5 其他如:審批內容、或簽,會簽代碼里都有示例。

到此這篇關于python公司內項目對接釘釘審批流程的實現的文章就介紹到這了,更多相關python對接釘釘審批內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 釘釘 Python
相關文章:
主站蜘蛛池模板: 高清波多野结衣一区二区三区 | 日韩毛片基地 | 高清免费国产在线观看 | 国产大乳孕妇喷奶水在线观看 | 五月色一区二区亚洲小说 | 91麻精品国产91久久久久 | 性欧美高清久久久久久久 | 成年人网站免费视频 | 午夜欧美性欧美 | 国产三级视频在线 | 国产三级毛片视频 | 亚洲欧美自拍偷拍 | 免费一级特黄3大片视频 | 亚洲超大尺度激情啪啪人体 | 亚洲狠狠综合久久 | 精品国产一区二区三区不卡在线 | 成人免费网站在线观看 | 狠狠色丁香婷婷综合 | 亚洲精品一区二区三区国产 | 九色porny真实丨国产18 | 国产亚洲人成网站在线观看不卡 | 日本暖暖视频在线播放 | 亚洲综合国产精品 | 国产a级三级三级三级中国 国产a级特黄的片子视频 | 国产精品成人一区二区不卡 | 花蝴蝶在线 | 在线欧美精品一区二区三区 | 久久亚洲国产高清 | 一区二区三区中文字幕 | 亚洲天堂一区在线 | 日本在线理论片 | 91亚洲精品成人一区 | 国产一级大片免费看 | 亚洲清纯自偷自拍另类专区 | xxxwww在线播放 | 国产免费一区二区三区 | 午夜影院在线免费 | 51国产偷自视频区视频手机播器 | 香蕉97碰碰视频免费 | 久久精品亚洲一级毛片 | 日韩精品亚洲一级在线观看 |