Пример #1
0
        /// <summary>
        /// 获取用于换取二维码(临时二维码和长久二维码)的Ticket
        /// </summary>
        /// <param name="senceId">场景值ID</param>
        /// <param name="type">值为:long 时:代表长久性二维码  值为short时:代表临时二维码</param>
        /// <returns></returns>
        public string GeterweimaTicket(int senceId, string type = "short")
        {
            string             Ticket = "";
            CreateQrCodeResult re     = new CreateQrCodeResult();

            try
            {
                if (type == "short")//临时二维码
                {
                    re = QrCodeApi.Create(IsExistAccess_Token2(), 604800, senceId);
                }
                else
                {
                    re = QrCodeApi.Create(IsExistAccess_Token2(), 0, senceId);
                }
                Ticket = re.ticket;
            }
            catch
            {
                if (type == "short")//临时二维码
                {
                    Ticket = CreateTicket(IsExistAccess_Token2());
                }
                else
                {
                    Ticket = CreateLongTicket(IsExistAccess_Token2());
                }
            }

            return(Ticket);
        }
Пример #2
0
        /// <summary>
        /// 获取渠道的二维码
        /// </summary>
        /// <param name="channelName">渠道实体</param>
        /// <returns></returns>
        private void GetQrcode(ChannelEntity entity)
        {
            //获取微信公众平台接口访问凭据
            string accessToken = AccessTokenContainer.TryGetToken(ConfigurationManager.AppSettings["appID"], ConfigurationManager.AppSettings["appsecret"]);
            //找出一个未被使用的场景值ID,确保不同渠道使用不同的场景值ID
            int scenid = GetNotUsedSmallSceneId();

            if (scenid <= 0 || scenid > 100000)
            {
                throw new Exception("抱歉,您的二维码已经用完,请删除部分后重新添加");
            }
            CreateQrCodeResult createQrCodeResult = QrCode.Create(accessToken, 0, scenid);

            if (!string.IsNullOrEmpty(createQrCodeResult.ticket))
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    //根据ticket获取二维码
                    QrCode.ShowQrCode(createQrCodeResult.ticket, stream);
                    //将获取到的二维码图片转换为Base64String格式
                    byte[] imageBytes  = stream.ToArray();
                    string base64Image = System.Convert.ToBase64String(imageBytes);
                    //由于SqlServerCompact数据库限制最长字符4000,本测试项目将二维码保存到磁盘,正式项目中可直接保存到数据库
                    string imageFile = "QrcodeImage" + scenid.ToString() + ".img";
                    File.WriteAllText(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/") + imageFile, base64Image);
                    entity.Qrcode  = imageFile;
                    entity.SceneId = scenid;
                }
            }
            else
            {
                throw new Exception("抱歉!获取二维码失败");
            }
        }
Пример #3
0
        public async Task <CreateQrCodeResult> CreateJsonQrCodeAsync(string jsonContent)
        {
            // Create the data
            var data = await qrCodeDataService.GenerateJsonQrCodeDataAsync(jsonContent);

            // Create the image
            var bmp = await qrCodeRenderingService.RenderQrCodeAsBitmapAsync(data);

            // Create a name for the file
            var file = $"{Guid.NewGuid()}.png";

            // Save the file to the system
            await imageFileService.WriteImageFileAsync(file, bmp, qrCodeRenderingService.GetImageCodecInfo(), qrCodeRenderingService.GetEncoderParameters());

            // Add to the database to control access
            var created = new CreatedQrCode
            {
                Created   = DateTime.Now,
                Filename  = file,
                CreatedBy = apiKeyProvider.ApiKey
            };

            var result = await qrCodeRepository.CreateQrCodeAsync(created);

            await qrCodeRepository.SaveChangesAsync();

            return(result == null
                ? CreateQrCodeResult.Failed("Unable to save result")
                : CreateQrCodeResult.Success(result));
        }
