Пример #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);
        }
        public ActionResult AddQrCode(QrCodeView model)
        {
            var config  = WeChatCommonService.GetWeChatConfigByID(model.AppId);
            var sceneId = ((IQrCodeService)_BaseService).GenerateSceneId();
            var result  = QrCodeApi.Create(config.WeixinAppId, config.WeixinCorpSecret, 0, sceneId);

            if (result.errcode == Weixin.ReturnCode.请求成功)
            {
                var    url      = QrCodeApi.GetShowQrCodeUrl(result.ticket);
                string ourPath  = "/content/OrCodeMP" + result.url.Substring(result.url.IndexOf("/q/")) + ".jpg";
                string savePath = Server.MapPath(ourPath);
                if (!System.IO.File.Exists(savePath))//判断文件是否存在
                {
                    string saveFolderPath = savePath.Replace(savePath.Split('\\').Last(), "");

                    if (!Directory.Exists(saveFolderPath))         //判断文件夹是否存在
                    {
                        Directory.CreateDirectory(saveFolderPath); //不存在则创建文件夹
                    }
                    var mClient = new WebClient();
                    mClient.DownloadFile(url, savePath);
                }
                model.Url     = ourPath;
                model.SceneId = sceneId;
                ((IQrCodeService)_BaseService).AddOrCode(model, User.Identity.Name);
            }

            return(Json(new { result = 200 }));
        }
Пример #3
0
        public ActionResult ApplyWithDraw()
        {
            var siteSetting = SiteSettingApplication.SiteSettings;

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

            var token = AccessTokenContainer.TryGetAccessToken(siteSetting.WeixinAppId, siteSetting.WeixinAppSecret);

            SceneModel scene = new SceneModel(QR_SCENE_Type.WithDraw)
            {
                Object = CurrentUser.Id.ToString()
            };
            SceneHelper helper  = new SceneHelper();
            var         sceneid = helper.SetModel(scene);
            var         ticket  = QrCodeApi.Create(token, 300, sceneid, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_SCENE, null);

            ViewBag.ticket  = ticket.ticket;
            ViewBag.Sceneid = sceneid;
            var balance = MemberCapitalApplication.GetBalanceByUserId(CurrentUser.Id);

            ViewBag.ApplyWithMoney = balance;
            var member = _iMemberService.GetMember(CurrentUser.Id);//CurrentUser对象有缓存,取不到最新数据

            ViewBag.IsSetPwd        = string.IsNullOrWhiteSpace(member.PayPwd) ? false : true;
            ViewBag.WithDrawMinimum = siteSetting.WithDrawMinimum;
            ViewBag.WithDrawMaximum = siteSetting.WithDrawMaximum;
            ViewBag.Keyword         = string.IsNullOrWhiteSpace(SiteSettings.SearchKeyword) ? SiteSettings.Keyword : SiteSettings.SearchKeyword;
            ViewBag.Keywords        = SiteSettings.HotKeyWords;
            return(View());
        }
