介绍

微信群提供了机器人功能,通过 API 可以快速向群内发送消息,可以用于各种推送类信息。

消息类型支持图片,因此可以将手机使用的文件下载链接变成二维码,供手机扫码下载使用。

配置

只需要一个 HTTP 请求即可将内容发送到群中,支持多种消息类型。

思路

使用 Python QR 库将下载链接转换为二维码

使用在线网站工具将 curl 请求转换为 Python 代码:

代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import base64
import hashlib
import io
import json

import requests
import qrcode


def main():
    send_wxwork_qrcode('token-xxxxxxxxxxxx', 'http://www.youdomain.com/download.apk')


def send_wxwork_qrcode(token, content):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(content)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")

    # img.show()
    # img.save("qrcode.png")
    img_bytes_io = io.BytesIO()
    img.save(img_bytes_io, format='PNG')
    img_bytes_array = img_bytes_io.getvalue()

    encode_str = base64.b64encode(img_bytes_array)
    image_data = str(encode_str, 'utf-8')

    md = hashlib.md5()
    md.update(img_bytes_array)
    image_md5 = md.hexdigest()

    # print('data:image/png;base64,' + image_data)
    # print(image_md5)

    params = {
        'key': f'{token}',
    }

    data = {
        "msgtype": "image",
        "image": {
            "base64": image_data,
            "md5": image_md5
        }
    }

    headers = {'content-type': 'application/json;charset=utf-8'}
    url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send'
    body = json.dumps(data)
    print(body)
    response = requests.post(url, params=params, data=body, headers=headers)
    print(f'response:\n{response.text}')


if __name__ == '__main__':
    main()