电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

python注冊釘釘回調事件的實現

瀏覽:6日期:2022-07-28 13:09:10
目錄1、注冊端2、回調端:以下示例代碼為python2,django 框架

釘釘API文檔:https://ding-doc.dingtalk.com/doc#/serverapi2/skn8ld

釘釘有回調事件流程,有哪些回調?比如:通訊錄回調、審批回調等等,拿通訊錄回調來說,就是當你公司組織架構發生變動時,會自動觸發你自己注冊的回調地址,然后根據回調信息做一些自定義的處理,不得不說,釘釘真的是解決了協同辦公的很多問題,非常nice,但就回調事件來說,每個企業只能注冊一個回調地址,即使你要監聽的是不同的事件、即使還有其他業務線需要用到回調,也只能不多于一個回調,當然這都是出于人家服務多方面考慮的設計,廢話不多說,

好,流程:

一個注冊端向釘釘發送注冊請求,釘釘callback你自己的服務url,必須是公網訪問的地址,并且該地址返回釘釘json數據來告訴釘釘回調成功

注冊成功之后這個地址就可以接收釘釘的回調post請求,做一些自定義處理,記得返回json

好,代碼

1、注冊端

mport requests, jsonclass DingDingCallBack(object): def __init__(self):self.appsecret=’’self.appkey=’’self.api_url = 'https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s'%(self.appkey,self.appsecret)self.aes_key = ''self.callbackUrl = '回調url'self.headers = { ’Content-Type’: ’application/json’, ’User-Agent’: ’Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36’, ’username’:’zhangsan’, ’password’:’123456’} def get_token(self):res = requests.get(self.api_url)if res.status_code == 200: str_res = res.text token = (json.loads(str_res)).get(’access_token’) return token def regist_call_back(self):url = ’https://oapi.dingtalk.com/call_back/register_call_back?access_token={ACCESS_TOKEN}’.format(ACCESS_TOKEN=self.get_token())data = { 'call_back_tag': ['bpms_task_change', 'bpms_instance_change'], # 審批回調 'token': 'qxN3cm', 'aes_key': self.aes_key, 'url':self.callbackUrl, }data1 = json.dumps(data)response = requests.post(url, headers=self.headers, data=data1)print(response)print(response.text) def query_callback(self):url = ’https://oapi.dingtalk.com/call_back/get_call_back?access_token={ACCESS_TOKEN}’.format(ACCESS_TOKEN=self.get_token())response = requests.get(url, headers=self.headers, )print(response)print(response.text) def update_call_back(self):url = ’https://oapi.dingtalk.com/call_back/update_call_back?access_token={}’.format(self.get_token())data = { 'call_back_tag': ['bpms_task_change', 'bpms_instance_change','user_add_org','user_leave_org','org_dept_create','org_dept_modify','org_dept_remove'], 'token': '自定義字符串', 'aes_key': self.aes_key, 'url':self.callbackUrl }data1 = json.dumps(data)response = requests.post(url, headers=self.headers, data=data1)print(response)print(response.text) def get_fail(self):url = ’https://oapi.dingtalk.com/call_back/get_call_back_failed_result?access_token={}’.format(self.get_token())response = requests.get(url, headers=self.headers, )print(response.text)# todo 刪除回調 def delete_callback(self):url = ’https://oapi.dingtalk.com/call_back/delete_call_back?access_token={ACCESS_TOKEN}’.format(ACCESS_TOKEN=self.get_token())result = requests.get(url)print(result)print(result.text)#if __name__ == ’__main__’: dingOBJ = DingDingCallBack() # todo 獲取釘釘token# # dingOBJ.get_token() # todo 獲取回調失敗# dingOBJ.get_fail() # todo 注冊回調 # dingOBJ.regist_call_back() # todo 查詢回調事件 dingOBJ.query_callback() # todo 修改回調事件# dingOBJ.update_call_back() # todo 刪除回調 # dingOBJ.delete_callback()2、回調端:以下示例代碼為python2,django 框架