Пример #4
0
        /// <summary>
        /// 微信二维码
        /// </summary>
        public ActionResult WxQRCode()
        {
            if (WorkContext.UserLevel <= 0)
            {
                return(PromptView("请先提升您的等级"));
            }

            string pth1 = "~/mobile/Qcode/" + WorkContext.Openid.ToString() + ".jpeg";
            string pth2 = "~/mobile/Qcode/" + WorkContext.Openid.ToString() + ".jpg";
            //LogHelper.WriteLog("二维码:" + pth1); LogHelper.WriteLog("二维码:" + pth2);
            //if (File.Exists(pth1)||File.Exists(pth2))
            //{
            //    File.Delete(pth1); File.Delete(pth2);
            //    LogHelper.WriteLog("二维码222222");
            //}
            CreateQrCodeResult re = new CreateQrCodeResult();

            re = QrCodeApi.Create(WeiXinHelp.IsExistAccess_Token2(), 604000, Convert.ToInt32(WorkContext.Uid));
            string tickets = re.ticket;

            //string quserno = WorkContext.Userno.ToString();
            WeiXinHelp.GetTicketImage(tickets, WorkContext.Openid.ToString(), @"\mobile\Qcode");
            string        picPth = @"~/mobile/Qcode/" + WorkContext.Openid.ToString() + ".jpeg";
            WxQRCodeModel model  = new WxQRCodeModel();

            model.picPth = "";
            if (!System.IO.File.Exists(picPth))
            {
                // LogHelper.WriteLog("二维码JPG");
                {
                    model.picPth = @"/mobile/Qcode/" + WorkContext.Openid.ToString() + ".jpg";
                }
            }
            WebClient mywebclient = new WebClient();
            // @"
            string savepath = Server.MapPath("~/mobile/Aavatar/") + WorkContext.Openid + ".jpg";

            // //LogHelper.WriteLog(savepath);

            //try
            //{
            if (!System.IO.File.Exists(savepath))
            {
                mywebclient.DownloadFile(WorkContext.Avatar, savepath);
            }

            //下载生成的二维码图片
            //}
            //catch (Exception ex)
            //{
            //    // ex.ToString();
            //    // BrnMall.Core.Common.LogHelper.WriteLog("错误了" + savepath);
            //}
            Core.ImageHelp.DrawImage("", "", (float)1.0, "", "", "", WorkContext.NickName, WorkContext.Openid);
            model.picPth = @"/mobile/Qcode/new/" + WorkContext.Openid.ToString() + ".jpg";
            return(View(model));
        }
        public ActionResult ApplyWithDraw()
        {
            SiteSettingsInfo siteSettings = ServiceHelper.Create <ISiteSettingService>().GetSiteSettings();

            if (string.IsNullOrWhiteSpace(siteSettings.WeixinAppId) || string.IsNullOrWhiteSpace(siteSettings.WeixinAppSecret))
            {
                throw new HimallException("Can not Set WeiXin AppId");
            }
            string     str        = AccessTokenContainer.TryGetToken(siteSettings.WeixinAppId, siteSettings.WeixinAppSecret, true);
            SceneModel sceneModel = new SceneModel(QR_SCENE_Type.WithDraw)
            {
                Object = base.CurrentUser.Id.ToString()
            };
            int num = (new SceneHelper()).SetModel(sceneModel, 600);
            CreateQrCodeResult createQrCodeResult = QrCodeApi.Create(str, 300, num, 10000);

            ViewBag.ticket  = createQrCodeResult.ticket;
            ViewBag.Sceneid = num;
            IMemberCapitalService memberCapitalService = ServiceHelper.Create <IMemberCapitalService>();
            CapitalInfo           capitalInfo          = memberCapitalService.GetCapitalInfo(base.CurrentUser.Id);

            if (capitalInfo == null)
            {
                ViewBag.ApplyWithMoney = 0;
            }
            else
            {
                dynamic viewBag = base.ViewBag;
                decimal?balance = capitalInfo.Balance;
                ViewBag.ApplyWithMoney = balance.Value;
            }
            string membersId = this.CurrentUser.UserName;
            IEnumerable <WithDrawInfo> WithDraws = ServiceHelper.Create <IWithDrawService>().GetWithDrawByMembersId(membersId);//因为UserName值唯一,所以没有登录账号ID去获取信息

            String[] Array = new String[WithDraws.Count()];
            int      i     = 0;

            foreach (var item in WithDraws)
            {
                Array[i] = item.WithdrawType + "【" + item.AccountNumber + "," + item.Name + "】";
                i++;
            }
            ViewBag.List = Array;
            ViewBag.Num  = Array.Length;


            base.ViewBag.IsSetPwd = (string.IsNullOrWhiteSpace(base.CurrentUser.PayPwd) ? false : true);
            return(View());
        }
Пример #6
0
        private string GetRegQrCode(Guid guid)
        {
            var sceneId             = int.Parse(DateTime.Now.ToString("MMddHHmmss"));
            var senparcWeixinConfig = SenparcDI.GetService <IOptions <SenparcWeixinSetting> >().Value;
            var qrCodeRegCache      = SenparcDI.GetService <QrCodeRegCache>();

            while (qrCodeRegCache.MessageCollection.ContainsKey(sceneId.ToString()))
            {
                sceneId++;
            }
            CreateQrCodeResult qrCodeResult = QrCodeApi.Create(senparcWeixinConfig.WeixinAppId, 600, sceneId,
                                                               QrCode_ActionName.QR_SCENE, "reg_code");
            var qrCodeRegData = new QrCodeRegData(sceneId, qrCodeResult.expire_seconds, qrCodeResult.ticket, guid, QrCodeRegDataType.Reg);

            qrCodeRegCache.Insert(qrCodeRegData, qrCodeRegData.Key);
            return(qrCodeResult.url);
        }
