C#-微信公众平台接口-上传临时素材

最烦做微信公众平台的东西。。文档说得不清不楚,又没示例代码,只能自己 慢慢搜索,弄了一晚上,基本弄出来了,把本地的图片上传到微信的临时素材那里,返回媒体ID,用于其他操作,代码如下 :(自己导入相应的类System.Net.Http,JSON解析用的LitJson)
/// <summary>
/// 上传临时素材
/// 返回media_id
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
public string UploadLinShiSuCai(int userid) {
string imgpath = HttpContext.Current.Server.MapPath($"/upload/erweima/{userid}_2.png");
string appid = WxPayConfig.APPID;
string secret = WxPayConfig.APPSECRET;

        //1. 获取AccessToken(有效期7200秒,开发者必须在自己的服务全局缓存access_token)
        string url1 = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
        string result = HttpService.Get(url1);
        JsonData jd = JsonMapper.ToObject(result);
        string access_token = (string)jd["access_token"];

        string url2 = $"https://api.weixin.qq.com/cgi-bin/media/upload?access_token={access_token}&type=image";

        //图片转为流
        Image img = new Bitmap(imgpath);
        MemoryStream stream = new MemoryStream();
        img.Save(stream, ImageFormat.Png);
        BinaryReader br = new BinaryReader(stream);
        byte[] data = stream.ToArray();
        stream.Close();



        var boundary = "fbce142e-4e8e-4bf3-826d-cc3cf506cccc";
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("User-Agent", "KnowledgeCenter");
        client.DefaultRequestHeaders.Remove("Expect");
        client.DefaultRequestHeaders.Remove("Connection");
        client.DefaultRequestHeaders.ExpectContinue = false;
        client.DefaultRequestHeaders.ConnectionClose = true;
        var content = new MultipartFormDataContent(boundary);
        content.Headers.Remove("Content-Type");
        content.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundary);
        var contentByte = new ByteArrayContent(data);
        content.Add(contentByte);
        contentByte.Headers.Remove("Content-Disposition");
        contentByte.Headers.TryAddWithoutValidation("Content-Disposition", $"form-data; name=\"media\";filename=\"{userid}_2.png\"" + "");
        contentByte.Headers.Remove("Content-Type");
        contentByte.Headers.TryAddWithoutValidation("Content-Type", "image/png");
        try
        {
            var result2 = client.PostAsync(url2, content);
            if (result2.Result.StatusCode != HttpStatusCode.OK)
                throw new Exception(result2.Result.Content.ReadAsStringAsync().Result);
            string jsonstr = result2.Result.Content.ReadAsStringAsync().Result;
            JsonData jd2 = JsonMapper.ToObject(jsonstr);
            result = (string)jd2["media_id"];
            return result;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message + ex.InnerException.Message);
        } 

    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 3,947评论 0 0
  • 微信公众号最新修改了素材的管理模式,提供了两类素材的管理:临时素材和永久素材的管理,原先的素材管理就是临时素材管理...
    伍华聪_开发框架阅读 5,538评论 0 51
  • 微信官文文档: 注意事项 1、对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后...
    闫美丽阅读 10,909评论 0 5
  • 1、开启公众号开发者模式 公众平台的技术文档目的为了简明扼要的交代接口的使用,语句难免苦涩难懂,甚至对于不同的读者...
    good7758阅读 5,485评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139

友情链接更多精彩内容