C#-WeChat Public Platform Interface-Upload Temporary Materials

The most annoying thing to do on the WeChat public platform. . The documentation is unclear, and there is no sample code, so I can only search slowly by myself. After one night, I basically figured it out. I uploaded the local image to the temporary material of WeChat, and returned the media ID for other operations. , the code is as follows: (Import the corresponding class System.Net.Http, LitJson for JSON parsing)

        /// <summary>
        /// Upload temporary material
        /// Return 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. Get AccessToken (valid for 7200 seconds, developers must cache access_token globally in their own services)
            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);
            } 

        }

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326856411&siteId=291194637