Пример #7
0
        public async Task <Qrcode> CreateQrcodeAsync(UserIdentifier userIdentifier)
        {
            string appId = await SettingManager.GetSettingValueForTenantAsync(WechatSettings.General.AppId, userIdentifier.TenantId.Value);

            string appSecret = await SettingManager.GetSettingValueForTenantAsync(WechatSettings.General.Secret, userIdentifier.TenantId.Value);

            Qrcode maxSceneIdQrcode = qrcodeRepository.GetAll().OrderByDescending(model => model.SceneId).FirstOrDefault();
            int    sceneId          = maxSceneIdQrcode == null?1: maxSceneIdQrcode.SceneId + 1;

            Qrcode qrcode = new Qrcode()
            {
                ExpireSeconds = 604800,
                UserId        = userIdentifier.UserId
            };

            //大于10万,生成临时二维码
            if (sceneId > 100000)
            {
                qrcode.Type = QrCode_ActionName.QR_LIMIT_SCENE;
            }
            else
            {
                qrcode.SceneId = sceneId;
                qrcode.Type    = QrCode_ActionName.QR_SCENE;
            }
            string accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret);

            CreateQrCodeResult createQrCodeResult = QrCodeApi.Create(
                accessToken,
                qrcode.ExpireSeconds,
                qrcode.SceneId,
                qrcode.Type);

            qrcode.Ticket        = createQrCodeResult.ticket;
            qrcode.ExpireSeconds = createQrCodeResult.expire_seconds;
            qrcode.Url           = createQrCodeResult.url;

            string qrcodePreUrl = String.Format(qrcodePreUrlBaseFormat, qrcode.Ticket);

            qrcode.Path = GetQrcodeFolderPathOfUser(userIdentifier.UserId) + "/" + qrcode.SceneId + ".png";
            Image.GetAndSaveImage(qrcodePreUrl, HttpContext.Current.Server.MapPath(qrcode.Path));

            qrcodeRepository.Insert(qrcode);
            return(qrcode);
        }
Пример #8
0
        public ActionResult Index()
        {
            var guid = Guid.NewGuid().ToString("n");

            ViewData["Guid"] = guid;

            var configHelper = new ConfigHelper();

            int qrCodeId = 0;
            CreateQrCodeResult qrResult = null;

            try
            {
                //chm二维码
                qrCodeId = configHelper.GetQrCodeId();
                qrResult = MP.AdvancedAPIs.QrCodeApi.Create(appId, 10000, qrCodeId, QrCode_ActionName.QR_SCENE);

                var qrCodeUrl = MP.AdvancedAPIs.QrCodeApi.GetShowQrCodeUrl(qrResult.ticket);
                ViewData["QrCodeUrl"] = qrCodeUrl;
            }
            catch (Exception e)
            {
                WeixinTrace.SendCustomLog("Document发生appsecret错误!", e.ToString());
                var accessTokenBags = AccessTokenContainer.GetAllItems();

                WeixinTrace.SendCustomLog("当前AccessToken信息", accessTokenBags.ToJson());
            }
            finally
            {
                ConfigHelper.CodeCollection[guid] = new CodeRecord()
                {
                    Key          = guid,
                    QrCodeId     = qrCodeId,
                    QrCodeTicket = qrResult
                };//添加对应关系

                //下载版本
                var config = configHelper.GetConfig();
                ViewData["Versions"]      = config.Versions;
                ViewData["WebVersions"]   = config.WebVersions;
                ViewData["DownloadCount"] = config.DownloadCount.ToString("##,###");
            }
            return(View());
        }
