使用场景:扫描生成的小程序码,打开小程序并调整到指定页面并携带参数,比如购买商品详情页面。
使用方法:通过调用微信小程序二维码接口生成。
接口文档: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());
}