2026/2/3 20:47:47
网站建设
项目流程
昌网站建设,网站开发服务费记账,wordpress检索蜘蛛插件,网站建设客户分析调查问卷发送非文本类消息#xff0c;如图片 (msgtype: image) 或文件 (msgtype: file)#xff0c;不能直接将文件数据包含在 POST 请求体中。企业微信要求开发者首先将素材上传到服务器#xff0c;获取一个临时的唯一标识符#xff1a;media_id#xff0c;然后再将此 media_id 用…发送非文本类消息如图片 (msgtype: image) 或文件 (msgtype: file)不能直接将文件数据包含在 POST 请求体中。企业微信要求开发者首先将素材上传到服务器获取一个临时的唯一标识符media_id然后再将此media_id用于构建最终的消息体。1. 两步走的核心流程上传素材调用/cgi-bin/media/upload接口将本地文件以multipart/form-data的形式上传到企业微信服务器。服务器返回一个临时的media_id。发送消息调用/cgi-bin/appchat/send接口在请求体中用获取到的media_id替换掉原有的文本内容。2. 第一步Go 实现素材上传素材上传需要使用multipart/form-data格式这是 Go 语言中一个相对复杂的网络操作需要用到mime/multipart包。2.1 上传 API 接口请求方式POST请求 URLhttps://qyapi.weixin.qq.com/cgi-bin/media/upload?access_tokenACCESS_TOKENtypeTYPETYPE素材类型如image、file、voice等。2.2 Go 上传实现思路创建 Pipeline使用bytes.Buffer配合mime/multipart.Writer来构造multipart/form-data的请求体。写入文件字段使用writer.CreateFormFile(fieldname, filename)创建一个文件字段并返回一个io.Writer。将本地文件的内容通过io.Copy()写入到这个io.Writer中。设置 Content-Type关键在于HTTP 请求头中的Content-Type必须设置为multipart/form-data并且其边界Boundary值必须与multipart.Writer自动生成的边界值保持一致。执行 POST 请求发送包含文件内容的 HTTP POST 请求。解析响应接收响应 JSON解析到对应的 Struct 中获取media_id。2.3 核心返回 Structtype UploadResponse struct { ErrCode int json:errcode ErrMsg string json:errmsg Type string json:type MediaID string json:media_id // 核心字段 }3. 第二步Go 实现消息发送获取media_id后发送消息就回归到帖子 17中的 JSON 构造和 POST 流程。3.1 消息 Struct 定义只需要将msgtype设置为image或file并替换内容字段。// 以图片消息为例 type ImageContent struct { MediaID string json:media_id // 使用上传获取到的 ID } type SendImageMessageRequest struct { ChatID string json:chatid MsgType string json:msgtype // image Image ImageContent json:image }3.2 发送流程实例化SendImageMessageRequest将上一步获得的media_id填入。使用json.Marshal序列化为 JSON 字节流。构造 POST 请求发送到/cgi-bin/appchat/send接口。4. 关键注意事项素材有效期上传的临时素材media_id仅在三天内有效且只能被用于一次消息发送。因此每次发送非文本消息前几乎都需要执行一次上传操作。文件大小限制不同类型的素材有严格的大小限制例如图片最大 $2\text{MB}$文件最大 $20\text{MB}$。超限会导致上传失败。权限确保应用具有发送文件/图片消息的权限。QiWe开放平台提供了后台直登功能登录成功后获取相关参数快速Apifox在线测试所有登录功能都是基于QiWe平台API自定义开发。