日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python公司內(nèi)項目對接釘釘審批流程的實現(xiàn)

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

最近把組內(nèi)的一個項目對接釘釘審批接口,通過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')# 釘釘企業(yè)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):’’’獲取釘釘?shù)膖oken: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():# ’’’# 注冊釘釘回調(diào)函數(shù)# :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'], #這兩個回調(diào)種類是審批的# 'token': TOKEN, #自定義的字符串# 'aes_key': AES_KEY, #自定義的43位字符串,密鑰# 'url': URL #回調(diào)地址# }# 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):’’’創(chuàng)建釘釘審批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, #創(chuàng)建人的釘釘部門id’form_component_values’: str(form_component_value_vo), #釘釘后臺配置的需要填寫的字段,’approvers’: approvers,’cc_list’: cc_list,’cc_position’: ’START_FINISH’ # 發(fā)起和完成時與抄送 }else: data = {’agent_id’: self.AgentId,’process_code’: self.process_code, #工單id’originator_user_id’: originator_user_id, #創(chuàng)建人的釘釘userid’dept_id’: dept_id, #創(chuàng)建人的釘釘部門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):# 注冊回調(diào)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):’’’創(chuàng)建釘釘審批’’’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):’’’創(chuàng)建釘釘審批’’’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’)) # # 驗證 回調(diào) # a = ding.get_token() # print(a) # c = Crypto(a) # print(c.encrypt_success()) # 注冊回調(diào) # print(ding.register_callback('http://xxxx.vaiwan.com/xxx')) # print(ding.get_callback())

說明:

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

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

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 接口形式創(chuàng)建的審批流程,與釘釘管理后臺創(chuàng)建的流程有一些不同:

1 不能在不同的審批環(huán)節(jié)設(shè)置不同的抄送人

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

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

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

標(biāo)簽: 釘釘 Python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品欧美久久| 国产99在线| 色爱综合网欧美| 日韩和欧美一区二区三区| 亚洲中字黄色| 黄色亚洲在线| 欧美不卡在线| 久久久成人网| 久久高清免费| 激情综合在线| 亚洲电影在线一区二区三区| 亚洲91久久| 9999国产精品| 黄毛片在线观看| 天堂√中文最新版在线| 国产精品13p| 老牛影视精品| 久久精品播放| 婷婷精品进入| 免费日韩av| 亚洲精品福利| 国产精品一区毛片| 福利片在线一区二区| 日本不卡一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 欧美女激情福利| 视频一区视频二区在线观看| 伊人久久大香线蕉av超碰演员| 亚洲欧美网站| 视频一区中文| 在线一区免费| 亚洲我射av| 日韩激情啪啪| 久久精品国产福利| 色综合狠狠操| 蜜桃国内精品久久久久软件9| 日韩午夜av在线| 国产亚洲亚洲| 国产日韩一区二区三免费高清| 日本综合精品一区| 国产精品中文字幕亚洲欧美 | 国产日韩一区二区三免费高清 | 国产传媒在线观看| 欧美va天堂| 日韩va亚洲va欧美va久久| 国语精品一区| 久久亚洲电影| 国产精品中文字幕亚洲欧美| www.51av欧美视频 | 日韩国产精品久久久久久亚洲| 国产精品v日韩精品v欧美精品网站| 天堂中文在线播放| 免费人成精品欧美精品| 久久精品凹凸全集| 啪啪国产精品| 日本电影久久久| 热三久草你在线| 日韩中文字幕av电影| 精品国产一区二区三区av片| 日韩高清国产一区在线| 日韩1区2区3区| 国产精品精品国产一区二区| 国产亚洲一区在线| 久久亚洲资源中文字| 91成人精品| 国产精品主播在线观看| 午夜日本精品| 里番精品3d一二三区| 国产一区二区视频在线看| 日本а中文在线天堂| 日韩在线网址| 成人亚洲欧美| 国产精品羞羞答答在线观看| 黄色日韩精品| 狠狠躁少妇一区二区三区| 蜜桃视频在线观看一区| 神马久久午夜| 国产欧美日韩一区二区三区在线| 婷婷久久一区| 国产一区二区三区视频在线| 激情欧美丁香| 色综合狠狠操| 国产精品一区亚洲| 在线综合欧美| 日本久久精品| 欧美日本久久| 国产一区二区三区不卡av| 91av一区| 亚洲一区二区毛片| 日韩免费看片| 尤物网精品视频| 成人一区而且| 国产欧美在线观看免费| 亚洲自啪免费| 日韩精品看片| 国产一区二区三区不卡av| 91福利精品在线观看| 国产免费成人| 婷婷亚洲五月| 久久99影视| 蜜桃视频一区二区| 欧美日韩激情| 国产h片在线观看| 欧美激情三区| 国产亚洲精品美女久久| 亚洲最新av| 在线观看亚洲精品福利片| 欧美日韩免费观看一区=区三区 | 天堂va欧美ⅴa亚洲va一国产| 激情久久久久久| 黑人精品一区| 久久亚洲黄色| 免费一级欧美片在线观看网站| 欧美日本一区| 亚洲97av| 在线视频日韩| 国产精品91一区二区三区| 91精品精品| 久久免费黄色| 久久国产亚洲| 欧美日韩精品在线一区| 日韩精品麻豆| 日本久久成人网| 中文字幕系列一区| 欧美日韩精品一区二区视频| 福利在线一区| 精品久久免费| 国产一区二区三区四区| 久久影院一区二区三区| 婷婷综合网站| 蜜桃一区二区三区| 成人av二区| 在线综合视频| 婷婷亚洲成人| 国产精品传媒麻豆hd| 韩国女主播一区二区三区| 最新中文字幕在线播放| 久久久久99| 欧美+亚洲+精品+三区| 日韩大片在线观看| 日韩欧美精品| 黄色日韩在线| 国产亚洲久久| av一区二区高清| 国产精品一区2区3区| 1000部精品久久久久久久久| 欧美一级网站| 亚洲小说欧美另类婷婷| 国产精品永久| 欧美精品九九| 久久麻豆视频| 综合激情一区| 久久人人精品| 日本一区中文字幕| 一区二区三区四区在线看| 国产精品网站在线看| 99久久99久久精品国产片果冰 | 麻豆mv在线观看| 亚洲精品黄色| 久久久蜜桃一区二区人| 国产精品www.| 亚洲欧美日韩国产| 免费在线小视频| 久久99蜜桃| 亚洲精品人人| 午夜日韩在线| 中文字幕在线看片| 丁香婷婷久久| 亚洲字幕久久| 五月婷婷亚洲| 日韩电影二区| 久久超碰99| 中文一区一区三区免费在线观| 日韩精品一区二区三区免费观影 | 88xx成人免费观看视频库| 国产剧情在线观看一区| 丝袜诱惑制服诱惑色一区在线观看| 成人一区不卡| 国产亚洲电影| 日本aⅴ精品一区二区三区| 亚洲一区网站| 亚洲精品91| 久久精品在线| 蜜臀国产一区| 日韩1区在线| 麻豆久久一区二区| 97成人在线| 日韩激情综合| 亚洲免费一区三区| 久热综合在线亚洲精品| 九九久久婷婷| 免费成人网www| 久久精品国产亚洲夜色av网站| 国产69精品久久| 国产成人调教视频在线观看| 久久精品一区| 国产欧美一区二区三区精品观看| 国产精品99久久精品| 国产剧情一区二区在线观看| 少妇精品在线|