本文共 3007 字,大约阅读时间需要 10 分钟。
一、生成带参数二维码
官方文档:
1.请求地址
////// 创建二维码--Post/// ///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 和链接地址
////// 创建二维码-带有推荐人的openid/// /// ///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获取二维码图片 ,就是一个地址
////// 获取二维码图片/// /// ///public string GetQrCodeShow(string ticket){ string url = string.Format("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}" , SecurityHelper.UrlEncode(ticket)); return url;}
二、下载二维码到本地
///使用WebClient下载文件:/// 下载二维码图片/// /// ///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;}
//下载到文件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+ 合成图片
///更多:/// 生成推荐海报,返回图片地址/// /// 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;}
转载地址:http://rxogi.baihongyu.com/