zoukankan      html  css  js  c++  java
  • c# 微信开发 《生成带参数的关注二维码》

    /// <summary>
            /// 生成二维码
            /// </summary>
            /// <returns></returns>
            /// 申请生成二维码的用户 CreatQrCodeUser
            public string CreateQrCodeImage(string CreatQrCodeUser)
            {
                string WeixinQrCodePath = ConfigurationManager.AppSettings["WeixinQrCodePath"].TryToString(); //配置的文件地址
                string rootpath = System.AppDomain.CurrentDomain.BaseDirectory;//程序运行地址
                string path = rootpath + WeixinQrCodePath; //文件夹绝对路径
                string filename = Guid.NewGuid().TryString() + ".jpg";
                string absolutelyPath = path + "/" +filename; //生成的二维码绝对路径
                string returnPath = "";//文件返回的路径
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                int Sceneid = WeixinDA.GetQrcodeImgMaxSceneid(CreatQrCodeUser);
                //保存二维码生成的图片
                WeixinQrCode.SaveQrCodeImage(Sceneid.TryString(), absolutelyPath);
    
                //最终生成二维码
                string ResultCodeImg = path + "/" + filename; //最终合成图片的绝对路径
                returnPath = WeixinQrCodePath + "/" + filename;//最终合成图片的相对路径
                WeixinDA.SaveUserQrcodeImg(CreatQrCodeUser, Sceneid, returnPath);
                return returnPath;
            }

    /// <summary>
    /// 获取二维码图片Url,需要Format 0.ticket
    /// </summary>
    public const string WeiXin_QrCode_GetUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";

     /// <summary>
            /// 根据Ticket获取二维码图片保存在本地
            /// </summary>
            /// <param name="scene_id">二维码场景id</param>
            /// <param name="imgPath">图片存储路径</param>
            public static void SaveQrCodeImage(string scene_id, string imgPath)
            {
                try
                {
                    string Ticket = WeiXinCommom.CreateTicket(scene_id);
    
                    if (Ticket == null)
                        throw new ArgumentNullException("Ticket");
    
                    //ticket需 urlEncode
                    string stUrl = string.Format(WeiXinCommom.WeiXin_QrCode_GetUrl, HttpUtility.UrlEncode(Ticket));
                    WeiXinCommom.SaveUrlImage(stUrl, imgPath);
                }
                catch (Exception ex)
                {
                    LogHelper.WriteFileLog("qrcodeError", ex.Message);
                }
            }
    
    public const string WeiXin_Ticket_CreateUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";
    
    public const string QrCodeTicket_Create_TempJsonStrin = "{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": {0}}}}";
    
     /// <summary>
            /// 获取Ticket
            /// </summary>
            /// <returns></returns>
            public static string CreateTicket(string scene_id)
            {
                string access_token = WeiXinCommom.GetAccsss_token(); ;
    
                if (string.IsNullOrEmpty(access_token))
                    throw new ArgumentNullException("Access_Token");
    
                string url = string.Format(WeiXin_Ticket_CreateUrl, access_token);
                string postData = QrCodeTicket_Create_TempJsonStrin.Replace("{0}", scene_id);
                string result = PostData(url, postData);
                WeixinQrCode.Ticket ticket = JsonConvert.DeserializeObject<WeixinQrCode.Ticket>(result);
    
                if (ticket == null || string.IsNullOrEmpty(ticket.ticket))
                {
                    FileLog.AddLog("ticket", "获取二维码ticket失败");
                    return "";
                }
                return ticket.ticket;
            }
    
     /// <summary>
            /// Post数据
            /// </summary>
            /// <param name="posturl"></param>
            /// <param name="postData"></param>
            /// <returns></returns>
            public static string PostData(string posturl, string postData)
            {
                Stream outstream = null;
                Stream instream = null;
                StreamReader sr = null;
                HttpWebResponse response = null;
                HttpWebRequest request = null;
                Encoding encoding = Encoding.UTF8;
                byte[] data = encoding.GetBytes(postData);
                // 准备请求...
                try
                {
                    // 设置参数
                    request = WebRequest.Create(posturl) as HttpWebRequest;
                    CookieContainer cookieContainer = new CookieContainer();
                    request.CookieContainer = cookieContainer;
                    request.AllowAutoRedirect = true;
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = data.Length;
                    outstream = request.GetRequestStream();
                    outstream.Write(data, 0, data.Length);
                    outstream.Close();
                    //发送请求并获取相应回应数据
                    response = request.GetResponse() as HttpWebResponse;
                    //直到request.GetResponse()程序才开始向目标网页发送Post请求
                    instream = response.GetResponseStream();
                    sr = new StreamReader(instream, encoding);
                    //返回结果网页(html)代码
                    string content = sr.ReadToEnd();
                    string err = string.Empty;
                    return content;
                }
                catch (Exception ex)
                {
                    LogHelper.WriteFileLog("PostDataerror", string.Format("{0}", ex.Message));
                    return string.Empty;
                }
            }
    

      

  • 相关阅读:
    禁止修改的消息首部
    文章详情列表接口 小程序及 模拟器 条数 错误 浏览器正确 调大mysql 查询超时时间 同一接口,小程序环境的TTFB相比浏览器约大5倍。
    七牛云霍锴:实时音视频 SDK 设计实践
    java网页数据抓取
    IDEA properties文件中文自动转为ASCII码(properties输入中文乱码问题)
    阿里官方Java代码规范标准《阿里巴巴Java开发手册 终极版 v1.3.0》下载
    从零开始配置Ubuntu20.04 amd64 virtualenvwarapper angr环境 并做ais3_crackme的CFG图
    请求被中止: 未能创建 SSL/TLS 安全通道 解决方案
    Docker
    爬虫
  • 原文地址:https://www.cnblogs.com/yyyuguo/p/8426813.html
Copyright © 2011-2022 走看看