专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

.net/C# 微信小程序如何生成二维码图片

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:03:58       共计:3624 浏览

1、生成微信小程序二维码,需要获取微信小程序Access_Token。代码如下,先获取Access_Token


    /// <summary>

           /// 获取微信小程序Access_Token

           /// </summary>

           /// <param name="appId">小程序唯一凭证</param>

           /// <param name="appSecret">小程序唯一凭证密钥</param>

           /// <returns></returns>

           public static string GetAccessToken(string appId, string appSecret)

           {

               string access_token = string.Empty;

               try

               {

                   string token_url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";

                   HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(token_url);

                   //请求方式

                   myRequest.Method = "GET";

                   HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                   Stream stream = myResponse.GetResponseStream();

                   XmlDictionaryReader xmlReader = JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max);

                   xmlReader.Read();

                   string xml = xmlReader.ReadOuterXml();

                   myResponse.Close();

                   stream.Close();

                   stream.Dispose();

   

   

                   XmlDocument doc = new XmlDocument();

                   doc.LoadXml(xml);

                   XmlElement rootElement = doc.DocumentElement;

                   access_token = rootElement.SelectSingleNode("access_token").InnerText.Trim();

                   return access_token;

               }

               catch (Exception ex)

               {

                   throw ex;

               }

           }


2、生成微信小程序二维码,无限次数


           /// <summary>

           /// 生成微信小程序二维码

           /// </summary>

           /// <param name="picPath"></param>

           /// <param name="access_token"></param>

           /// <param name="paramData"></param>

           /// <param name="page"></param>

           /// <param name="width"></param>

           public static void GetWeChatCodeLimit(string picPath, string access_token, string paramData = null, string page = null, int width = 430)

           {

               try

               {

                   //这个路径生成的二维码是无限次数,scene参数最大32位

                   string url = $"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}";

                   Dictionary<string, object> dic = new Dictionary<string, object>();

                   if (string.IsNullOrWhiteSpace(paramData))

                   {

                       paramData = "id=123";

                   }

                   dic.Add("scene", paramData);     //必填,有不能为空,随便填好了

                   if (!string.IsNullOrWhiteSpace(page))

                   {

                       dic.Add("path", page);      //注意这里要用 path,而不是用page,官网有问题

                   }

                   dic.Add("width", width);

                   string json = JsonHelper.GetJSON<Dictionary<string, object>>(dic);

   

                   HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);

                   myRequest.Method = "POST";

                   myRequest.ContentType = "application/json;charset=UTF-8";

                   byte[] payload = Encoding.UTF8.GetBytes(json);

                   myRequest.ContentLength = payload.Length;

                   Stream writer = myRequest.GetRequestStream();

                   writer.Write(payload, 0, payload.Length);

                   writer.Close();

   

                   HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                   Stream stream = myResponse.GetResponseStream();//返回图片数据流

   

                   byte[] byteArray = StreamToBytes(stream);//将数据流转为byte[]

                   if (byteArray.Length > 1000)

                   {

                       File.WriteAllBytes(picPath, byteArray);

                   }

                   else

                   {

                       //转字符串--报错

                       string str = Encoding.Default.GetString(byteArray);

                       throw new Exception(str);

                   }

                   myResponse.Close();

                   stream.Close();

                   stream.Dispose();

               }

               catch (Exception ex)

               {

                   throw ex;

               }

           }


3、生成微信小程序二维码,有限次数


   /// <summary>

           /// 生成微信小程序二维码

           /// </summary>

           /// <param name="picPath"></param>

           /// <param name="access_token"></param>

           /// <param name="paramData"></param>

           /// <param name="page"></param>

           /// <param name="width"></param>

           public static void CreateWeChatQrCode(string picPath, string access_token, string paramData = null, string page = null, int width = 430)

           {

               try

               {

                   //这个路径有限次数,1000,000个,要注意使用

                   //string url = $"https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token={access_token}";

                   //这个生成是小程序码,上面是二维码

                   string url = $"https://api.weixin.qq.com/wxa/getwxacode?access_token={access_token}";

                   if (!string.IsNullOrWhiteSpace(paramData))

                   {

                       page += "?" + paramData;

                   }

                   Dictionary<string, object> dic = new Dictionary<string, object>();

                   dic.Add("path", page);      //必填

                   dic.Add("width", width);

                   string json = JsonHelper.GetJSON<Dictionary<string, object>>(dic);

   

                   HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);

                   myRequest.Method = "POST";

                   myRequest.ContentType = "application/json;charset=UTF-8";

                   byte[] payload = Encoding.UTF8.GetBytes(json);

                   myRequest.ContentLength = payload.Length;

                   Stream writer = myRequest.GetRequestStream();

                   writer.Write(payload, 0, payload.Length);

                   writer.Close();

   

                   HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                   Stream stream = myResponse.GetResponseStream();//返回图片数据流

   

                   byte[] byteArray = StreamToBytes(stream);//将数据流转为byte[]

                   if (byteArray.Length > 1000)

                   {

                       File.WriteAllBytes(picPath, byteArray);

                   }

                   else

                   {

                       //转字符串

                       string str = Encoding.Default.GetString(byteArray);

                       throw new Exception(str);

                   }

                   myResponse.Close();

                   stream.Close();

                   stream.Dispose();

               }

               catch (Exception ex)

               {

                   throw ex;

               }

           }

   

           /// <summary>

           /// 将数据流转为byte[]

           /// </summary>

           /// <param name="stream"></param>

           /// <returns></returns>

           public static byte[] StreamToBytes(Stream stream)

           {

               List<byte> bytes = new List<byte>();

               int temp = stream.ReadByte();

               while (temp != -1)

               {

                   bytes.Add((byte)temp);

                   temp = stream.ReadByte();

               }

               return bytes.ToArray();

           }



版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:scss在Vue中的安装及使用 | ·下一条:PC端生成二维码,微信扫码 带参数跳转微信小程序指定页面

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有