成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)

python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)

熱門標(biāo)簽:西青語音電銷機(jī)器人哪家好 百應(yīng)電話機(jī)器人總部 宿州電話機(jī)器人哪家好 旅游廁所地圖標(biāo)注怎么弄 南昌地圖標(biāo)注 電梯新時(shí)達(dá)系統(tǒng)外呼顯示e 無錫智能外呼系統(tǒng)好用嗎 地圖標(biāo)注與注銷 成都呼叫中心外呼系統(tǒng)哪家強(qiáng)

最近把組內(nèi)的一個(gè)項(xiàng)目對(duì)接釘釘審批接口,通過python3.6。

釘釘官方文檔

廢話不多說了,上代碼:

import requests
import json
import time
from dingtalk.crypto import DingTalkCrypto

from django.conf import settings
# settings.BASE_DIR


class Crypto(object):
    def __init__(self, token):
        # 隨便填的字符串
        self.token = token
        # 自己生成的43位隨機(jī)字符串
        self.aes_key = settings.DINGDING.get("DINGTALK_AES_TOKEN")
        # 釘釘企業(yè)ID
        self.corp_id = settings.DINGDING.get("CorpId") #
        print("corp_id:", self.corp_id)
        self.nonce = settings.DINGDING.get("nonce")
        self.crypto = DingTalkCrypto(
            token=self.nonce,
            encoding_aes_key=self.aes_key,
            corpid_or_suitekey=self.corp_id
        )

    def encrypt_success(self):
        # 返回加密success
        result = self.crypto.encrypt_message(
            msg="success",
            nonce=self.nonce,
            timestamp=int(time.time()*1000)
        )
        return result


class DING(object):
    def __init__(self, approve_process):
        self.AgentId = settings.DINGDING.get("AgentId")
        self.AppKey = settings.DINGDING.get("AppKey")
        self.AppSecret = settings.DINGDING.get("AppSecret")
        self.dingding_url = settings.DINGDING.get("URL")
        self.process_code = settings.DINGDING.get("APPROVE_PROCESS").get(approve_process)['process_code']
        self.aes_key = settings.DINGDING.get("DINGTALK_AES_TOKEN")
        self.nonce = settings.DINGDING.get("nonce")

    def get_token(self):
        '''
        獲取釘釘?shù)膖oken
        :return: 釘釘token
        '''
        url = self.dingding_url + '/gettoken?appkey={}appsecret={}'.format(self.AppKey, self.AppSecret)
        req = requests.get(url)
        req = json.loads(req.text)
        return req['access_token']

