首页 > 其他分享 >抖音私信回复图片接口-企业号授权到开放平台-调用上传图片并发送私信消息

抖音私信回复图片接口-企业号授权到开放平台-调用上传图片并发送私信消息

时间:2024-08-28 13:03:55浏览次数:10  
标签:私信 return string err nil 开放平台 Println id 图片

抖音私信回复图片接口

企业号授权到开放平台

调用上传图片并发送私信消息

这样用户就可以在客服后台,直接给私信用户发送图片了

感兴趣的+ \/   :  llike620

golang代码

// 获取 ClientToken
func (this *Douyin) GetClientToken() (string, error) {
    url := "https://open.douyin.com/oauth/client_token/"
    // 判断access_token是否过期,如果未过期则直接返回
    cacheKey := "douyin_client_token" + this.ClientKey
    if clientToken, ok := douyinCache.Get(cacheKey); ok {
        return clientToken.(string), nil
    }
    // 构建请求参数
    params := map[string]interface{}{
        "grant_type":    "client_credential",
        "client_key":    this.ClientKey,
        "client_secret": this.ClientSecret,
    }

    // 创建HTTP请求的body
    jsonParams, err := json.Marshal(params)
    requestBody := bytes.NewBuffer(jsonParams)

    // 创建POST请求
    req, err := http.NewRequest("POST", url, requestBody)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return "", err
    }
    // 设置请求头
    req.Header.Set("Content-Type", "application/json")
    // 发送请求
    client := http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return "", err
    }

    defer response.Body.Close()

    // 读取响应
    responseBody, err := ioutil.ReadAll(response.Body)
    log.Println("抖音获取client_token:", string(responseBody))
    if err != nil {
        return "", err
    }
    clientToken := gjson.Get(string(responseBody), "data.access_token").String()
    if clientToken != "" {
        douyinCache.Set(cacheKey, clientToken, 30*time.Minute)
    }

    return clientToken, nil
}

 

// 上传图片
func (this *Douyin) ReplyImageMessage(access_token, eventType, open_id, to_user_id, conversation_id, msg_id, filePath string) (string, error) {
    url := "https://open.douyin.com/tool/imagex/client_upload/"
    clientToken, _ := this.GetClientToken()
    // 打开文件
    file, err := os.Open(filePath)
    if err != nil {
        log.Println("Error opening file:", err)
        return "", err
    }
    defer file.Close()

    // 创建一个buffer来存储表单数据
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)

    // 添加文件到表单数据
    part, err := writer.CreateFormFile("image", "filename.jpg") // 假设文件名为filename.jpg
    if err != nil {
        log.Println("Error creating form file:", err)
        return "", err
    }
    _, err = io.Copy(part, file)

    // 结束表单编码
    err = writer.Close()
    if err != nil {
        log.Println("Error closing multipart writer:", err)
        return "", err
    }

    // 创建请求
    req, err := http.NewRequest("POST", url, body)
    if err != nil {
        log.Println("Error creating request:", err)
        return "", err
    }

    // 设置请求头
    req.Header.Add("Content-Type", writer.FormDataContentType())
    req.Header.Add("access-token", clientToken)

    // 发送请求
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        log.Println("Error sending request:", err)
        return "", err
    }
    defer resp.Body.Close()
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    log.Println("抖音上传图片:", string(bodyBytes))
    image_id := gjson.Get(string(bodyBytes), "image_id").String()
    if image_id == "" {
        return "", errors.New("抖音上传图片失败")
    }

    url2 := "https://open.douyin.com/im/send/msg/?open_id=" + open_id

    // 构建请求参数
    params := map[string]interface{}{
        "content": map[string]interface{}{
            "msg_type": 2,
            "image": map[string]interface{}{
                "media_id": image_id,
            },
        },
        "scene":           eventType,
        "conversation_id": conversation_id,
        "msg_id":          msg_id,
        "to_user_id":      to_user_id,
    }
    // 创建HTTP请求的body
    jsonParams, err := json.Marshal(params)
    requestBody := bytes.NewBuffer(jsonParams)
    log.Println("调用抖音私信图片接口:", string(jsonParams))
    // 创建POST请求
    req, err = http.NewRequest("POST", url2, requestBody)

    if err != nil {
        fmt.Println("创建请求失败:", err)
        return "", err
    }
    // 设置请求头
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("access-token", access_token)
    // 发送请求
    client = &http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return "", err
    }
    defer response.Body.Close()

    // 读取响应
    responseBody, err := ioutil.ReadAll(response.Body)
    log.Println("调用抖音私信图片接口:", string(responseBody))
    if err != nil {
        return "", err
    }
    return string(responseBody), nil
}

 