# -*- coding:utf-8 -*-from django.shortcuts import renderfrom django.http import JsonResponse,HttpResponsefrom django.views.generic import Viewfrom django.views.decorators.csrf import csrf_exemptfrom DingCrypto import DingCryptoimport random,string,time,json,requests,simplejson# Create your views here.from ast import literal_evalencodingAesKey = ’’key = ’’token = ’自定義字符串’appsecret = ’’appkey = ’’api_url = 'https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s'%(appkey,appsecret)def randam_string(n): ran_str = ’’.join(random.sample(string.ascii_letters + string.digits, n)) return ran_str# 注冊回調@csrf_exemptdef workOrderCallback(request): if request.method == ’GET’:return JsonResponse({’code’:200,’msg’:’ok’}) if request.method == ’POST’:print request.GETdingCrypto = DingCrypto(encodingAesKey,key)nonce = randam_string(8)timestamp = str(int(round(time.time())))encrpyt = dingCrypto.encrypt(’success’)# print nonce,timestamp,token,encrpytsignature = dingCrypto.generateSignature(nonce=nonce,timestamp=timestamp,token=token,msg_encrypt=encrpyt)new_data = { ’data’: {’msg_signature’: signature,’timeStamp’: timestamp,’nonce’: nonce,’encrypt’: encrpyt },}encrpyt11 = dingCrypto.decrypt(encrpyt)return JsonResponse(new_data.get(’data’))# 響應回調class CallBack(View): def get(self,request,*args,**kwargs):return JsonResponse({’code’:200,’msg’:’ok’}) def get_token(self):res = requests.get(api_url)if res.status_code == 200: str_res = res.text token = (json.loads(str_res)).get(’access_token’) return token def post(self,request,*args,**kwargs):# data = request.GETdingCrypto = DingCrypto(encodingAesKey, key)nonce = randam_string(8)timestamp = str(int(round(time.time())))encrpyt = dingCrypto.encrypt(’success’)# signature = dingCrypto.generateSignature(nonce=nonce,timestamp=timestamp,token=token,msg_encrypt=encrpyt)callback = json.loads(dingCrypto.decrypt(json.loads(request.body).get(’encrypt’)))if callback[’EventType’] == ’bpms_instance_change’: # 審批實例開始,結束 url = ’https://oapi.dingtalk.com/topapi/processinstance/get?access_token={ACCESS_TOKEN}’.format(ACCESS_TOKEN=self.get_token()) instace_ = {'process_instance_id': callback[’processInstanceId’] } data2 = json.dumps(instace_) req = requests.post(url,data=data2) data = literal_eval(str(req.text)).get(’process_instance’) excute_workorder(callback[’processInstanceId’],data)elif callback[’EventType’] == ’bpms_task_change’: # 審批任務開始,結束,轉交 print ’bpms_task_change’elif callback[’EventType’] == ’user_add_org’: print ’用戶增加’elif callback[’EventType’] == ’user_leave_org’: print ’用戶離職’elif callback[’EventType’] == ’org_dept_create’: print ’組織架構添加’elif callback[’EventType’] == ’org_dept_modify’: print ’組織架構變更’elif callback[’EventType’] == ’org_dept_remove’: print ’組織架構刪除’return HttpResponse(encrpyt)

到此這篇關于python注冊釘釘回調事件的實現的文章就介紹到這了,更多相關python注冊釘釘回調事件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 釘釘 Python
相關文章:
主站蜘蛛池模板: 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 水压力传感器_数字压力传感器|佛山一众传感仪器有限公司|首页 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 温室大棚建设|水肥一体化|物联网系统 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 出国劳务公司_正规派遣公司[严海] | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 999范文网_优质范文下载写作帮手 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 东莞海恒试验仪器设备有限公司| 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 |