Python封装类获取钉钉审批实例内容

1-获取access_token

调用钉钉发起审批实例接口,需要access_token参数。

参考钉钉开发者文档:https://open-doc.dingtalk.com/microapp/serverapi2/eev437

登陆钉钉后台-工作台,自建应用

Python封装类获取钉钉审批实例内容_第1张图片 图1

本文以已经创建的test自建应用说明。点击自建应用test,打开设置,跳转到钉钉开发者平台,设置好白名单

Python封装类获取钉钉审批实例内容_第2张图片 图2

然后应用发布流程-应用开发-应用信息点击查看详情,即可在详情页面中获取appkey和appsecret

Python封装类获取钉钉审批实例内容_第3张图片 图3
Python封装类获取钉钉审批实例内容_第4张图片 图4

2-使用postmen测试钉钉审批获取token

接口描述

获取钉钉审批token

请求方式

GET

请求地址

https://oapi.dingtalk.com/gettoken

序号

名称/结构

说明

参数类型

1

appkey

应用的唯一标识key

String

2

appsecret

应用的密钥

String

请求示例:

GET

https://oapi.dingtalk.com/gettoken?appkey=8p&appsecret=

 

{

"errcode": 0,

"access_token": "f09c49deceac3bb9ac5561ffae74b81f",

"errmsg": "ok",

"expires_in": 7200

}

返回结果:

序号

名称/结构

说明

备注

1

errcode

错误码

0 正常

2

access_token

请求token

 

3

errmsg

错误信息

OK 正常

4

expires_in

生效时间

 

3.获取特定的钉钉审批实例列表内容

接口描述

获取钉钉审批token

请求方式

GET

请求地址

https://oapi.dingtalk.com/topapi/processinstance/list

序号

名称/结构

说明

参数类型

1

access_token

请求token

String

2

process_code

流程模板唯一标识,可在OA管理后台编辑审批表单部分查询

String

3

start_time

开始时间。Unix时间戳

Number

4

end_time

结束时间,默认取当前时间。Unix时间戳

Number

请求示例:

GET

https://oapi.dingtalk.com/topapi/processinstance/list?access_token=

>&process_code=&start_time=&end_time=

{

"errcode": 0,

"result": {

"list": [

{

.......

}

"request_id": "7ptbt9yz0vem"

}

返回结果:

序号

名称/结构

说明

备注

1

errcode

错误码

0 正常

2

result

响应结果集合

 

3

list

表单内容

 

4

request_id

请求ID

 

4.使用python封装钉钉审批获取类

DingdingUtils.py.其中APPKEY, APPSECRET, DING_TALK_TOKEN_URL, CONTENT_TYPE, USER_AGENT, MY_DING_ROBOT_HEADERS, MY_DING_ROBOT_URL, MY_DING_ROBOT_TEL, DING_TALK_PROCESS_URL, PROCESS_CODE, START_TIME这些参数都放在配置文件中。

from app.Config.config import APPKEY, APPSECRET, DING_TALK_TOKEN_URL, CONTENT_TYPE, USER_AGENT, MY_DING_ROBOT_HEADERS, MY_DING_ROBOT_URL, MY_DING_ROBOT_TEL, DING_TALK_PROCESS_URL, PROCESS_CODE, START_TIME
import json
import requests
import sys
import os
import urllib.request

class DingdingUtils(object):
    """钉钉操作类"""

    _appkey = APPKEY
    _appsecret = APPSECRET
    _tokenUrl = DING_TALK_TOKEN_URL
    _robotHeaders = MY_DING_ROBOT_HEADERS
    _robotUrl = MY_DING_ROBOT_URL
    _robotTel = MY_DING_ROBOT_TEL
    _processUrl = DING_TALK_PROCESS_URL

    # 获取钉钉审批Token
    def getDingToken(self):
        headers = {
            'Content-Type': CONTENT_TYPE,
            'User-Agent': USER_AGENT
            }
        url = self._tokenUrl % (self._appkey, self._appsecret)
        req = urllib.request.Request(url, headers=headers)
        result = urllib.request.urlopen(req)
        access_token = json.loads(result.read())
        if(access_token["errcode"] == 0):
            return access_token["access_token"]
        else:
            self.sendMsgRobot("0-钉钉操作:获取Token失败:"+access_token["errmsg"])
            return None

    # 获取单个审批内容
    def getDingProcessContent(self, process_code, start_time):
        headers = {
            'Content-Type': CONTENT_TYPE,
            'User-Agent': USER_AGENT
            }
        data = {
            'process_code': process_code,
            'start_time': start_time
             }
        accesstoken = self.getDingToken() 
        if(accesstoken != None):
            data1 = json.dumps(data).encode(encoding='UTF8')
            processUrl = self._processUrl % (accesstoken)
            req = urllib.request.Request(processUrl, headers = headers, data = data1)
            result = urllib.request.urlopen(req)
            list = json.loads(result.read())
            return list
        else:
            self.sendMsgRobot("0-钉钉操作:获取Token失败:"+access_token["errmsg"])
        

    # 钉钉机器人发送文本消息
    def sendMsgRobot(self,msg):
        robotHeaders = self._robotHeaders
        robotUrl = self._robotUrl
        json_text = {
          "msgtype": "text",
          "text": {
              "content": msg
          },
          "at": {
              "atMobiles": [
                  self._robotTel
              ],
              "isAtAll": False
            }
          }
        requests.post(robotUrl, json.dumps(json_text), headers=robotHeaders).content



#testDing = DingdingUtils()
#print(testDing.getDingProcessContent(PROCESS_CODE, START_TIME))

 

 

你可能感兴趣的:(钉钉二次开发,Python)