标签:私信,return,string,err,nil,开放平台,Println,id,图片
From: https://www.cnblogs.com/taoshihan/p/18384450

相关文章

  • MD5值修改器 无须安装,解压即用,可修改图片/视频/文件/程序MD5值
    分享一个我一直在用的MD5值修改器给大家,此修改器无须下载,解压即用,操作简单,下面我一步步操作给大家看如何通过修改器修改MD5值1、点击BatchMD5Modify.exe,打开修改器主页打开后的界面是这样的2、点击添加要修改MD5值的视频、图片、文件、程序,并选择打开添加3、点击修改,看......
  • 接口获取文件流VUE转换为blob展示图片
    接口获取文件流VUE转换为blob展示图片vue通过接口获取图片文件流<template><el-image:src="imgurl"alt="资源访问失败"width="80%"height="80%"style="display:block"/></template><scriptsetup>importax......
  • ComfyUI-插件IPAdapter图片融合(附插件)
    哈喽大家好,前两期介绍了IPAdapter的风格迁移和人物形象迁移,这期来分享下如何利用IPAdapter实现两张图的融合参考图1参考图2融合图图片融合1、工作流将基础工作流中的【IPAdapterUnifiedLoader】节点换成【IPAdapterUnifiedLoaderCommunity】【IPAdapter】节......
  • python 多张图片合并
    有一堆雷达图,想放到一张图上展示#!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:piccon.py@time:2024/08/27@desc:"""importosimportPIL.ImageasImageIMAGES_PATH=r'F:/picture//'#图片集地址IMAGES_FORM......
  • 窥探API接口开放平台成功的10个原则!
    API接口开放平台的简介API接口开放平台是一个允许外部开发者访问和使用特定服务或应用功能的在线平台。通过开放API接口,平台提供方能够允许第三方开发者利用其数据、功能或资源来开发新的应用、工具或服务,从而丰富用户体验,促进技术创新和业务增长。API接口开放平台的原理......
  • quill-editor 富文本 组件封装并实现自定义上传图片
    基于quill-editor封装一个富文本组件,并实现自定义上传图片以及视频1.下载quill-editor npminstallvue-quill-editor--save2.对插件进行自定义改造(自定义字体大小选择,自定义标题,以及自定义工具栏功能) <template><divclass="edtior-box"><quill-editor......
  • 图片作为Canvas贴图时要等图片加载完才可以读取canvas
    一、效果二、第一步:canvas.js中封装canvas函数,生成一个canvas对象,标注文字为参数nameunctioncreateCanvas(name){  /**   *创建一个canvas对象,绘制几何图案或添加文字   */  constcanvas=document.createElement("canvas");  constarr=......
  • 图片工具箱:一键批量加水印,守护创意,提升效率!
    前言你是否曾在处理海量图片时,被繁琐的步骤和漫长的等待时间折磨得苦不堪言?是否梦想过拥有一款神器,能让你的图片处理工作变得轻松愉快,从此告别加班的烦恼,迎接升职加薪的曙光?那么,让我向你隆重介绍——图像工具箱!有了这款工具箱,将会发现,原来图像处理可以如此简单高效。它不仅......
  • 【Sceneform-EQR】scenefrom-eqr中的几种背景实现(不仅用于AR、三维场景,在图片、视频
    Sceneform-EQR简介Sceneform-EQR是EQ基于sceneform(filament)扩展的一个用于安卓端的三维渲染器。相关链接Git仓库Sceneform-EQR码云EQ-Renderer的示例工程EQ-R相关文档文档目录CSDN专栏几种背景实现方式示例工程Sceneform-EQR实现透明背景代码样例示例地址:Sc......
  • Java使用EasyExcel导出图片(原比例大小)到Excel中
    EasyExcel导出图片又开始写Excel导出的需求了,哈哈哈……目前的需求是将图表分析对的饼图和折线图,也就是一张完整的图片单独导出到Excel中为了方便客户在业务报告时,可以使用数据分析图片,从而更清晰准确地展示数据趋势因此关键点是将图片原比例尺寸大小导出,不能进行压缩原数......