Пример #4
0
        /// <summary>
        /// 获取带有参数的场景关注的二维码的URL;
        /// http://www.cnblogs.com/txw1958/p/weixin-qrcode-with-parameters.html
        /// 说明: 本地不下载图片,因为此图片为临时链接,
        /// 所以,在 APP端下载图片并叠加图片;
        /// </summary>
        /// <param name="sceneId">场景Id</param>
        /// <returns></returns>
        public string GetErcodeWithEntryParameter(int sceneId)
        {
            var result = QrCodeApi.Create(Config.AppId, 300, sceneId, QrCode_ActionName.QR_SCENE);
            var ticket = result.ticket;

            return("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + HttpUtility.UrlEncode(ticket));
        }
        /// <summary>
        /// 根据用户openId 创建或者更新新的二维码
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="appid"></param>
        /// <param name="activityName"></param>
        /// <param name="activityid"></param>
        /// <returns></returns>
        public ActionResult CreateOrUpdateQrCodeByOpenId(string openId, string wechatappid, string activityName, string activityid, string isUpdate)
        {
            if (!VerifyParam("openId,wechatappid,activityName,activityid,isUpdate"))
            {
                return(ErrMsg());
            }
            int newAppid      = System.Convert.ToInt32(wechatappid);
            int newactivityId = System.Convert.ToInt32(activityid);

            try
            {
                var          config = WeChatCommonService.GetWeChatConfigByID(newAppid);
                var          user   = _WechatMPUserService.Repository.Entities.Where(u => u.OpenId.Equals(openId, StringComparison.CurrentCultureIgnoreCase) && u.AccountManageId == config.AccountManageId && u.IsCanceled == false).FirstOrDefault();
                var          qrcode = _QrCodeService.Repository.Entities.Where(q => q.RelatedUserId == user.Id);
                QrCodeMPItem newqr  = new QrCodeMPItem();
                if (qrcode.Any())
                {
                    newqr = qrcode.FirstOrDefault();
                    UpdateQRCode(newqr, newAppid, isUpdate);
                }
                else
                {
                    newqr.AppId         = newAppid;
                    newqr.Description   = activityName;
                    newqr.CreatedDate   = DateTime.Now;
                    newqr.Deleted       = false;
                    newqr.CreatedUserID = User.Identity.Name;
                    newqr.UpdatedDate   = DateTime.Now;
                    newqr.UpdatedUserID = User.Identity.Name;
                    newqr.RelatedUserId = user.Id;
                    _QrCodeService.Repository.Insert(newqr);
                    ///添加临时二维码时 先插入数据获取当前记录id
                    ///目前商定 所有活动用二维码 由10位数字组成 前三位代表活动id,后7位代表活动用二维码id。
                    ///
                    newqr.SceneId = newactivityId * 10000000 + newqr.Id;
                    //var config = WeChatCommonService.GetWeChatConfigByID(newAppid);
                    ///临时用二维码 过期时间为2592000秒 30天

                    ///x向腾讯申请二维码 并获取二维码url
                    var result = QrCodeApi.Create(config.WeixinAppId, config.WeixinCorpSecret, 2592000, (int)newqr.SceneId);
                    if (result.errcode == Weixin.ReturnCode.请求成功)
                    {
                        var    qrurl       = QrCodeApi.GetShowQrCodeUrl(result.ticket);
                        var    userinfo    = Innocellence.Weixin.MP.AdvancedAPIs.UserApi.Info(config.WeixinCorpId, config.WeixinCorpSecret, openId);
                        string userHeadUrl = userinfo.headimgurl;
                        newqr.Url = CombineQrCodeAndHeadImg(userHeadUrl, qrurl);
                    }
                    ///重新更新当前model
                    _QrCodeService.Repository.Update(newqr);
                }
                return(Json(new { QrcodeUrl = newqr.Url, SceneId = newqr.SceneId, Status = 200, UpdatedDate = newqr.UpdatedDate }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                _Logger.Error(e);
            }
            return(Json(new { Status = 400 }, JsonRequestBehavior.AllowGet));
        }
Пример #6
0
        /// <summary>
        /// 申请带参二维码(临时)
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="doctorId"></param>
        /// <param name="rxDoctorId"></param>
        /// <returns></returns>
        public async Task <string> CreateQRCodeUrl(int stationId, int doctorId, int rxDoctorId)
        {
            var ticks   = DateTime.Now.Ticks.ToString();
            var sceneId = int.Parse(ticks.Substring(ticks.Length - 7, 7));

            var qrResult = await QrCodeApi.CreateAsync(_wxParams.AppId, 60 * 60 * 24, sceneId, QrCode_ActionName.QR_STR_SCENE, $"RX,{stationId},{doctorId},{rxDoctorId}");

            return(qrResult.url);
        }
Пример #7
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));
        }
