带参数的微信小程序二维码生成

使用场景:扫描生成的小程序码,打开小程序并调整到指定页面并携带参数,比如购买商品详情页面。

使用方法:通过调用微信小程序二维码接口生成。

接口文档:https://developers.weixin.qq.com/miniprogram/dev/api/qrcode.html

从文档可知,获取小程序二维码方法有三,下面我们以方法B为例,方法B适用于需要的码数量极多的业务场景。

生成器界面如图:

核心代码:

/// <summary>
    /// 通过POST获取小程序码
    /// </summary>
    /// <param name="access_token"></param>
    /// <param name="scene">携带的参数</param>
    /// <param name="page">跳转的页面</param>
    private void GetQRCode(string access_token, string scene, string page)
    {
        string formUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token;

        string formData = "{\"scene\":\"" + scene + "\",\"page\":\"" + page + "\"}";

        //注意提交的编码 这边是需要改变的 这边默认的是Default:系统当前编码
        byte[] postData = System.Text.Encoding.UTF8.GetBytes(formData);

        // 设置提交的相关参数 
        System.Net.HttpWebRequest request = System.Net.WebRequest.Create(formUrl) as System.Net.HttpWebRequest;
        System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
        request.Method = "POST";
        request.KeepAlive = false;
        request.AllowAutoRedirect = true;
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
        request.ContentLength = postData.Length;

        // 提交请求数据 
        System.IO.Stream outputStream = request.GetRequestStream();
        outputStream.Write(postData, 0, postData.Length);
        outputStream.Close();

        System.Net.HttpWebResponse response;
        System.IO.Stream responseStream;
        response = request.GetResponse() as System.Net.HttpWebResponse;
        responseStream = response.GetResponseStream();
        BuildQRCode(responseStream);
    }

显示/保存图片代码:

/// <summary>
    /// 创建图片
    /// </summary>
    /// <param name="stream"></param>
    private void BuildQRCode(System.IO.Stream stream)
    {
        System.IO.MemoryStream outstream = new System.IO.MemoryStream();
        const int bufferLen = 1024;
        byte[] buffer = new byte[bufferLen];
        int count = 0;
        while ((count = stream.Read(buffer, 0, bufferLen)) > 0)
        {
            outstream.Write(buffer, 0, count);
        }

        保存到本地磁盘
        //System.Drawing.Image img = System.Drawing.Image.FromStream(outstream);
        //img.Save(@"C:\2019\05\wx001.jpg");

        //直接输出图片
        Response.ClearContent();
        Response.ContentType = "image/Png";
        Response.BinaryWrite(outstream.ToArray());
    }

附件:演示源码下载

猜你喜欢

转载自blog.csdn.net/mojocube/article/details/89930289