AI文档资料封面图

2023-04-06by@korvin101-JFoXu&@midjourney.Model: gpt-3.5
korvin101-JFoXu

Generate an image prompt for an AI art bot. Create 5 image prompts that I can use with the MidJourney AI art bot. I will give you a sentence of what I have in mind, and then you generate the image prompts based on the following format:

MidJourney Prompt Format Style: [type of art], [subject or topic], [action or activity], [aesthetic details, lighting, and styles], [colors], [--ar aspect ratio]

Example Image Prompt: watercolor illustration of a tiny adorable hamster dressed up in a suit and tie, fantasy character, --ar 16:9

If you understand, ask me what I have in mind. respond in English.

Avatar
korvin101-JFoXu

AI文档资料封面图

Avatar
Avatar

MidJourney Prompt Format Style: digital illustration, document cover, technology theme, futuristic elements, blue and white colors, --ar 3:2

MidJourney Prompt Format Style: abstract art, science fiction, space travel, colorful swirls and patterns, black background, --ar 4:3

MidJourney Prompt Format Style: minimalist design, business report cover, geometric shapes, grayscale colors, sharp lines, --ar 16:9

MidJourney Prompt Format Style: mixed media art, education materials cover, school supplies, pencils, books, and rulers, bright and vivid colors, --ar 2:1

MidJourney Prompt Format Style: surrealism, medical journal cover, human organs and anatomy, dreamlike atmosphere, red and pink shades, --ar 1:1

korvin101-JFoXu

钉钉企业审批 回调事件消息体加解密python代码

Avatar
Avatar

这个问题需要一些上下文信息才能给出具体的代码。请提供更多的信息,例如:

  • 您使用的是哪个版本的钉钉开发包?
  • 您希望加密和解密哪些回调事件消息体?
  • 您已经尝试过哪些代码?在哪里出现了问题?
korvin101-JFoXu

钉钉的企业内部应用开发中的回调事件消息体加解密python代码示例

Avatar
Avatar

以下是使用Python解密和加密钉钉回调事件消息体的示例代码,假设您使用的是DingTalk SDK for Python 。

import json
from dingtalk.crypto import DingTalkCrypto

# 钉钉回调事件的加密解密参数
app_secret = 'your_app_secret'
aes_key = 'your_aes_key'
token = 'your_token'

# 初始化钉钉加密解密工具
crypto = DingTalkCrypto(token, aes_key, app_secret)

# 解密回调事件消息体
def decrypt_event_body(event_body):
    plain_text = crypto.decrypt(event_body)
    return json.loads(plain_text)

# 加密回调事件消息体
def encrypt_event_body(event_body):
    plain_text = json.dumps(event_body)
    return crypto.encrypt(plain_text)

使用时,只需将回调事件消息体传递给decrypt_event_body函数进行解密,将解密后的消息体传递给钉钉应用进行处理。如果需要加密回调事件消息体,可以使用encrypt_event_body函数进行加密。

korvin101-JFoXu

from dingtalk.crypto import DingTalkCrypto 从哪里来

Avatar
Avatar

from dingtalk.crypto import DingTalkCrypto是从dingtalk-sdk包的crypto模块中导入DingTalkCrypto类。

因此,在使用此代码之前,您需要先安装dingtalk-sdk包。可以使用pip安装该包,命令如下:

pip install dingtalk-sdk

安装完成后,即可通过from dingtalk.crypto import DingTalkCrypto导入DingTalkCrypto类。

korvin101-JFoXu

钉钉的审批事件回调数据格式你知道吗

Avatar
Avatar

当企业内部应用开发者在钉钉开发平台上创建审批应用后,可以通过回调URL接收审批事件通知。当企业内部应用在审批相关业务中发生了状态变更时,钉钉服务器会将事件通知发送到开发者提供的回调URL。

审批事件回调数据格式如下:

{
  "EventType": "bpms_instance_change",
  "TimeStamp": 1556560000000,
  "processInstanceId": "fc1d0c44-efea-45b9-8a48-6c2d1e900e7b",
  "corpId": "ding1234567890abcdefg",
  "type": "finish",
  "result": "agree",
  "bizCategoryId": 123456,
  "title": "审批申请标题",
  "staffId": "user123",
  "url": "https://oa.dingtalk.com/...",
  "businessId": "123456",
  "bizTitle": "审批业务标题",
  "formValues": [
    {
      "name": "字段1",
      "value": "值1"
    },
    {
      "name": "字段2",
      "value": "值2"
    },
    {
      "name": "字段3",
      "value": "值3"
    }
  ]
}

其中,各字段含义如下:

  • EventType:事件类型,固定为bpms_instance_change
  • TimeStamp:事件发生的时间戳,单位为毫秒。
  • processInstanceId:审批实例ID。
  • corpId:企业ID。
  • type:审批实例状态,包括startfinishterminatecancel等。
  • result:审批结果,包括agreerefuseredirected等。
  • bizCategoryId:业务类型ID。
  • title:审批申请标题。
  • staffId:发起审批的员工ID。
  • url:审批详情页URL。
  • businessId:业务ID。
  • bizTitle:业务标题。
  • formValues:表单字段内容。

注意,钉钉的审批事件回调数据格式可能会根据具体的业务场景进行调整和扩充。开发者需要根据实际情况进行处理。

korvin101-JFoXu

基于以上示例,请使用python模拟一个钉钉审批同意的回调事件的请求

Avatar
Avatar

以下是一个模拟钉钉审批同意的回调事件请求的Python代码示例:

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

# 钉钉回调事件的加密解密参数
app_secret = 'your_app_secret'
aes_key = 'your_aes_key'
token = 'your_token'

# 初始化钉钉加密解密工具
crypto = DingTalkCrypto(token, aes_key, app_secret)

# 构造模拟回调事件消息体
event_body = {
    "EventType": "bpms_instance_change",
    "TimeStamp": int(time.time() * 1000),
    "processInstanceId": "fc1d0c44-efea-45b9-8a48-6c2d1e900e7b",
    "corpId": "ding1234567890abcdefg",
    "type": "finish",
    "result": "agree",
    "bizCategoryId": 123456,
    "title": "审批申请标题",
    "staffId": "user123",
    "url": "https://oa.dingtalk.com/...",
    "businessId": "123456",
    "bizTitle": "审批业务标题",
    "formValues": [
        {
            "name": "字段1",
            "value": "值1"
        },
        {
            "name": "字段2",
            "value": "值2"
        },
        {
            "name": "字段3",
            "value": "值3"
        }
    ]
}

# 加密回调事件消息体
encrypted_body = crypto.encrypt(json.dumps(event_body))

# 发送模拟回调事件请求
url = 'https://your_callback_url'
headers = {'Content-Type': 'application/json'}
data = {"encrypt": encrypted_body}
response = requests.post(url, headers=headers, json=data)

# 输出回调事件处理结果
print(response.text)

注意,以上示例中的your_callback_url需要替换为实际的回调URL。另外,为了方便模拟,示例代码中的时间戳是当前时间戳,实际应用时需要根据业务场景设置正确的时间戳。

korvin101-JFoXu

还有签名需要处理

Avatar
Avatar

是的,钉钉回调事件还需要进行签名校验,以确保回调事件来自钉钉服务器,并防止伪造请求。签名校验的过程如下:

  1. 将时间戳和随机字符串拼接成一个字符串。

  2. 将拼接后的字符串进行SHA1加密,获得签名。

  3. 将签名和时间戳以及随机字符串一起作为HTTP请求的头部信息进行发送。

开发者可以使用以下代码生成签名:

import hashlib
import hmac

def get_signature(timestamp, nonce, token, aes_key):
    sign_str = ''.join([str(timestamp), nonce, token, aes_key])
    sign_bytes = sign_str.encode('utf-8')
    signature = hmac.new(aes_key.encode('utf-8'), sign_bytes, hashlib.sha1).digest()
    return signature.hex()

