一、生成带参数二维码
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542
1.请求地址
/// <summary>
/// 创建二维码--Post
/// </summary>
/// <returns></returns>
public string GetQrCode()
{
string url = string.Format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}", config.Access_Token);
return url;
}
2.使用POST提交获取ticket 和链接地址
/// <summary>
/// 创建二维码-带有推荐人的openid
/// </summary>
/// <param name="fromuser"></param>
/// <returns></returns>
public string Create(string fromuser)
{
string url = new LinkManage().GetQrCode();
JObject data = new JObject();
data.Add("action_name", "QR_LIMIT_STR_SCENE");
data.Add("action_info", JObject.FromObject(new
{
scene = new
{
scene_str = fromuser
}
}));
string result = NetHelper.Post(url, data.ToString());
JObject back = JObject.Parse(result);
JToken ticket = back.SelectToken("ticket");
if (ticket == null)
throw new Exception($"获取二维码失败:" + result);
return ticket.ToString();
}
3.根据ticket获取二维码图片 ,就是一个地址
/// <summary>
/// 获取二维码图片
/// </summary>
/// <param name="ticket"></param>
/// <returns></returns>
public string GetQrCodeShow(string ticket)
{
string url = string.Format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}"
, SecurityHelper.UrlEncode(ticket));
return url;
}
二、下载二维码到本地
/// <summary>
/// 下载二维码图片
/// </summary>
/// <param name="fromuser"></param>
/// <returns></returns>
public string Download(string fromuser)
{
//1.创建
string ticket = Create(fromuser);
//2.下载
string url = new LinkManage().GetQrCodeShow(ticket);
string filename = $"{fromuser}.jpg";
string path = AppDomain.CurrentDomain.BaseDirectory + "data/wxqrcode/" + filename;
//如果已经存在删除
if (File.Exists(path))
File.Delete(path);
//下载
DownFile(url, path);
return path;
}
使用WebClient下载文件:
//下载到文件
public static void DownFile(string url, string target)
{
try
{
WebClient _client = new WebClient();
byte[] data = _client.DownloadData(url);
File.WriteAllBytes(target, data);
}
catch (Exception ex)
{
throw new Exception("下载文件(" + target + ")失败:" + ex.Message + "|" + ex.StackTrace);
}
}
三、合成二维码到海报图片
注:C#使用GDI+ 合成图片
/// <summary>
/// 生成推荐海报,返回图片地址
/// </summary>
/// <param name="user"></param>
public string MergeImage(OAuthUser user)
{
//1.下载二维码
string qrcode = Download(user.openid);
//2.下载头像
string touxiang = AppDomain.CurrentDomain.BaseDirectory + "data/wxtx/" + user.openid + ".jpg";
if (File.Exists(touxiang))
File.Delete(touxiang);
DownFile(user.headimgurl, touxiang);
//3.合成到一张图片
string resultfile = AppDomain.CurrentDomain.BaseDirectory + "data/share/" + user.openid + ".jpg";
string bgfile = AppDomain.CurrentDomain.BaseDirectory + "assets/pages/img/qrcode.jpg";
Bitmap bit = new Bitmap(bgfile, false);
Graphics g = Graphics.FromImage(bit);
//添加二维码
Bitmap qrcodeImage = new Bitmap(qrcode);
g.DrawImage(qrcodeImage, 540, 1155, 180, 180);
//添加头像
Bitmap touxiangImage = new Bitmap(touxiang);
g.DrawImage(touxiangImage, 10, 10, 80, 80);
//添加昵称
g.DrawString(user.nickname, new Font("微软雅黑", 10, FontStyle.Regular), Brushes.White, 100, 25);
g.Dispose();
//保存
bit.Save(resultfile, ImageFormat.Jpeg);
bit.Dispose();
qrcodeImage.Dispose();
touxiangImage.Dispose();
return resultfile;
}
更多: