C#生成微信小程序文章二维码

微信小程序码生成与AccessToken获取
本文介绍了一种使用C#实现的微信小程序码生成方法,包括如何获取微信的AccessToken及利用此令牌生成带参数的永久小程序码。此外,还涉及了如何将生成的小程序码与背景图片结合的技术细节。

/// <summary>
        /// 获取access_token
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("GetAccessToken")]
        public async Task<ActionResult> GetAccessToken()
        {
            string token = string.Empty;
            try
            {
                string wechatapi = "https://api.weixin.qq.com/";
                string appID = "wxc1aac131465e16b5";
                string appSecret = "ef392ad696f8ccbfd6659758ebead29c";
                //获取微信token
                string token_url = wechatapi + "cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret=" + appSecret;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(token_url);
                request.Method = "GET";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                Stream getImgStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                string content = reader.ReadToEnd();
                response.Close();
                reader.Dispose();
                token = content;
            }
            catch (Exception ex)
            {
              
            }
            return Ok(token);
        }

        /// <summary>
        /// B接口-微信小程序带参数二维码的生成
        /// </summary>
        /// <param name="access_token"></param>
        /// <returns></returns>

        [HttpGet]
        [Route("CreateWxCode")]
        public async Task<ActionResult> CreateWxCode(string access_token)
        {
            //适用于需要的码数量极多,或仅临时使用的业务场景
            //通过该接口生成的小程序码,永久有效,数量暂无限制。
            string postUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token;

            HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";

            string options = "{\"scene\":\"" + 1 + "\",\"page\":\"pages/home/home\",\"width\":\"150\"}";
            byte[] payload = Encoding.UTF8.GetBytes(options);
            request.ContentLength = payload.Length;

            Stream writer = request.GetRequestStream();
            writer.Write(payload, 0, payload.Length);
            writer.Close();

            System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
            System.IO.Stream stream = response.GetResponseStream();
            List<byte> bytes = new List<byte>();
            int temp = stream.ReadByte();
            while (temp != -1)
            {
                bytes.Add((byte)temp);
                temp = stream.ReadByte();
            }
            byte[] result = bytes.ToArray();
            string base64 = Convert.ToBase64String(result);//将byte[]转为base64
            var QRcode = ToImage(base64);
            CombineBitmap("D://EWM/immm/222.jpg", QRcode);


            return Ok("{\"errcode\":0,\"errmsg\":\"获取成功\",\"buffer\":\"" + base64 + "\"}");

        }

        private string ToImage(string base64String)
        {
            byte[] bytes = Convert.FromBase64String(base64String);
            using (Image image = Image.FromStream(new MemoryStream(bytes)))
            {
                 var imgName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
                image.Save("D://EWM/" + imgName, System.Drawing.Imaging.ImageFormat.Jpeg);  // Or Png
                return "D://EWM/" + imgName;
            }
        }


        public string CombineBitmap(string backgroundImg,string FrontImg)
        {
            var imgName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
            String jpg3 = "D://EWM/" + imgName;

            Image img1 = Image.FromFile(FrontImg);
            Image img2 = Image.FromFile(backgroundImg);

            int width = img2.Width;
            int height = Math.Max(img1.Height, img2.Height);

            Bitmap img3 = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(img3);

            g.Clear(Color.Black);
            g.DrawImage(img2, new Point(0, 0));
            g.DrawImage(img1, new Point(img2.Width - img1.Width, img2.Height - img1.Height));

            System.Drawing.Text.PrivateFontCollection font = new System.Drawing.Text.PrivateFontCollection();
            font.AddFontFile("E:/Orchard_GOV/OnonMRMS/src/OrchardCore.Onon/Onon.Gov/wwwroot/Fonts/MQG.ttf");
            //检测字体类型是否可用
            var r = font.Families[0].IsStyleAvailable(FontStyle.Regular);
            var b = font.Families[0].IsStyleAvailable(FontStyle.Bold);
            //定义成新的字体对象
            FontFamily myFontFamily = new FontFamily(font.Families[0].Name, font);
            Font myFont = new Font(myFontFamily, 22, FontStyle.Bold);
            //将字体显示到控件  

            //g.DrawString("这里输入文字", font, new SolidBrush(Color.Red), 15, 15);
            g.TranslateTransform(15, 15);
            //设置旋转角度
            g.RotateTransform(90);
            //画文字 
            g.DrawString("ᠮᠣᠩᠭᠣᠯ ᠬᠥᠮᠥᠨ ᠡᠨᠳᠡ ᠪᠠᠢᠨ᠎ᠠ", myFont, new SolidBrush(Color.White),60, -60);
            g.ResetTransform();

            g.Dispose();
            
            img2.Dispose();
            img1.Dispose();

            img3.Save(jpg3, System.Drawing.Imaging.ImageFormat.Jpeg);
            img3.Dispose();
            return jpg3;
        }
-----GT

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值