Пример #8
0
        /// <summary>
        /// 传入场景Id后,获取场景Id的二维码图片地址的Url;
        /// 用户扫描后将关注公众号,且将传递场景Id参数;
        /// </summary>
        /// <param name="sceneStr">场景字符串</param>
        /// <param name="expireSeconds">二维码过期时间,默认5分钟;</param>
        public string GetQrCodeUrl(string sceneStr, int expireSeconds = 300)
        {
            var result = QrCodeApi.Create(AccessToken, expireSeconds, 0, QrCode_ActionName.QR_STR_SCENE, sceneStr);

            if (result.errcode == Senparc.Weixin.ReturnCode.请求成功)
            {
                return(QrCodeApi.GetShowQrCodeUrl(result.ticket));
            }
            return(null);
        }
Пример #9
0
        public ActionResult NotAttention(long id)
        {
            BonusModel  bonusModel  = new BonusModel(_bonusService.Get(id));
            string      str         = AccessTokenContainer.TryGetToken(_siteSetting.WeixinAppId, _siteSetting.WeixinAppSecret, false);
            SceneHelper sceneHelper = new SceneHelper();
            int         num         = sceneHelper.SetModel(new SceneModel(QR_SCENE_Type.Bonus, bonusModel), 600);
            string      str1        = QrCodeApi.Create(str, 86400, num, 10000).ticket;

            ViewBag.ticket = str1;
            return(View("~/Areas/Mobile/Templates/Default/Views/Bonus/NotAttention.cshtml", bonusModel));
        }
Пример #10
0
        /// <summary>
        /// 使用异步Action测试异步临时二维码接口
        /// </summary>
        /// <returns></returns>
        public async Task <RedirectResult> QrCodeTest()
        {
            var ticks   = DateTime.Now.Ticks.ToString();
            var sceneId = int.Parse(ticks.Substring(ticks.Length - 7, 7));

            var qrResult = await QrCodeApi.CreateAsync(appId, 100, sceneId, QrCode_ActionName.QR_SCENE, "QrTest");

            var qrCodeUrl = QrCodeApi.GetShowQrCodeUrl(qrResult.ticket);

            return(Redirect(qrCodeUrl));
        }
Пример #11
0
        public ActionResult BindQRCodeSence()
        {
            var memberId = GetMemberId();
            var member   = wechatCoreDb.QueryMemberWechat()
                           .Where(m => !m.IsDel)
                           .Where(m => m.MemberId == memberId)
                           .FirstOrDefault();

            if (member != null)
            {
                throw new Exception("已经绑定微信");
            }
            var code = Common.CommonUtil.CreateNoncestr(15);

            WechatQRScene model = new WechatQRScene()
            {
                Category     = "BindMember",
                Status       = WechatQRSceneStatus.未处理,
                QrCodeTicket = ""
            };

            wechatCoreDb.AddToWechatQRScene(model);
            wechatCoreDb.SaveChanges();


            var b = model.Id / 4294967295;

            model.SceneId = (int)(model.Id - 4294967295 * b);

            var accessToken = GetAccessToken();
            var qrResult    = QrCodeApi.Create(accessToken, 60 * 5, model.SceneId, QrCode_ActionName.QR_SCENE);

            model.QrCodeTicket = qrResult.ticket;
            wechatCoreDb.AddToMemberWeChatBindTask(new MemberWeChatBindTask()
            {
                AddIp    = GetIp(),
                AddTime  = DateTime.Now,
                Code     = model.SceneId.ToString(),
                MemberId = GetMemberId(),
                OpenId   = "",
                Status   = MemberWeChatBindTaskStatus.未使用
            });
            wechatCoreDb.SaveChanges();

            using (var stream = new MemoryStream())
            {
                QrCodeApi.ShowQrCode(model.QrCodeTicket, stream);
                byte[] data = stream.ToArray();

                return(File(data, "image/jpeg"));
            }
        }