其中,timestampnoncetokenaes_key分别为回调事件中的时间戳、随机字符串、开发者设置的Token和AES Key。

在发送回调事件请求时,需要将生成的签名作为HTTP请求头部信息中的X-Ding-Talk-Signature字段进行发送。例如:

headers = {
    'Content-Type': 'application/json',
    'X-Ding-Talk-Signature': get_signature(timestamp, nonce, token, aes_key)
}

注意,以上代码中的nonce是在钉钉回调事件请求中的encrypt字段中解密出来的随机字符串,开发者应该从回调事件中获取该值,而不是自己生成随机字符串。

korvin101-JFoXu

所以请给我一个完整的使用python模拟一个钉钉审批同意的回调事件的请求的代码示例

Avatar
Avatar

以下是一个完整的使用Python模拟一个钉钉审批同意的回调事件请求的代码示例,包括消息体加密、签名校验等:

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

# 钉钉回调事件的加密解密参数
app_secret = 'your_app_secret'
aes_key = 'your_aes_key'
token = 'your_token'

# 初始化钉钉加密解密工具
crypto = DingTalkCrypto(token, aes_key, app_secret)

# 生成签名
def get_signature(timestamp, nonce, token, aes_key):
    sign_str = ''.join([str(timestamp), nonce, token, aes_key])
    sign_bytes = sign_str.encode('utf-8')
    signature = hmac.new(aes_key.encode('utf-8'), sign_bytes, hashlib.sha1).digest()
    return signature.hex()

# 构造模拟回调事件消息体
event_body = {
    "EventType": "bpms_instance_change",
    "TimeStamp": int(time.time() * 1000),
    "processInstanceId": "fc1d0c44-efea-45b9-8a48-6c2d1e900e7b",
    "corpId": "ding1234567890abcdefg",
    "type": "finish",
    "result": "agree",
    "bizCategoryId": 123456,
    "title": "审批申请标题",
    "staffId": "user123",
    "url": "https://oa.dingtalk.com/...",
    "businessId": "123456",
    "bizTitle": "审批业务标题",
    "formValues": [
        {
            "name": "字段1",
            "value": "值1"
        },
        {
            "name": "字段2",
            "value": "值2"
        },
        {
            "name": "字段3",
            "value": "值3"
        }
    ]
}

# 加密回调事件消息体
encrypted_body = crypto.encrypt(json.dumps(event_body))

# 生成签名
nonce = 'nonce'  # 从回调事件中获取随机字符串
timestamp = event_body['TimeStamp']
signature = get_signature(timestamp, nonce, token, aes_key)

# 发送模拟回调事件请求
url = 'https://your_callback_url'
headers = {
    'Content-Type': 'application/json',
    'X-Ding-Talk-Signature': signature
}
data = {"encrypt": encrypted_body, "nonce": nonce}
response = requests.post(url, headers=headers, json=data)

# 输出回调事件处理结果
print(response.text)

注意,以上示例中的your_callback_url需要替换为实际的回调URL。另外,为了方便模拟,示例代码中的时间戳是当前时间戳,实际应用时需要根据业务场景设置正确的时间戳。

korvin101-JFoXu

不对,钉钉审批同意的回调事件请求中signature、timestamp、nonce都是放到query参数上的,只有encrypt是放到request body上的

Avatar
Avatar

An error occurred with your deployment

EDGE_FUNCTION_INVOCATION_TIMEOUT

korvin101-JFoXu

不对,钉钉审批同意的回调事件请求中signature、timestamp、nonce都是放到query参数上的,只有encrypt是放到request body上的

Avatar
Avatar

An error occurred with your deployment

EDGE_FUNCTION_INVOCATION_TIMEOUT

korvin101-JFoXu

python数据里的数据按照字典序升序排列

Avatar
Avatar

Usage limit reached 🤕
Each user can chat for free 10 times a day
Please [Upgrade to PRO] to expand the limit