涛声呢喃 2022-09-13 09:35
浏览 18
已结题

关于VB.NET企业微信推送文件的问题,如何解决?

有没有会VB.NET企业微信上传推送文件的代码?只找到了python的代码测试是成功的

import requests
import hashlib
import base64

class WeChatBot:

    def __init__(self, key):
        self.key = key
        self.wxurl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + key

    def send_file(self, name, filepath):
        """
        :param name: 发送的文件名字,用于在企业微信上展示的
        :param filepath: 本地实际文件路径
        """
        fl = open(filepath, 'rb')
        files = {'files': (name, fl, 'application/octet-stream', {'Expires': '0'})}
        print(files)
        url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=' + self.key + '&type=file'
        req = requests.post(url, files=files).json()
        # 把文件上送至企业微信服务器,生成media_id

        if req['media_id'] is not None:
            send_json = {
                "msgtype": "file",
                "file": {
                    "media_id": req['media_id']
                }
            }
            print(send_json)
            requests.post(self.wxurl, json=send_json)

    def send_message(self, content='', mentioned_list=[], mentioned_mobile_list=[]):
        """
        此方法用于发送文字消息
        :param content: 文字内容
        :param mentioned_list: (不是必填项)userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
        :param mentioned_mobile_list:(不是必填项)手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
        """
        data = {
            "msgtype": "text",
            "text": {
                "content": content,
                "mentioned_list": mentioned_list,
                "mentioned_mobile_list": mentioned_mobile_list
            }
        }
        res = requests.post(self.wxurl, json=data).json()
        print(res)

    def send_img(self, filename):
        """
        此方法用于发送图片
        :param filename: 图片文件的路径
        """
        png = filename
        with open(png, "rb") as f:
            md = hashlib.md5(f.read())
            res1 = md.hexdigest()
        with open(png, "rb") as f:
            base64_data = base64.b64encode(f.read())
        im_json = {
            "msgtype": "image",
            "image": {
                "base64": str(base64_data, 'utf-8'),
                "md5": res1
            }
        }
        requests.post(self.wxurl, json=im_json)


if __name__ == '__main__':
    bot = WeChatBot('这里填自己的KEY')
    bot.send_message(content='测试消息')
    bot.send_img(filename='./world/121.jpg')
    bot.send_file(name='测试.txt', filepath='./x.txt')

  • 写回答

1条回答 默认 最新

  • 涛声呢喃 2022-09-13 12:51
    关注
    
        Public Shared Function Post(ByVal url As String, ByVal FileName As String) As String
            Dim result As String = ""
            'url是请求地址 ,data是参数      
            ServicePointManager.Expect100Continue = False
            Dim request As HttpWebRequest = WebRequest.Create(url)
            '设置Post请求方式
            request.Method = "POST"
    
            '参数内容类型
            request.ContentType = "application/octet-stream"
            'request.Accept = "Content-Disposition: form-data; name='media';filename='wework.txt'"
            request.Headers.Add("Content-Disposition", " form-data; name='media';filename='wework.txt'")
            '将URL编码后的参数字符串转化为字节
            Dim enCoding As New UTF8Encoding()
            Using reader As New StreamReader(FileName, False)
                result = reader.ReadToEnd()
            End Using
            Dim bys As Byte() = Encoding.GetBytes(result)
            '设置POST请求的 ContentLength
            request.ContentLength = bys.Length
    
            '获得请求数据流
            Dim newStream As Stream = request.GetRequestStream()
            newStream.Write(bys, 0, bys.Length)
            newStream.Close()
            '获得响应数据流
            Dim sr As StreamReader = New StreamReader(request.GetResponse().GetResponseStream)
            Return sr.ReadToEnd
    
        End Function
    Function PushFile(ByVal media_id As String) As String
            Const SendText As String = "{""msgtype"": ""file"",""file"" : { ""media_id"":  ""文件id""}}"
    
            Dim http = CreateObject("MSXML2.ServerXMLHTTP")
    
            Str1 = Replace(SendText, "文件id", media_id)
            MsgBox(Str1)
            url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=******你的KEY*****"
            http.Open("Post", url, False)
    
            http.send(Str1)
            rs = http.responseText  '返回值
            If http.Status = 200 Then
                Str2 = http.responseText
            End If
            If InStr(Str2, ErrCode) = 0 Then MsgBox("错误信息:>>>" & rs & "<<<")
            PushFile = Nothing
        End Function
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim str As String
            str = Post("https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=******你的KEY*****&type=file", "c:\x.txt")
            TextBox1.Text = str
            '解析返回的json对象Key值
            Dim j As Object = New System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(Of Object)(str)
            Dim media_id = j("media_id")
            'MsgBox(j("media_id"))
            TextBox2.Text = media_id
            PushFile(TextBox2.Text)
        End Sub
    

    可以推送但是不显示 文件名字

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 计算二重积分∫∫e^(x+y)dxdy,其中0≤x≤1,0≤y≤1,试分别用复合辛普森公式(取n=4)以及高斯求积公式(取n=4)计算积分 给出matlab程序
  • ¥15 opencv 无法读取视频
  • ¥15 用matlab 实现通信仿真
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的