Пример #12
0
        public static string WXCreateQrCode(string url)
        {
            var qr = QrCodeApi.Create(MPBasicSetting.AppID, 0, (int)CustomerAgent.LIN, QrCode_ActionName.QR_LIMIT_SCENE);

            if (qr.errcode == ReturnCode.请求成功)
            {
                return(QrCodeApi.GetShowQrCodeUrl(qr.ticket));
            }
            else
            {
                return(null);
            }
        }
Пример #13
0
        /// <summary>
        /// 创建分享二维码
        /// </summary>
        /// <param name="openId"></param>
        /// <returns></returns>
        public string CreateShareQrCode(string openId)
        {
            var accessToken = AccessToken();

            if (string.IsNullOrEmpty(accessToken))
            {
                return(null);
            }
            var qrResult  = QrCodeApi.Create(accessToken, 10000, 111, QrCode_ActionName.QR_LIMIT_STR_SCENE, openId);
            var qrCodeUrl = QrCodeApi.GetShowQrCodeUrl(qrResult.ticket);

            return(qrCodeUrl);
        }
Пример #14
0
        public Task <ActionResult> QrCodeTest()
        {
            return(Task.Factory.StartNew <ActionResult>(() =>
            {
                var ticks = DateTime.Now.Ticks.ToString();
                var sceneId = int.Parse(ticks.Substring(ticks.Length - 7, 7));

                var qrResult = QrCodeApi.CreateAsync(appId, 100, sceneId, QrCode_ActionName.QR_SCENE, "QrTest").Result;
                var qrCodeUrl = QrCodeApi.GetShowQrCodeUrl(qrResult.ticket);

                return Redirect(qrCodeUrl);
            }).ContinueWith <ActionResult>(task => task.Result));
        }
Пример #15
0
        public ActionResult CreateQrCode(int isRefresh = 0)
        {
            try
            {
                string   userMsg   = Common.UserHelper.Instance.getCookie();
                string[] userArray = userMsg.Split('|');
                string   userStr   = userArray[0] + "P|" + userArray[4];
                //string userStr = "5P|oCbECv1pwMNyAodYQtRJVvJf_Zsg";
                string   fullPath = Server.MapPath("\\images\\full\\") + string.Format("full-{0}.jpg", userArray[4]);
                FileInfo fileInfo = new FileInfo(fullPath);
                if ((!fileInfo.Exists) || (isRefresh == 1))
                {
                    //var result = QrCodeApi.Create(Common.CommonConst.AppID, 100, 999999, QrCode_ActionName.QR_SCENE, "邀请");
                    var result       = QrCodeApi.Create(Common.CommonConst.AppID, 100, 1000, QrCode_ActionName.QR_LIMIT_STR_SCENE, userStr);
                    var headFileName = Server.MapPath("\\images\\header\\") + string.Format("head-{0}.jpg", DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss"));
                    using (FileStream fsHeader = new FileStream(headFileName, FileMode.OpenOrCreate))
                    {
                        var user = Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(Common.CommonConst.AppID, userArray[4]);
                        Senparc.Weixin.HttpUtility.Get.Download(user.headimgurl, fsHeader);
                    }

                    var dirPath  = Server.MapPath("\\images");
                    var fileName = Server.MapPath("\\images\\qrcode\\") + string.Format("qrcode-{0}.jpg", DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss"));
                    using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))
                    {
                        QrCodeApi.ShowQrCode(result.ticket, fs);//下载二维码
                    }

                    // 模板路径
                    string sourcePath = dirPath + "\\template\\haibao.jpg";
                    // 二维码路径
                    string twoDimensionCode = fileName;
                    string headPath         = headFileName;
                    fileInfo.Delete();

                    int seq = 0;
                    int.TryParse(userArray[0], out seq);

                    string reqNum = (seq + 2000).ToString();
                    Logger.Warn("seq:" + reqNum);
                    // 生成个人海报
                    //ImageHelper.GeneratePoster(sourcePath, twoDimensionCode, fullPath, headPath);
                    ImageHelper.GeneratePoster(sourcePath, twoDimensionCode, fullPath, headPath, reqNum);
                }
                return(Content(fullPath));
            }
            catch (Exception e)
            {
                return(Content(e.Message));
            }
        }
Пример #16
0
 public void CreateQrCode(Wx_App app, string activityIds)
 {
     activityIds.Split <long>().Each(activityId =>
     {
         var activity = Get(activityId);
         if (activity != null)
         {
             var result       = QrCodeApi.Create(app.AppId, 2592000, 1, QrCode_ActionName.QR_LIMIT_STR_SCENE, $"{activityId}");
             activity.QrCode  = result.url;
             activity.DUpdate = DateTime.Now;
             UpdateQrCode(activity);
         }
     });
 }
        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());
        }
Пример #18
0
        //未关注
        public ActionResult NotAttention(long id)
        {
            BonusModel model    = new BonusModel(this._iBonusService.Get(id));
            var        settings = SiteSettingApplication.SiteSettings;
            //TODO:改成统一的方式取 Token
            var token = AccessTokenContainer.TryGetAccessToken(settings.WeixinAppId, settings.WeixinAppSecret);

            SceneHelper helper  = new SceneHelper();
            SceneModel  scene   = new SceneModel(QR_SCENE_Type.Bonus, model);
            int         sceneId = helper.SetModel(scene);
            var         ticket  = QrCodeApi.Create(token, 86400, sceneId, QrCode_ActionName.QR_LIMIT_SCENE, null, 10000).ticket;

            ViewBag.ticket = ticket;
            return(View("~/Areas/Mobile/Templates/Default/Views/Bonus/NotAttention.cshtml", model));
        }
Пример #19
0
        /// <summary>
        /// 申请带参二维码
        /// </summary>
        /// <param name="mpid"></param>
        /// <param name="eventKey"></param>
        /// <param name="channelType"></param>
        /// <param name="expireSeconds"></param>
        /// <returns></returns>
        public async Task <CreateQrCodeResult> GetQrCode(int mpid, string eventKey, string channelType, int expireSeconds = 0)
        {
            var account = await _mpAccountAppService.Get(new Abp.Application.Services.Dto.EntityDto <int> {
                Id = mpid
            });

            var access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret);

            try
            {
                if (channelType == Senparc.Weixin.MP.QrCode_ActionName.QR_STR_SCENE.ToString())
                {
                    return(await QrCodeApi.CreateAsync(access_token, expireSeconds, 0, Senparc.Weixin.MP.QrCode_ActionName.QR_STR_SCENE, eventKey));
                }
                else if (channelType == Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_STR_SCENE.ToString())
                {
                    return(await QrCodeApi.CreateAsync(access_token, expireSeconds, 0, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_STR_SCENE, eventKey));
                }
                else
                {
                    return(null);
                }
            }
            catch
            {
                access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret, true);

                try
                {
                    if (channelType == Senparc.Weixin.MP.QrCode_ActionName.QR_STR_SCENE.ToString())
                    {
                        return(await QrCodeApi.CreateAsync(access_token, expireSeconds, 0, Senparc.Weixin.MP.QrCode_ActionName.QR_STR_SCENE, eventKey));
                    }
                    else if (channelType == Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_STR_SCENE.ToString())
                    {
                        return(await QrCodeApi.CreateAsync(access_token, expireSeconds, 0, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_STR_SCENE, eventKey));
                    }
                    else
                    {
                        return(null);
                    }
                }
                catch (Exception ex)
                {
                    throw new UserFriendlyException(ex.Message);
                }
            }
        }
