iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python如何实现注册钉钉回调事件
  • 909
分享到

python如何实现注册钉钉回调事件

2023-06-20 20:06:23 909人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python如何实现注册钉钉回调事件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目录注册端回调端:以下示例代码为Python2,Django 框架钉钉ap

这篇文章主要介绍了python如何实现注册钉钉回调事件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

目录

钉钉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.GET        dingCrypto = DingCrypto(encodingAesKey,key)        nonce = randam_string(8)        timestamp = str(int(round(time.time())))        encrpyt = dingCrypto.encrypt('success')        # print nonce,timestamp,token,encrpyt        signature = 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.GET        dingCrypto = 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频道,更多相关知识等着你来学习!

--结束END--

本文标题: python如何实现注册钉钉回调事件

本文链接: https://www.lsjlt.com/news/300010.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python如何实现注册钉钉回调事件
    这篇文章主要介绍了python如何实现注册钉钉回调事件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目录注册端回调端:以下示例代码为python2,django 框架钉钉AP...
    99+
    2023-06-20
  • python注册钉钉回调事件的实现
    目录1、注册端2、回调端:以下示例代码为python2,django 框架钉钉API文档:https://ding-doc.dingtalk.com/doc#/serverapi2/skn8ld 钉钉有回调事件流程,...
    99+
    2022-06-03
    python注册钉钉回调事件 python 钉钉回调事件
  • python如何实现公司内项目对接钉钉审批流程
    这篇文章给大家分享的是有关python如何实现公司内项目对接钉钉审批流程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。上代码:import requestsimport jsonimport&...
    99+
    2023-06-20
  • python如何实现钉钉机器人自动打卡天天早下班
    今天小编给大家分享一下python如何实现钉钉机器人自动打卡天天早下班的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一,新建...
    99+
    2023-07-02
  • wordpress中如何使用wechat-social-login插件实现QQ微信钉钉Github手机号登陆
    这篇文章给大家分享的是有关wordpress中如何使用wechat-social-login插件实现QQ微信钉钉Github手机号登陆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。wordpress用wechat...
    99+
    2023-06-14
  • vue如何实现全局组件注册
    这篇文章主要为大家展示了“vue如何实现全局组件注册”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现全局组件注册”这篇文章吧。全局组件注册1 一般情...
    99+
    2022-10-19
  • Python如何实现注册登录功能
    这篇文章给大家分享的是有关Python如何实现注册登录功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下本文是用Python写一个注册登录功能,难度不大,很适合练手主要就是用列表和字典,以及逻辑判断用...
    99+
    2023-06-29
  • Python+Tkinter如何实现注册登录功能
    这篇文章给大家分享的是有关Python+Tkinter如何实现注册登录功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下项目结构:源代码:# -*- coding: ut...
    99+
    2023-06-29
  • Jquery如何实现回车响应事件
    这篇文章将为大家详细讲解有关Jquery如何实现回车响应事件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、情境描述欲实现:文本框中输入字符,点击回车,自动跳到一个新窗...
    99+
    2022-10-19
  • jQuery如何实现给input绑定回车事件
    小编给大家分享一下jQuery如何实现给input绑定回车事件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:<s...
    99+
    2022-10-19
  • vue3全局组件自动注册功能如何实现
    vue3全局组件自动注册第一步:建文件需要在src/components 下创建一个文件夹用于存放封装的公共组件(这里我起名叫coms)需要在src/components 下创建一个js文件用于存放引入组件并注册(这里我起名叫Index.j...
    99+
    2023-05-14
    Vue3
  • 如何使用批处理文件实现批量注册dll
    这篇文章主要为大家展示了“如何使用批处理文件实现批量注册dll”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用批处理文件实现批量注册dll”这篇文章吧。但是对于新手来说即使知道是DLL文件...
    99+
    2023-06-08
  • 使用Spring Boot如何实现一个邮件注册功能示
    这期内容当中小编将会给大家带来有关使用Spring Boot如何实现一个邮件注册功能示,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。功能实现(逆向分析)先看看邮件发送的实现 cn.ictgu.tools....
    99+
    2023-05-31
    springboot 邮件
  • 如何使用PHP7的匿名函数和闭包实现更加灵活的事件回调?
    如何使用PHP7的匿名函数和闭包实现更加灵活的事件回调?在PHP7之前,事件回调通常通过创建独立的类和方法来实现。然而,这种方式可能会导致代码变得复杂和冗余。PHP7引入了匿名函数和闭包,大大简化了事件回调的实现方式。本文将介绍如何使用PH...
    99+
    2023-10-22
    PHP 闭包 匿名函数
  • python和sqlite3数据库如何实现简单登陆注册功能
    这篇文章将为大家详细讲解有关python和sqlite3数据库如何实现简单登陆注册功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。#coding=utf8...
    99+
    2022-10-19
  • 如何使用Python函数式编程实现登录注册功能
    这篇文章将为大家详细讲解有关如何使用Python函数式编程实现登录注册功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下代码:def login(username, pas...
    99+
    2023-06-29
  • 如何使用批处理实现注册表危险组件删除功能
    这篇文章主要介绍如何使用批处理实现注册表危险组件删除功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!把这个存成bat文件运行,保你服务器最基本的安全! 代码如下::: 注册表相关设定 reg delete HKEY...
    99+
    2023-06-08
  • html5中如何实现pushstate以及监听浏览器返回事件
    这篇文章主要介绍了html5中如何实现pushstate以及监听浏览器返回事件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。pushstate与监听浏览器返回解决的问题实际开...
    99+
    2023-06-09
  • 如何在python中实现capl语言里的回调函数(推荐)
    CAPL:回调函数 CAPL是一种程序语言,其中程序块的执行由事件控制。 这些程序块被称为事件程序。在事件程序中定义的程序代码在事件发生时执行。换句话说,事件程序就是事件函数,当事件...
    99+
    2022-11-11
  • windows7如何不产生本地文件浏览记录(通过注册表实现)
      第一步:打开注册表,在开始搜索框中输入“regedit”   第二步:在打开的注册表中搜索“TypedPaths”,按&ldq   如图   第三步:在搜索到的&r...
    99+
    2023-05-30
    win7 本地文件 浏览记录 浏览 记录 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作