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


    转:http://blog.niunan.net/blog/show/1212

    最烦做微信公众平台的东西。。文档说得不清不楚,又没示例代码,只能自己 慢慢搜索,弄了一晚上,基本弄出来了,把本地的图片上传到微信的临时素材那里,返回媒体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);
                } 
    
            }
    ASP.NET
  • 相关阅读:
    使用pdm建表并生成SQL语句
    eclipse从svn检出项目之后,找不到BuildPath
    如何搞定SVN目录的cleanup问题和lock问题
    ORA-00923: 未找到要求的 FROM 关键字
    java.sql.SQLException: ORA-00911: 无效字符
    10.vue-router实现路由懒加载( 动态加载路由 )
    9、vue-router的两种模式(hash模式和history模式)的区别
    8、vue-router传递参数的几种方式
    5、vue-router有哪几种导航钩子( 导航守卫 )
    4.怎么定义 vue-router 的动态路由? 怎么获取传过来的值
  • 原文地址:https://www.cnblogs.com/superfeeling/p/11556726.html
Copyright © 2020-2023  润新知