Пример #20
0
        public void CreateAsyncTest()
        {
            var openId = base._testOpenId;

            base.TestAyncMethod(1, openId, () =>
            {
                var result = QrCodeApi.CreateAsync(base._appId, 100, 999999, QrCode_ActionName.QR_SCENE, "QrTest").Result;
                //Assert.AreEqual(ReturnCode.请求成功,result.errcode);

                Console.WriteLine("Result(T-{0}):{1}", Thread.CurrentThread.GetHashCode(), result.ToString());

                //发送消息通知生成状态
                var testData = new //TestTemplateData()
                {
                    first    = new TemplateDataItem(string.Format("【测试-{0}】QrCode单元测试完成一个线程。", SystemTime.Now.ToString("T"))),
                    keyword1 = new TemplateDataItem(openId),
                    keyword2 = new TemplateDataItem("QrCode测试"),
                    keyword3 = new TemplateDataItem(SystemTime.Now.Ticks.ToString("O")),
                    remark   = new TemplateDataItem("结果:" + result.errcode.ToString())
                };

                var tmResult = TemplateApi.SendTemplateMessageAsync(base._appId, openId, "cCh2CTTJIbVZkcycDF08n96FP-oBwyMVrro8C2nfVo4",
                                                                    (result.url)
                                                                    , testData).Result;

                if (result.errcode == ReturnCode.请求成功)
                {
                    //下载并获得二维码
                    try
                    {
                        var fileName = Path.Combine(System.Environment.CurrentDirectory, "..\\", string.Format("qrcode-{0}.jpg", SystemTime.Now.ToString("yyyy-MM-dd HH_mm_ss")));
                        using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))
                        {
                            QrCodeApi.ShowQrCode(result.ticket, fs);//下载二维码
                        }

                        //下载之后,文件储存在\src\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\bin目录下,
                        //打开.jpg文件之后,使用微信扫一扫查看效果。
                    }
                    catch
                    {
                    }
                }

                base.AsyncThreadsCollection.Remove(Thread.CurrentThread);//必须要加
            });
        }
Пример #21
0
        public ActionResult Add(long id = 0)
        {
            int    sceneid   = 0;
            string ticketstr = "";
            var    settings  = SiteSettingApplication.SiteSettings;

            try
            {
                if (!string.IsNullOrWhiteSpace(settings.WeixinAppId) && !string.IsNullOrWhiteSpace(settings.WeixinAppSecret))
                {
                    string token = AccessTokenContainer.TryGetAccessToken(settings.WeixinAppId, settings.WeixinAppSecret);
                    if (string.IsNullOrWhiteSpace(token))
                    {
                        token = AccessTokenContainer.TryGetAccessToken(settings.WeixinAppId, settings.WeixinAppSecret, true);
                    }

                    SceneModel scene = new SceneModel(QR_SCENE_Type.ShopShipper)
                    {
                        //Object = CurrentUser.Id.ToString()
                    };
                    SceneHelper helper = new SceneHelper();
                    sceneid = helper.SetModel(scene);
                    var ticket = QrCodeApi.Create(token, 300, sceneid, QrCode_ActionName.QR_LIMIT_SCENE, null, 10000);
                    ticketstr = ticket.ticket;
                }
            }
            catch {
                Log.Error("设置退货地址出错:微信配置错误,无法获取到微信凭证");
            }
            ViewBag.ticket  = ticketstr;
            ViewBag.Sceneid = sceneid;
            ShopShipper data = new ShopShipper
            {
                ShopId = CurShopId
            };

            if (id > 0)
            {
                data = ShopShippersApplication.GetShopShipper(CurShopId, id);
                if (data == null)
                {
                    throw new MallException("错误的参数");
                }
            }
            return(View(data));
        }