# def createCallbackDd():
#     '''
#     注冊(cè)釘釘回調(diào)函數(shù)
#     :return:
#     '''
#     url = 'https://oapi.dingtalk.com/call_back/register_call_back?access_token=' + self.getToken()
#     data = {
#         "call_back_tag": ["bpms_task_change", "bpms_instance_change"],  #這兩個(gè)回調(diào)種類是審批的
#         "token": TOKEN,  #自定義的字符串
#         "aes_key": AES_KEY, #自定義的43位字符串,密鑰
#         "url": URL  #回調(diào)地址
#     }
#     requests.post(url, data=json.dumps(data))
#     return ('OK')

    def create_process(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list, has_cc=0):
        '''
        創(chuàng)建釘釘審批
        approvers為list 元素為釘釘userid   cc_list同理
        '''
        url = self.dingding_url + '/topapi/processinstance/create?access_token=' + self.get_token()
        print("form_component_value_vo:", form_component_value_vo)
        if has_cc == 0:
            data = {
                'agent_id': self.AgentId,
                'process_code': self.process_code,  #工單id
                'originator_user_id': originator_user_id,
                'dept_id': dept_id,  #創(chuàng)建人的釘釘部門id
                'form_component_values': str(form_component_value_vo), #釘釘后臺(tái)配置的需要填寫的字段,
                'approvers': approvers,
                'cc_list': cc_list,
                'cc_position': 'START_FINISH'  # 發(fā)起和完成時(shí)與抄送
            }
        else:
            data = {
                'agent_id': self.AgentId,
                'process_code': self.process_code,  #工單id
                'originator_user_id': originator_user_id, #創(chuàng)建人的釘釘userid
                'dept_id': dept_id,  #創(chuàng)建人的釘釘部門id
                'form_component_values': str(form_component_value_vo), #釘釘后臺(tái)配置的需要填寫的字段,
                'approvers': approvers,
            }
        print("dingding_utils:", data)
        response = requests.post(url, data=data)
        return response.json()

    def get_status(self, process_instance_id):
        url = self.dingding_url + '/topapi/processinstance/get?access_token=' + self.get_token()
        data = {
            "process_instance_id": process_instance_id
        }
        response = requests.post(url, data=data)
        return response.json()

    def register_callback(self, call_back_url):
        # 注冊(cè)回調(diào)
        url = self.dingding_url + '/call_back/register_call_back?access_token=' + self.get_token()
        print("self.get_token():", self.get_token())
        data = {
            "call_back_tag": ['bpms_task_change', 'bpms_instance_change'],
            "token": self.nonce,
            "aes_key": self.aes_key,
            "url": call_back_url,
        }
        response = requests.post(url, data=json.dumps(data))
        return response.json()

    def get_callback(self):
        url = self.dingding_url + '/call_back/get_call_back?access_token=' + self.get_token()
        req = requests.get(url)
        req = json.loads(req.text)
        return req

    def create_process_approver_v2(self, originator_user_id, dept_id, form_component_value_vo, approvers, cc_list):
        '''
        創(chuàng)建釘釘審批
        '''
        url = self.dingding_url + '/topapi/processinstance/create?access_token=' + self.get_token()
        data = {
            'agent_id': self.AgentId,
            'process_code': self.process_code,
            'originator_user_id': originator_user_id,
            'dept_id': dept_id,
            'form_component_values': str(form_component_value_vo),
            'approvers_v2': json.dumps(approvers)
        }
        if cc_list:
            data['cc_list'] = cc_list
            data['cc_position'] = 'FINISH'

        response = requests.post(url, data=data)
        return response.json()

    def create_process_approver_v2_test(self, originator_user_id, dept_id, form_component_value_vo):
        '''
        創(chuàng)建釘釘審批
        '''
        url = self.dingding_url + '/topapi/processinstance/create?access_token=' + self.get_token()
        data = {
            'agent_id': self.AgentId,
            'process_code': self.process_code,
            'originator_user_id': originator_user_id,
            'dept_id': dept_id,
            'form_component_values': str(form_component_value_vo),
            'approvers_v2': json.dumps([
                {
                    "task_action_type": "NONE",
                    "user_ids": ["dingding_id"],   # 單獨(dú)審批人
                },
                {
                    "task_action_type": "OR",
                    "user_ids": ["dingding_id1", "dingding_id2"],   # 或簽
                },
                {
                    "task_action_type": "AND",
                    "user_ids": ["dingding_id1", "dingding_id2"],  # 會(huì)簽
                }
            ])
        }

        response = requests.post(url, data=data)
        return response.json()


if __name__ == "__main__":

    import django, os, sys
    sys.path.append('xxxxxx')   # 項(xiàng)目路徑
    os.environ['DJANGO_SETTINGS_MODULE'] = 'xx.settings'
    # print("settings.DINGDING", settings.DINGDING)
    ding = DING("create_xx")
    # print(ding.get_token())
    # info = [{'name': '單行輸入框','value': 'testixxxxxxxx'}]
    # # print(ding.create_process('11', 11, info))
    a = [
        {'name': "輸入框1", 'value': "value1"},
        {'name': "輸入框2", 'value': "value2"},
    ]
    # print(ding.create_process_test('11', 11, a))
    # print(ding.create_process_approver_v2_test('11', 11, a))
    # print(ding.create_process_test2())
    # print(ding.get_status('xxx'))
    print(ding.get_status('xx'))

    # # 驗(yàn)證  回調(diào)
    # a = ding.get_token()
    # print(a)
    # c = Crypto(a)
    # print(c.encrypt_success())

    # 注冊(cè)回調(diào)
    # print(ding.register_callback("http://xxxx.vaiwan.com/xxx"))
    # print(ding.get_callback())

說明:

  1 Crypto類用于對(duì)接釘釘回調(diào)用的。一個(gè)公司只有一個(gè)corpId,并且一個(gè)corpid只能注冊(cè)一個(gè)回調(diào)地址。我司有公共組注冊(cè)好了回調(diào)。只要接入公司內(nèi)的回調(diào)即可。所以我實(shí)際沒有使用到Crypto。

  2  在釘釘管理后臺(tái)中創(chuàng)建應(yīng)用后會(huì)有這三個(gè)東西:AgentId、AppKey,AppSecret  。在創(chuàng)建釘釘審批流程,可以從審批流程瀏覽器中獲取到APPROVE_PROCESS。別忘啦給這個(gè)流程審批接口權(quán)限。這些官方文檔有說。

  3  配置setting變量:

DINGDING = {
    "AgentId": 123,
    "AppKey": "xx",
    "AppSecret": "xx",
    "URL": "https://oapi.dingtalk.com",
    "APPROVE_PROCESS": { # process_code
        "create_xx": {
            "process_code": "abc", # 審批流程的id
    },
    "DINGTALK_AES_TOKEN": "abc",
    "nonce": "abc",
    "CorpId": "abc",
}

 4 接口形式創(chuàng)建的審批流程,與釘釘管理后臺(tái)創(chuàng)建的流程有一些不同:

    1 不能在不同的審批環(huán)節(jié)設(shè)置不同的抄送人

    2 不能審批流程前后有相同的人,不能自動(dòng)顯示成 “自動(dòng)同意”(管理后臺(tái)設(shè)置成去重后,但是接口指定審批人場(chǎng)景,不支持)

 5 其他如:審批內(nèi)容、或簽,會(huì)簽代碼里都有示例。

到此這篇關(guān)于python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python對(duì)接釘釘審批內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實(shí)現(xiàn)釘釘發(fā)送報(bào)警消息的方法
  • python3實(shí)現(xiàn)釘釘消息推送的方法示例
  • python 調(diào)用釘釘機(jī)器人的方法
  • python釘釘機(jī)器人運(yùn)維腳本監(jiān)控實(shí)例
  • Python制作釘釘加密/解密工具
  • Python第三方包之DingDingBot釘釘機(jī)器人
  • 如何基于python對(duì)接釘釘并獲取access_token
  • 詳解使用python3.7配置開發(fā)釘釘群自定義機(jī)器人(2020年新版攻略)
  • python使用自定義釘釘機(jī)器人的示例代碼
  • Python 實(shí)現(xiàn) T00ls 自動(dòng)簽到腳本代碼(郵件+釘釘通知)
  • 淺談Python 釘釘報(bào)警必備知識(shí)系統(tǒng)講解
  • Python釘釘報(bào)警及Zabbix集成釘釘報(bào)警的示例代碼

標(biāo)簽:辛集 贛州 七臺(tái)河 雅安 渭南 西安 濰坊 許昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)》,本文關(guān)鍵詞  python,公司,內(nèi),項(xiàng)目,對(duì)接,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于python公司內(nèi)項(xiàng)目對(duì)接釘釘審批流程的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    天堂日韩电影| 最近中文字幕在线mv视频在线| 国内精品第一页| 国产激情三区| 欧美一级精品大片| 四虎永久在线精品| av影片在线看| 国产成人一区二区三区| 日本韩国一区| www.欧美亚洲| 91亚洲欧美| 成人黄色在线看| 欧美一区二区福利视频| 亚洲精品合集| 亚洲国产合集| 亚欧精品视频一区二区三区| 麻豆网址在线观看| 91亚洲国产成人精品一区| 97在线视频免费观看完整版| 精品视频免费观看| 久久综合婷婷| 青椒成人免费视频| 欧美性感美女h网站在线观看免费| 亚洲综合久久网| 日本一二三区视频在线| 亚洲国产综合在线观看| 亚洲人成人一区二区三区| av无码一区二区三区| 麻豆精品在线播放| 在线区一区二视频| 亚洲午夜激情免费视频| 丰满人妻一区二区三区53号| 五月婷婷六月丁香| 成人午夜电影久久影院| 国产精品白丝av嫩草影院| 亚洲国产成人精品视频| 亚洲韩国在线| 美女毛片在线看| 国产高清自拍视频在线观看| 中文字幕日韩亚洲| 日韩av卡一卡二| 在线看国产一区| 一区二区在线播放视频| 国产精品色婷婷在线观看| 中文字幕欧美一| 亚洲精品乱码久久久久久蜜桃图片| 懂色av噜噜一区二区三区av| 国产精品有限公司| 美女999久久久精品视频| 一区二区三区日本| 国产成人精品久久亚洲高清不卡| 91高清在线观看视频| 国产不卡高清在线观看视频| 3d动漫精品啪啪1区2区免费| 欧美另类videos| 九七伦理97伦理| 国产精品久久久一区麻豆最新章节| 在线看免费毛片| 麻豆av电影在线观看| 国产一区不卡| 日韩一区二区在线看| 无码播放一区二区三区| 日本高清一区| 精品一区三区| 久草国产在线观看| 精品国产一区二区三区2021| 亚洲精品成人久久久998| 色帝国亚洲欧美在线| 欧美巨大xxxx| 国产精品国产亚洲精品看不卡| 日韩毛片无码永久免费看| 在线午夜影院| 欧美性猛交丰臀xxxxx网站| 亚洲精品国产无天堂网2021| 国产91精品久久久久久久网曝门| 视频精品一区二区| 中文字幕av高清在线观看| 色视频在线免费观看| 国产在线久久久| 麻豆影视在线播放| 99在线精品免费| 亚洲国产99精品国自产| 欧美激情欧美狂野欧美精品| 色老太综合网| 日b视频免费观看| 久久久久久久久久一区二区| 波多野结衣在线影院| 国产精品日产欧美久久久久| 亚洲天堂一级片| 欧美日韩91| 欧美极品aⅴ影院| 国产精品久久久久久久久久精爆| 国产视频网站一区二区三区| 久久国产精品色av免费看| 日韩欧美一级二级三级久久久| 精品电影在线| 亚洲精品久久久久久一区二区| 国产精品免费看久久久香蕉| 不卡毛片在线看| 欧美日韩一区二区视频在线观看| 日本成人黄色免费看| 欧美激情视频在线免费观看 欧美视频免费一| 日本激情一区二区| 国产精品中文久久久久久久| 91九色鹿精品国产综合久久香蕉| 婷婷国产在线| 亚洲色图在线播放| 久久综合给合| 今天免费高清在线观看国语| 美女视频免费精品| 97国产一区二区| 免费观看国产视频在线| 99久久精品国产麻豆演员表| 国产在线观看a视频| 国产99久久久精品| 国产精品久久在线观看| 国产精品视频精品视频| 色爱区综合激月婷婷| 老司机在线永久免费观看| 欧美日韩亚洲综合一区二区三区激情在线| 日本猛少妇色xxxxx免费网站| 欧美日韩亚洲综合在线| eeuss影院在线播放| 国产久卡久卡久卡久卡视频精品| 成人在线免费观看一区| 亚洲一区二区三区爽爽爽爽爽| 91香蕉视频在线| 国产精品99久久久久久久久久久久| 国产精品一区二区你懂得| 交换国产精品视频一区| 亚洲一线在线观看| 国产中文在线观看| 唐朝av高清盛宴| 久久久久久久久久久9不雅视频| 国产精品嫩草影院一区二区| 亚洲国产日韩在线观看| 欧美日本不卡视频| 99久re热视频精品98| 亚洲精品怡红院| 在线中文字幕第一区| 2014亚洲片线观看视频免费| 成年人网站在线免费观看| 亚洲欧美日韩一级| 久久久精品一区二区毛片免费看| 88久久精品| 午夜伦理福利在线| 日本高清+成人网在线观看| 久久亚洲国产精品日日av夜夜| 日本免费色视频| 人与人69性欧美三人交| 最新av网站在线观看| 免费无码毛片一区二三区| 日韩美女av在线免费观看| 美女黄a一级视频| 四虎影视最新网站入口在线观看| 日本中文字幕在线视频| 狠狠综合久久av一区二区老牛| 好男人www在线视频| 精品深夜av无码一区二区老年| 日韩精品视频免费在线观看| 日韩在线免费看| 黄页网站大全在线观看| 黄色一级片免费看| 日本不卡二三区| 国产日韩欧美日韩| 中日韩一级黄色片| 欧美中文娱乐网| 国产无一区二区| 国产成人在线视频播放| 日本久久成人网| 免费在线观看一区| 曰韩不卡视频| 免费看91的网站| 欧美激情第三页| 精品亚洲欧美日韩| 中文字幕日韩在线视频| 日韩av中文| 日批免费观看视频| 蜜臀91精品一区二区三区| 国产在线视频一区二区| 国产精品69精品一区二区三区| 2021年精品国产福利在线| 久久aimee| 五月激情丁香网| 无遮挡又色又刺激的女人视频| 日日夜夜人人| 亚洲国产一区二区在线| 日韩亚洲欧美中文三级| 尤物免费看在线视频| 欧美日韩一级大片网址| 欧美性猛交xxxxxxxx| 欧美性猛交xxxx免费看久久| 色伊人久久综合中文字幕| 国产精品免费av一区二区| 麻豆国产在线| 色一色在线观看视频网站| 成人精品久久久| 国产免费一区二区三区视频| 手机福利在线视频| 成人a在线观看高清电影| 555夜色666亚洲国产免| 欧美不卡一区二区| 大尺度一区二区| 日韩精品成人| 色多多在线观看| 亚洲综合影院| 国产一区二区三区在线观看网站| 欧美日韩激情美女| 97在线观看免费| av中文字幕免费在线观看| 国产bdsm视频| 国产一区私人高清影院| 国内精品伊人久久久久av一坑| 黄色在线论坛| 欧美高清在线视频观看不卡| 秋霞精品一区二区三区| 久久99国产精品尤物| 免费看久久久| 精品视频在线观看免费| 久久中文字幕av一区二区不卡| 国产91在线精品| 国产一区二区女内射| 久久久久久女乱国产| 日韩少妇内射免费播放| 污视频在线播放| 久久一日本道色综合| 午夜精品福利电影| 国产成人在线网站| 欧美在线不卡视频| 欧美白人做受xxxx视频| 欧美在线视频一区| 欧美一级大片在线免费观看| 国产伦精品一区二区三区在线播放| 91国产美女在线观看| 午夜视频一区二区在线观看| 美女主播视频一区| 你懂的在线观看视频网站| 日本免费在线播放| 欧美日韩亚洲自拍| 欧美日韩中文字幕在线播放| 日韩欧美三区| 在线理论视频| 污污的视频免费| 亚洲大片一区二区三区| 中文字幕日韩精品有码视频| 91免费看片在线观看| 欧美午夜黄色| 中文字幕一区二区中文字幕| 国产精品2023| 欧美成人高清视频| 香港久久久电影| 在线日韩欧美视频| 国产美女精品视频| 欧美日韩伦理在线免费| 亚洲 国产 日韩 欧美| 中国一区二区三区| 丁香五精品蜜臀久久久久99网站| 要久久爱电视剧全集完整观看| 精品人妻一区二区三区香蕉| 久久久黄色av| 姑娘第5集在线观看免费好剧| 蜜臀国产一区二区三区在线播放| 91亚洲精品视频在线观看| 九色在线观看| 国产精选在线视频拍拍拍| 三级男人添奶爽爽爽视频| 在线观看视频日韩| 在线观看欧美| 国产精品视频一区视频二区| 欧美成人精品h版在线观看| 一夜七次郎国产精品亚洲| 欧美精品日韩一区| 欧美家庭影院| 欧美视频精品一区| 成人三级网址| 国模叶桐国产精品一区| 青青在线免费观看| 欧美韩国一区| 久久精品导航| 欧美日韩亚洲系列| 91亚洲国产成人精品一区二三| 麻豆一区二区三区| av中文字幕在线观看| 日韩精品一区二区三区四区五区| 先锋影音av在线| 国产乱码字幕精品高清av| 日本免费看片网站| 青春草视频在线观看| 香蕉视频在线观看免费| 国产精品手机在线播放| 91porny九色| 九九**精品视频免费播放| 国产电影一区| 成人在线观看av| 色一情一乱一伦| 黄色在线免费观看网站| 亚洲精品国精品久久99热| 激情五月开心婷婷| 欧洲grand老妇人| 狠狠综合久久av一区二区| 国产中文字幕亚洲| 在线不卡a资源高清| 精品99久久| 成人免费va视频| 加勒比在线一区二区三区观看| 国产尤物91| 中文日韩在线视频| 免费成人看片| 国产一区不卡精品| 嫩呦国产一区二区三区av| 精品亚洲a∨一区二区三区18| 精品少妇一区二区三区在线| 少妇高潮一区二区三区69| 久久久久久久高潮| 99re在线视频上| 艳色歌舞团一区二区三区| 成年人网站91| 欧美日韩生活片| 日韩免费电影网站| 91porn在线观看| 性一交一乱一精一晶| 美女网站视频一区| 日韩—二三区免费观看av| 欧美韩日国产| 日韩欧美的一区| 在线能看的av网址| 青草久久视频| 人人爱人人干婷婷丁香亚洲|