Пример #9
0
 public ActionResult MpQrCodeEditProvide()
 {
     Ocean.Entity.MpQrScene mp = new Entity.MpQrScene();
     TryUpdateModel <MpQrScene>(mp);
     if (mp.Id.ToString().StartsWith("0000"))
     {
         string token = GetAccessToken();
         int    iTemp = MpQrSceneService.GetMaxSceneId(mp.ActionName) + 1;
         try
         {
             if (mp.ActionName == 0)
             {
                 mp.TimeoutTicks = 1800;
                 mp.SceneId      = iTemp;
                 CreateQrCodeResult result = QrCode.Create(token, 1800, iTemp);
                 //QrCode.ShowQrCode(result.ticket, new MemoryStream(), WebHelper.MapPaths("~/images/Qrimg/Qr_" + iTemp.ToString() + ".jpg"));
                 //mp.ImgUrl = GlobalConfig.GetConfig()["ResourceDomain"] + "/Qrimg/Qr_" + iTemp.ToString() + ".jpg";
                 mp.ImgUrl = QrCode.ShowQrCode(result.ticket);
             }
             else
             {
                 mp.TimeoutTicks = 0;
                 mp.SceneId      = iTemp;
                 CreateQrCodeResult result = QrCode.Create(token, 0, iTemp);
                 //QrCode.ShowQrCode(result.ticket, new MemoryStream(), WebHelper.MapPaths("~/images/Qrimg/Qr_" + iTemp.ToString() + ".jpg"));
                 //mp.ImgUrl = GlobalConfig.GetConfig()["ResourceDomain"] + "/Qrimg/Qr_" + iTemp.ToString() + ".jpg";
                 mp.ImgUrl = QrCode.ShowQrCode(result.ticket);
             }
             MpQrSceneService.Insert(mp);
             return(JsonMessage(true, "生成二维码成功"));
         }
         catch (Exception e)
         {
             Log4NetImpl.Write("MpQrCodeEditProvide失败:" + e.Message);
             return(JsonMessage(false, "生成二维码失败"));
         }
     }
     else
     {
     }
     return(JsonMessage(false, "生成二维码失败"));
 }
Пример #10
0
        public ActionResult ApplyWithDraw()
        {
            SiteSettingsInfo siteSettings = ServiceHelper.Create <ISiteSettingService>().GetSiteSettings();

            if (string.IsNullOrWhiteSpace(siteSettings.WeixinAppId) || string.IsNullOrWhiteSpace(siteSettings.WeixinAppSecret))
            {
                throw new HimallException("未配置公众号参数");
            }

            //string str = AccessTokenContainer.TryGetToken(siteSettings.WeixinAppId, siteSettings.WeixinAppSecret, false);
            string str = CommonApi.GetToken(siteSettings.WeixinAppId, siteSettings.WeixinAppSecret).access_token;
            //
            SceneModel sceneModel = new SceneModel(QR_SCENE_Type.WithDraw)
            {
                Object = base.CurrentUser.Id.ToString()
            };
            int num = (new SceneHelper()).SetModel(sceneModel, 600);

            //CreateQrCodeResult createQrCodeResult = Senparc.Weixin.MP.AdvancedAPIs.QrCodeApi.Create(str, 300, num, 10000);
            CreateQrCodeResult createQrCodeResult = Senparc.Weixin.MP.AdvancedAPIs.QrCodeApi.Create(str, 300, num, Senparc.Weixin.MP.QrCode_ActionName.QR_SCENE);

            ViewBag.ticket  = createQrCodeResult.ticket;
            ViewBag.Sceneid = num;
            IMemberCapitalService memberCapitalService = ServiceHelper.Create <IMemberCapitalService>();
            CapitalInfo           capitalInfo          = memberCapitalService.GetCapitalInfo(base.CurrentUser.Id);

            if (capitalInfo == null)
            {
                ViewBag.ApplyWithMoney = 0;
            }
            else
            {
                dynamic viewBag = base.ViewBag;
                decimal?balance = capitalInfo.Balance;
                viewBag.ApplyWithMoney = balance.Value;
            }
            base.ViewBag.IsSetPwd = (string.IsNullOrWhiteSpace(base.CurrentUser.PayPwd) ? false : true);
            return(View());
        }
Пример #11
0
    /// <summary>
    /// 获取带参二维码
    /// </summary>
    /// <returns></returns>
    private static CreateQrCodeResult GetQrCode(string token, string eventKey, int isLimit, int expire_seconds)
    {
        CreateQrCodeResult qcCodeResult = null;
        var url     = QrCodeUrl;
        var handler = new HttpClientHandler()
        {
            AutomaticDecompression = System.Net.DecompressionMethods.None
        };

        using (HttpClient httpclient = new HttpClient(handler))
        {
            httpclient.BaseAddress = new Uri(url);
            var content = new FormUrlEncodedContent(new Dictionary <string, string>()
            {
                { "token", token }, { "eventKey", eventKey }, { "isLimit", isLimit.ToString() }, { "expire_seconds", expire_seconds.ToString() }
            });

            var response = httpclient.PostAsync(url, content);

            string responseString = response.Result.Content.ReadAsStringAsync().Result;
            qcCodeResult = JsonConvert.DeserializeObject <CreateQrCodeResult>(responseString);
        }
        return(qcCodeResult);
    }