Пример #22
0
        public ActionResult CanReceiveNotAttention(long id, string openId = "", decimal price = 0)
        {
            ViewBag.Price = price;
            BonusModel model = new BonusModel(this._iBonusService.Get(id));
            //TODO:改成统一的方式取 Token
            var settings = SiteSettingApplication.SiteSettings;
            var token    = AccessTokenContainer.TryGetAccessToken(settings.WeixinAppId, settings.WeixinAppSecret);

            SceneHelper helper   = new SceneHelper();
            var         qrTicket = QrCodeApi.Create(token, 86400, 123456789, QrCode_ActionName.QR_LIMIT_SCENE, null).ticket;

            ViewBag.ticket   = WXApiApplication.GetTicket(settings.WeixinAppId, settings.WeixinAppSecret);
            model.ImagePath  = MallIO.GetFilePath(model.ImagePath);
            ViewBag.OpenId   = openId;
            ViewBag.QRTicket = qrTicket;
            return(View(model));
        }
Пример #23
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);
        }
Пример #24
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);
        }
Пример #25
0
        public ActionResult Index(long id)
        {
            WeiActivityModel activityModelByBigWheel = WeiActivityApplication.GetActivityModelByBigWheel(id);

            activityModelByBigWheel.userId = this.curUserId;
            int availableIntegrals = this._iMemberIntegralService.GetMemberIntegral(this.curUserId).AvailableIntegrals;

            activityModelByBigWheel.participationCount = this.GetParticipationCount(activityModelByBigWheel);
            this.consumePoint = activityModelByBigWheel.consumePoint;
            ((dynamic)base.ViewBag).Integrals = availableIntegrals;
            try
            {
                string ticket = QrCodeApi.Create(AccessTokenContainer.TryGetToken(this._siteSetting.WeixinAppId, this._siteSetting.WeixinAppSecret, false), 0x15180, 0x7661b3, 0x2710).ticket;
                ((dynamic)base.ViewBag).QRTicket = ticket;
            }
            catch
            {
            }
            return(base.View(activityModelByBigWheel));
        }
Пример #26
0
        public APIResult <string> GetLoginQRCodeUrl([FromBody] GetLoginQRCodeUrlArgsModel args)
        {
            if (string.IsNullOrEmpty(args.ClientId))
            {
                throw new ArgumentNullException("clientId");
            }
            WechatQRScene model = new WechatQRScene()
            {
                Category     = "Login",
                Status       = WechatQRSceneStatus.未处理,
                QrCodeTicket = ""
            };

            wechatCoreDb.AddToWechatQRScene(model);
            wechatCoreDb.SaveChanges();


            var b = model.Id / 4294967295;

            model.SceneId = (int)(model.Id - 4294967295 * b);

            var accessToken = GetAccessToken();
            var qrResult    = QrCodeApi.Create(accessToken, 60 * 5, model.SceneId, QrCode_ActionName.QR_SCENE);

            model.QrCodeTicket = qrResult.ticket;
            wechatCoreDb.AddToMemberWeChatLoginTask(new MemberWeChatLoginTask()
            {
                AddIp    = GetIp(),
                AddTime  = DateTime.Now,
                Code     = model.SceneId.ToString(),
                OpenId   = "",
                ClientId = args.ClientId,
                Status   = MemberWeChatLoginTaskStatus.扫二维码进行中
            });
            wechatCoreDb.SaveChanges();

            var url = QrCodeApi.GetShowQrCodeUrl(model.QrCodeTicket);

            return(Success <string>(url));
        }
 public void UpdateQRCode(QrCodeMPItem thisqr, int newappid, string isUpdate)
 {
     if (thisqr.UpdatedDate.Value.AddMonths(1) < DateTime.Now || isUpdate.Equals("true"))
     {
         var config = WeChatCommonService.GetWeChatConfigByID(newappid);
         var result = QrCodeApi.Create(config.WeixinAppId, config.WeixinCorpSecret, 2592000, (int)thisqr.SceneId);
         if (result.errcode == Weixin.ReturnCode.请求成功)
         {
             var user = _WechatMPUserService.Repository.Entities.Where(u => u.Id == thisqr.RelatedUserId);
             if (user.Any())
             {
                 var    userinfo    = Innocellence.Weixin.MP.AdvancedAPIs.UserApi.Info(config.WeixinCorpId, config.WeixinCorpSecret, user.FirstOrDefault().OpenId);
                 string userHeadUrl = userinfo.headimgurl;
                 var    qrurl       = QrCodeApi.GetShowQrCodeUrl(result.ticket);
                 thisqr.Url         = CombineQrCodeAndHeadImg(userHeadUrl, qrurl);
                 thisqr.UpdatedDate = DateTime.Now;
             }
         }
         ///重新更新当前model
         _QrCodeService.Repository.Update(thisqr);
     }
 }
