1-获取access_token
调用钉钉发起审批实例接口,需要access_token参数。
参考钉钉开发者文档:https://open-doc.dingtalk.com/microapp/serverapi2/eev437
登陆钉钉后台-工作台,自建应用

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

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


2-使用postmen测试钉钉审批获取token
接口描述 | 获取钉钉审批token | ||
请求方式 | GET | ||
请求地址 | https://oapi.dingtalk.com/gettoken | ||
序号 | 名称/结构 | 说明 | 参数类型 |
1 | appkey | 应用的唯一标识key | String |
2 | appsecret | 应用的密钥 | String |
请求示例: GET https://oapi.dingtalk.com/gettoken?appkey=<you appkey >8p&appsecret=<you 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=<you access_token >&process_code=<you process_code>&start_time=<you start_time>&end_time=<you 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))