调用钉钉发起审批实例接口,需要access_token参数。
参考钉钉开发者文档:https://open-doc.dingtalk.com/microapp/serverapi2/eev437
登陆钉钉后台-工作台,自建应用
本文以已经创建的test自建应用说明。点击自建应用test,打开设置,跳转到钉钉开发者平台,设置好白名单
然后应用发布流程-应用开发-应用信息点击查看详情,即可在详情页面中获取appkey和appsecret
接口描述 |
获取钉钉审批token |
||
请求方式 |
GET |
||
请求地址 |
https://oapi.dingtalk.com/gettoken |
||
序号 |
名称/结构 |
说明 |
参数类型 |
1 |
appkey |
应用的唯一标识key |
String |
2 |
appsecret |
应用的密钥 |
String |
请求示例: GET https://oapi.dingtalk.com/gettoken?appkey=
|
|||
{ "errcode": 0, "access_token": "f09c49deceac3bb9ac5561ffae74b81f", "errmsg": "ok", "expires_in": 7200 } |
|||
返回结果: |
|||
序号 |
名称/结构 |
说明 |
备注 |
1 |
errcode |
错误码 |
0 正常 |
2 |
access_token |
请求token |
|
3 |
errmsg |
错误信息 |
OK 正常 |
4 |
expires_in |
生效时间 |
接口描述 |
获取钉钉审批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= |
|||
{ "errcode": 0, "result": { "list": [ { ....... } "request_id": "7ptbt9yz0vem" } |
|||
返回结果: |
|||
序号 |
名称/结构 |
说明 |
备注 |
1 |
errcode |
错误码 |
0 正常 |
2 |
result |
响应结果集合 |
|
3 |
list |
表单内容 |
|
4 |
request_id |
请求ID |
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))