Пример #28
0
        public JsonResult getWinxin(string pluginId, string destination)
        {
            long uid         = ShopApplication.GetShopManagers(CurrentSellerManager.ShopId);
            var  siteSetting = SiteSettingApplication.SiteSettings;

            //微信二维码
            if (string.IsNullOrWhiteSpace(siteSetting.WeixinAppId) || string.IsNullOrWhiteSpace(siteSetting.WeixinAppSecret))
            {
                throw new MallException("未配置公众号参数");
            }
            var token = AccessTokenContainer.TryGetAccessToken(siteSetting.WeixinAppId, siteSetting.WeixinAppSecret);

            SceneModel scene = new SceneModel(QR_SCENE_Type.Binding)
            {
                Object = uid.ToString()
            };
            SceneHelper helper  = new SceneHelper();
            var         sceneid = helper.SetModel(scene);
            var         ticket  = QrCodeApi.Create(token, 300, sceneid, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_SCENE, null);

            return(Json(new { success = true, msg = "成功", ticket = ticket.ticket, Sceneid = sceneid }));
        }
Пример #29
0
        private void ResponseXML(WxXmlModel wxXmlModel)
        {
            var QrCodeApi = new QrCodeApi();
            var XML       = "";

            switch (wxXmlModel.MsgType)
            {
            case "text":    //文本回复
                XML = ResponseMessage.GetText(wxXmlModel.FromUserName, wxXmlModel.ToUserName, wxXmlModel.Content);
                break;

            case "event":
                switch (wxXmlModel.Event)
                {
                case "subscribe":
                    if (string.IsNullOrEmpty(wxXmlModel.EventKey))
                    {
                        XML = ResponseMessage.GetText(wxXmlModel.FromUserName, wxXmlModel.ToUserName, "关注成功");
                    }
                    else
                    {
                        XML = ResponseMessage.GetText(wxXmlModel.FromUserName, wxXmlModel.ToUserName, wxXmlModel.EventKey);
                    }
                    break;

                case "SCAN":
                    XML = ResponseMessage.ScanQrcode(wxXmlModel.FromUserName, wxXmlModel.ToUserName, wxXmlModel.EventKey);        //扫描已关注二维码已关注,直接推送事件
                    break;
                }
                break;

            default:    //默认回复
                break;
            }
            HttpContext.Current.Response.Write(XML);
            HttpContext.Current.Response.End();
        }
Пример #30
0
        public ActionResult Index(long id)
        {
            //TODO:改成统一的方式取 Token
            var settings = SiteSettingApplication.SiteSettings;

            if (settings.IsOpenH5)
            {
                var token = AccessTokenContainer.TryGetAccessToken(settings.WeixinAppId, settings.WeixinAppSecret);

                SceneHelper helper   = new SceneHelper();
                var         qrTicket = QrCodeApi.Create(token, 86400, 7758258, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_SCENE, null).ticket;

                ViewBag.QRTicket = qrTicket;
            }

            WeiActivityModel activityModel = WeiActivityApplication.GetActivityModel(id);

            activityModel.userId             = curUserId;
            activityModel.winModel           = AddWinInfo(activityModel);
            activityModel.winModel.integrals = MemberIntegralApplication.GetAvailableIntegral(curUserId);
            activityModel.participationCount = GetParticipationCount(activityModel);
            consumePoint = activityModel.consumePoint;
            return(View(activityModel));
        }