python小项目实例流程-公司内项目对接钉钉审批流程(python)
1 importrequests2 importjson3 importtime4 from dingtalk.crypto importDingTalkCrypto5
6 from django.conf importsettings7 #settings.BASE_DIR
8
9
10 classCrypto(object):11 def __init__(self, token):12 #随便填的字符串
13 self.token =token14 #自己生成的43位随机字符串
15 self.aes_key = settings.DINGDING.get("DINGTALK_AES_TOKEN")16 #钉钉企业ID
17 self.corp_id = settings.DINGDING.get("CorpId") #18 print("corp_id:", self.corp_id)19 self.nonce = settings.DINGDING.get("nonce")20 self.crypto =DingTalkCrypto(21 token=self.nonce,22 encoding_aes_key=self.aes_key,23 corpid_or_suitekey=self.corp_id24 )25
26 defencrypt_success(self):27 #返回加密success
28 result =self.crypto.encrypt_message(29 msg="success",30 nonce=self.nonce,31 timestamp=int(time.time()*1000)32 )33 returnresult34
35
36 classDING(object):37 def __init__(self, approve_process):38 self.AgentId = settings.DINGDING.get("AgentId")39 self.AppKey = settings.DINGDING.get("AppKey")40 self.AppSecret = settings.DINGDING.get("AppSecret")41 self.dingding_url = settings.DINGDING.get("URL")42 self.process_code = settings.DINGDING.get("APPROVE_PROCESS").get(approve_process)['process_code']43 self.aes_key = settings.DINGDING.get("DINGTALK_AES_TOKEN")44 self.nonce = settings.DINGDING.get("nonce")45
46 defget_token(self):47 '''
48 获取钉钉的token49 :return: 钉钉token50 '''
51 url = self.dingding_url + '/gettoken?appkey={}&appsecret={}'.format(self.AppKey, self.AppSecret)52 req =requests.get(url)53 req =json.loads(req.text)54 return req['access_token']55
56 #def createCallbackDd():
57 #'''
58 #注册钉钉回调函数
59 #:return:
60 #'''
61 #url = 'https://oapi.dingtalk.com/call_back/register_call_back?access_token=' + self.getToken()
62 #data = {
63 #"call_back_tag": ["bpms_task_change", "bpms_instance_change"], #这两个回调种类是审批的
64 #"token": TOKEN, #自定义的字符串
65 #"aes_key": AES_KEY, #自定义的43位字符串,密钥
66 #"url": URL #回调地址
67 #}
68 #requests.post(url, data=json.dumps(data))
69 #return ('OK')
70
71 def create_process(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list, has_cc=0):72 '''
73 创建钉钉审批74 approvers为list 元素为钉钉userid cc_list同理75 '''
76 url = self.dingding_url + '/topapi/processinstance/create?access_token=' +self.get_token()77 print("form_component_value_vo:", form_component_value_vo)78 if has_cc ==0:79 data ={80 'agent_id': self.AgentId,81 'process_code': self.process_code, #工单id
82 'originator_user_id': originator_user_id,
83 'dept_id': dept_id, #创建人的钉钉部门id
84 'form_component_values': str(form_component_value_vo), #钉钉后台配置的需要填写的字段,
85 'approvers': approvers,86 'cc_list': cc_list,87 'cc_position': 'START_FINISH' #发起和完成时与抄送
88 }89 else:90 data ={91 'agent_id': self.AgentId,92 'process_code': self.process_code, #工单id
93 'originator_user_id': originator_user_id, #创建人的钉钉userid
94 'dept_id': dept_id, #创建人的钉钉部门id
95 'form_component_values': str(form_component_value_vo), #钉钉后台配置的需要填写的字段,
96 'approvers': approvers,97 }98 print("dingding_utils:", data)99 response = requests.post(url, data=data)100 returnresponse.json()101
102 defget_status(self, process_instance_id):103 url = self.dingding_url + '/topapi/processinstance/get?access_token=' +self.get_token()104 data ={105 "process_instance_id": process_instance_id106 }107 response = requests.post(url, data=data)108 returnresponse.json()109
110 defregister_callback(self, call_back_url):111 #注册回调
112 url = self.dingding_url + '/call_back/register_call_back?access_token=' +self.get_token()113 print("self.get_token():", self.get_token())114 data ={115 "call_back_tag": ['bpms_task_change', 'bpms_instance_change'],116 "token": self.nonce,117 "aes_key": self.aes_key,118 "url": call_back_url,119 }120 response = requests.post(url, data=json.dumps(data))121 returnresponse.json()122
123 defget_callback(self):124 url = self.dingding_url + '/call_back/get_call_back?access_token=' +self.get_token()125 req =requests.get(url)126 req =json.loads(req.text)127 returnreq128
129 defcreate_process_approver_v2(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list):130 '''
131 创建钉钉审批132 '''
133 url = self.dingding_url + '/topapi/processinstance/create?access_token=' +self.get_token()134 data ={135 'agent_id': self.AgentId,136 'process_code': self.process_code,137 'originator_user_id': originator_user_id,138 'dept_id': dept_id,139 'form_component_values': str(form_component_value_vo),140 'approvers_v2': json.dumps(approvers)141 }142 ifcc_list:143 data['cc_list'] =cc_list144 data['cc_position'] = 'FINISH'
145
146 response = requests.post(url, data=data)147 returnresponse.json()148
149 defcreate_process_approver_v2_test(self, originator_user_id, dept_id, form_component_value_vo):150 '''
151 创建钉钉审批152 '''
153 url = self.dingding_url + '/topapi/processinstance/create?access_token=' +self.get_token()154 data ={155 'agent_id': self.AgentId,156 'process_code': self.process_code,157 'originator_user_id': originator_user_id,158 'dept_id': dept_id,159 'form_component_values': str(form_component_value_vo),160 'approvers_v2': json.dumps([161 {162 "task_action_type": "NONE",163 "user_ids": ["dingding_id"], #单独审批人
164 },165 {166 "task_action_type": "OR",167 "user_ids": ["dingding_id1", "dingding_id2"], #或签
168 },169 {170 "task_action_type": "AND",171 "user_ids": ["dingding_id1", "dingding_id2"], #会签
172 }173 ])174 }175
176 response = requests.post(url, data=data)177 returnresponse.json()178
179
180 if __name__ == "__main__":181
182 importdjango, os, sys183 sys.path.append('xxxxxx') #项目路径
184 os.environ['DJANGO_SETTINGS_MODULE'] = 'OMS.settings'
185 #print("settings.DINGDING", settings.DINGDING)
186 ding = DING("create_sendexplain")187 #print(ding.get_token())
188 #info = [{'name': '单行输入框','value': 'testixxxxxxxx'}]
189 ## print(ding.create_process('11', 11, info))
190 a =[191 {'name': "输入框1", 'value': "value1"},192 {'name': "输入框2", 'value': "value2"},193 ]194 #print(ding.create_process_test('11', 11, a))
195 #print(ding.create_process_approver_v2_test('11', 11, a))
196 #print(ding.create_process_test2())
197 #print(ding.get_status('xxx'))
198 print(ding.get_status('xx'))199
200 ## 验证 回调
201 #a = ding.get_token()
202 #print(a)
203 #c = Crypto(a)
204 #print(c.encrypt_success())
205
206 #注册回调
207 #print(ding.register_callback("http://xxxx.vaiwan.com/xxx"))
208 #print(ding.get_callback())
python小项目实例流程-公司内项目对接钉钉审批流程(python)相关推荐
- html审核流程状态,一种web应用的审批流程状态字段设计方法与流程
本发明涉及数据库字段设计技术领域,尤其是涉及一种能够节省数据库存储空间的一种web应用的审批流程状态字段设计方法. 背景技术: web应用是一种可以通过web访问的应用程序,用户只需要有浏览器即可,不 ...
- python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统
原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...
- python小项目实例流程-python实现的简单RPG游戏流程实例
本文实例讲述了python实现的简单RPG游戏流程.分享给大家供大家参考.具体如下: #RPG rpg = True whp = 100 mahp = 100 hhp = 100 MHP = 10 d ...
- python django项目实例_最新Django项目实战-从零开发NB的任务平台python视频学习教程...
saas导学视频 .mp4 │ 模态框.zip │ ├─day01 │ │ 01 day01 sass项目介绍 .mp4 │ │ 02 day01 sass项目演示 .mp4 │ │ 04 day01 ...
- python小程序嵌入excel_用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!...
大家好,在之前的Python办公自动化系列文章中,我们已经介绍了两个Python操作Excel的库openpyxl与xlwings,并且相信大家已经了解这两者之间的异同. 但是在Python中操作Ex ...
- python小课是什么-攻陷朋友圈的8.9元Python小课,有哪些新套路?
欢迎关注"创事记"微信订阅号:sinachuangshiji 文/套路编辑部 来源:运营研究社(ID:U_quan) 记得有那么一段时间,我经常会在朋友圈刷到同一条广告.神奇的是, ...
- python小课网站_攻陷朋友圈的8.9元Python小课,有哪些新套路?
欢迎关注"创事记"微信订阅号:sinachuangshiji 文/套路编辑部 来源:运营研究社(ID:U_quan) 记得有那么一段时间,我经常会在朋友圈刷到同一条广告.神奇的是, ...
- python字典导入mongodb_Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb...
本文主要向大家介绍了Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 从mongo查 ...
- 解析approvalFlow——仿钉钉后台审批流程
文章目录 1. approval介绍 1.1 功能应用 1.2 项目地址 2. jsxPreview.vue应用 2.1 页面结构 2.2 表单解析 3. 功能拓展 3.1 数据回显 3.2 拓展样式 ...
最新文章
- 深入研究ConcurrentHashMap 源码从7到8的变迁
- 模型大十倍,性能提升几倍?谷歌研究员进行了一番研究
- 编写一个程序,找出数组中元素的最大值,要求用到成员函数。
- 判断能否被3,5,7整除(信息学奥赛一本通-T1047)
- Jmock-使用ClassImposteriser扩展mock class对象
- (8)Linux内核中的hash与bucket
- Mybatis-学习笔记(3)mapper配置文件
- Linux内核探索之路——关于书
- LINGO--Error Code 1017
- 群晖NAS、硬盘及路由器选购及组网,打造家庭资源共享环境
- HoneyFramework蜂巢框架六边形生成unity地图使用教程提示和技巧
- 曾国藩:人生的三个阶段,做对了,剩下就是好运气
- 华为手机浏览器 onclick失灵的问题
- 冒号后面跟着function()是什么意思
- 模型压缩工具Distiller-INT8量化
- JAVA分页代码实例
- 小小总结—— 数字删除
- Airplay相关协议
- 面试官最常问的面试题及答案,每1题都很经典
- 用python写一个彩票过滤器_Python实现的彩票机选器实例
热门文章
- 最短路模板 - Floyd / Dijkstra
- think组合查询AND和OR一起用
- 支付宝的kill-ie
- Struts2 - Check Login Interceptor
- 大学计算机基础课程报告python-Python程序设计习题解析(大学计算机基础教育规划教材)...
- python菜鸟工具-第一行Python代码之菜鸟逃离记
- python浪漫代码-Python打造浪漫的心形,助你情人节表白成功!
- python for android-Python-for-Android安装笔记
- 学python需要多久-零基础学习python,要多久才可以学好并且找到工作?
- python的优点-Python语言的优势有哪些?