C# 调用微信公众号接口生成带参数二维码、下载、合并

一、生成带参数二维码

官方文档: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;
}

更多:

C# 使用curl工具 上传图片到微信服务器示例

curl工具使用简介

如何判断微信内置浏览器(JS & .Net)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值