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

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

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

瀏覽:228日期: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位隨機(jī)字符串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久久,三上悠亚国产精品一区二区三区
日韩超碰人人爽人人做人人添| 91综合网人人| 国产白浆在线免费观看| 国产极品模特精品一二| 国产日产精品_国产精品毛片| 日韩三级久久| 69堂精品视频在线播放| 日韩精品第一| 麻豆国产精品一区二区三区| 国产精品magnet| 日本一区二区高清不卡| 久久久久久亚洲精品美女| 国内揄拍国内精品久久| 四虎成人av| 国产一区丝袜| 久久久噜噜噜| 视频一区免费在线观看| 青青国产精品| 日本不卡免费高清视频在线| 欧美高清不卡| 欧美一级一区| 91欧美国产| 一区二区三区四区日韩| 国产精品一区二区精品| 午夜精品成人av| 伊人国产精品| 亚洲91视频| 国产亚洲欧美日韩在线观看一区二区 | 日本va欧美va欧美va精品| 国产精品观看| 激情91久久| 久久久久久婷| 婷婷五月色综合香五月| а√天堂8资源中文在线| 男人的天堂亚洲一区| 国产乱子精品一区二区在线观看 | 免费久久99精品国产| 国产精品日本一区二区不卡视频| 九色porny丨国产首页在线| 五月国产精品| 亚洲一区国产| 欧美日韩一二三四| 精品视频一区二区三区四区五区 | 一区在线视频观看| 国产精品三级| 日本亚洲欧美天堂免费| 亚洲一级特黄| 日韩深夜视频| 麻豆成人91精品二区三区| 男女性色大片免费观看一区二区| 亚洲深夜视频| 成人国产精品一区二区免费麻豆| 日韩高清电影免费| 亚洲婷婷丁香| 蜜桃久久久久久| 日韩一区欧美二区| 日韩午夜在线| 午夜av一区| 久久99高清| 97久久亚洲| 亚洲人妖在线| 福利在线一区| 国产精品二区不卡| 国产精品一区毛片| 欧美国产另类| 麻豆国产精品| 日韩欧美一区二区三区在线观看| 精品三级久久| 在线亚洲一区| 亚久久调教视频| 91精品日本| 荡女精品导航| 精品欧美激情在线观看| 国产亚洲精品v| 九九综合九九| 亚洲一区二区三区无吗| 日韩精品一级| 免费视频一区二区三区在线观看| 麻豆高清免费国产一区| 久久国产影院| 亚洲一区二区三区四区电影| 欧美在线看片| 成人羞羞在线观看网站| 激情自拍一区| 欧美日韩亚洲一区二区三区在线| 国产乱码精品| 亚洲婷婷在线| 亚洲精品在线国产| 精品视频黄色| 成人久久久久| 亚洲欧美一级| a国产在线视频| 日韩有吗在线观看| 91精品婷婷色在线观看| 亚洲人亚洲人色久| 久久久噜噜噜| 久久精品国产999大香线蕉| 久久久久99| 欧美黄色一区| 视频一区中文字幕国产| 国产日韩电影| 国产欧美日韩影院| 美女久久一区| 999久久久精品国产| 亚洲精品国产精品粉嫩| 亚洲午夜一级| 日本久久黄色| 国产精品va视频| 亚洲我射av| 亚洲黄色影院| 日韩一区二区中文| 国产毛片一区二区三区| 亚洲三级av| 免费日韩av片| 裤袜国产欧美精品一区| 国产精品亲子伦av一区二区三区 | 精品视频自拍| 欧美一级二级三级视频| 久久精品91| 日韩久久一区| 亚洲一区有码| 亚洲午夜黄色| 亚洲午夜在线| 久久久夜精品| 神马午夜在线视频| 日韩黄色大片网站| 国产不卡精品| 亚洲免费成人av在线| 久热精品在线| 欧美日韩国产一区二区三区不卡| 日韩av一区二| 亚洲网站视频| 影院欧美亚洲| 免费欧美在线视频| 综合国产在线| 亚洲三级在线| 国产精品久久久久久久久久齐齐 | 成人久久一区| 精品美女在线视频| 国产精品xxx| 精品美女视频| 九色porny丨国产首页在线| 久久91导航| 在线精品小视频| 国产精品美女久久久浪潮软件| 9国产精品视频| 亚洲天堂免费| 欧美在线不卡| 麻豆视频在线看| 尤物精品在线| 日韩激情av在线| 日本蜜桃在线观看视频| 亚洲高清成人| 亚洲欧美日韩国产一区二区| 国产亚洲综合精品| 亚洲精品免费观看| 国产成人1区| 亚洲一区久久| 99国产成+人+综合+亚洲欧美| 日本在线视频一区二区| 久久99高清| 婷婷综合国产| 久久精品主播| 国产日韩欧美高清免费| 激情综合自拍| 欧美激情三区| 亚洲精品乱码| 日本久久成人网| 亚洲精品护士| 日韩精品水蜜桃| 日韩高清二区| 亚洲一区二区三区四区五区午夜| 国产精品亚洲综合色区韩国| 精品欧美久久| 日韩一区二区中文| 精品国产一区二区三区2021| 亚洲日本在线观看视频| 久久久成人网| 国产一区二区三区四区五区传媒| 久久成人精品| 蜜臀久久99精品久久一区二区| 国产精品高清一区二区| 日韩中文字幕区一区有砖一区 | 欧美专区一区| 欧美中文字幕| 91成人精品视频| 在线手机中文字幕| 九九99久久精品在免费线bt| 蜜臀av国产精品久久久久| 日韩天堂在线| 国内精品伊人| 国产一区二区亚洲| 精品视频97| 激情综合婷婷| 日本高清不卡一区二区三区视频| 色乱码一区二区三区网站| 国产69精品久久| 国产伦久视频在线观看| 偷拍精品精品一区二区三区| 国产白浆在线免费观看|