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 }));
        }
        /// <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));
        }
Пример #3
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);
        }
Пример #4
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));
        }
Пример #5
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));
        }
Пример #6
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);
        }
Пример #7
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);
            }
        }
Пример #8
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);
     }
 }
Пример #10
0
        /// <summary>
        /// 保存二维码图片
        /// </summary>
        /// <param name="mpid"></param>
        /// <param name="name"></param>
        /// <param name="eventKey"></param>
        /// <param name="channelType"></param>
        /// <param name="expireSeconds"></param>
        /// <returns></returns>
        public async Task <QrCodeResult> SaveQrCode(int mpid, string name, string eventKey, string channelType, int expireSeconds = 0)
        {
            QrCodeResult resultModel = null;
            var          result      = await GetQrCode(mpid, eventKey, channelType, expireSeconds);

            if (result != null)
            {
                resultModel        = new QrCodeResult();
                resultModel.Ticket = result.ticket;
                using (MemoryStream stream = new MemoryStream())
                {
                    //await QrCodeApi.ShowQrCodeAsync(result.ticket, stream);

                    resultModel.Url = QrCodeApi.GetShowQrCodeUrl(result.ticket);

                    //long length = stream.Length;
                    //if(length>0)
                    //{
                    //    using (System.Drawing.Image img = System.Drawing.Bitmap.FromStream(stream))
                    //    {
                    //        var fileName = string.Format("{0}_{1}.jpg", name, eventKey);
                    //        var tempProfilePicturePath = Path.Combine(_appFolders.QrCodeDownloadFolder, fileName);
                    //        resultModel.FilePath = tempProfilePicturePath;
                    //        img.Save(tempProfilePicturePath);
                    //    }


                    //}
                    //else
                    //{
                    //    throw new UserFriendlyException("对不起,二维码流为空");
                    //}
                }
            }
            return(resultModel);
        }
Пример #11
0
        public void CreateHaiBao(string fromUser, string toUser, string temppath)
        {
            OfficialAccount_BLL obll = new OfficialAccount_BLL();
            //OfficialAccount model = obll.Get(a => a.OriginalID == toUser);
            OfficialAccount model = obll.Get(a => a.OriginalID == "gh_9229f06559cd");



            if (!AccessTokenContainer.CheckRegistered(model.AppID))          //检查是否已经注册
            {
                AccessTokenContainer.Register(model.AppID, model.AppSecret); //如果没有注册则进行注册
            }
            try
            {
                Account_QRCode_Template aqt =
                    new Account_QRCode_Template_BLL().GetList(a => a.AccountID == model.AccountID)
                    .OrderByDescending(a => a.CreateTime)
                    .FirstOrDefault();

                QRCode_Template temp = new QRCode_Template_BLL().Get(a => a.TemplateID == aqt.TemplateID);



                DateTime now = DateTime.Now.AddMinutes(-2);
                WS.Utility.FileHelper.DeleteFilesBeforeTime(temppath, now);



                WebClient    wc = new WebClient();
                ICredentials cred;
                cred = new NetworkCredential("user-22", "user-22");

                WebProxy wp = new WebProxy("http://172.18.226.109:808/", true, null, cred);
                wc.Proxy = wp;
                //下载原图
                //string yuanfilename = Guid.NewGuid().ToString() + ".png";
                string yuanlocalfilename =
                    temppath + Guid.NewGuid().ToString() + ".jpg";
                //wc.DownloadFile(ConfigurationManager.AppSettings["QiNiuDomain"] + model.QRCodeBgImg, yuanlocalfilename);
                wc.DownloadFile("http://qiniu.weixin.hairuiit.com/" + aqt.QRCodeBgImg, yuanlocalfilename);


                Senparc.Weixin.MP.AdvancedAPIs.User.UserInfoJson uij =
                    Senparc.Weixin.MP.AdvancedAPIs.UserApi.Info(model.AppID, fromUser);
                //加入昵称
                string savename1 = temppath + Guid.NewGuid().ToString() + ".jpg";
                ImageHelper.Add_FontMark(yuanlocalfilename, savename1, uij.nickname, temp.NickName_FontFamily, (int)temp.NickName_FontSize, Color.Black, (int)temp.NickName_FontX, (int)temp.NickName_FontY);

                //下载头像
                string touxiang = temppath + Guid.NewGuid().ToString() + ".png";
                wc.DownloadFile(uij.headimgurl, touxiang);
                //下载二维码
                // Senparc.Weixin.MP.AdvancedAPIs.QrCode.CreateQrCodeResult createQrCodeResult =QrCodeApi.CreateByStr(model.AppID, fromUser);
                Senparc.Weixin.MP.AdvancedAPIs.QrCode.CreateQrCodeResult createQrCodeResult = QrCodeApi.Create(model.AppID, 0, 0, Senparc.Weixin.MP.QrCode_ActionName.QR_LIMIT_STR_SCENE, fromUser);
                string localcodefile =
                    temppath + Guid.NewGuid().ToString() + ".png";
                wc.DownloadFile(QrCodeApi.GetShowQrCodeUrl(createQrCodeResult.ticket), localcodefile);
                wc.Dispose();

                ///加头像

                string savename2 = temppath + Guid.NewGuid().ToString() + ".jpg";

                ImageHelper.Add_ImageMark(savename1, touxiang, savename2, (int)temp.HeadImg_X, (int)temp.HeadImg_Y, (int)temp.HeadImg_Width, (int)temp.HeadImg_Height);



                string savename3 = temppath + Guid.NewGuid().ToString() + ".jpg";

                ImageHelper.Add_ImageMark(savename2, localcodefile, savename3, (int)temp.QRCode_X, (int)temp.QRCode_Y, (int)temp.QRCode_Width, (int)temp.QRCode_Height);

                Senparc.Weixin.MP.AdvancedAPIs.Media.UploadTemporaryMediaResult media =
                    Senparc.Weixin.MP.AdvancedAPIs.MediaApi.UploadTemporaryMedia(model.AppID,
                                                                                 Senparc.Weixin.MP.UploadMediaFileType.image, savename3);

                Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText(model.AppID, fromUser,
                                                                  "专属海报已经接收成功,请保存到手机相册,分享海报兑换奖品哦!");
                Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendImage(model.AppID, fromUser,
                                                                   media.media_id);


                Thread.Sleep(6000);
                WS.Utility.FileHelper.Delete(yuanlocalfilename);
                WS.Utility.FileHelper.Delete(savename1);
                WS.Utility.FileHelper.Delete(savename2);
                WS.Utility.FileHelper.Delete(savename3);
                WS.Utility.FileHelper.Delete(touxiang);
                WS.Utility.FileHelper.Delete(localcodefile);


                //var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
                //responseMessage.Content = "生成成功";
                //return responseMessage;

                //return null;
            }
            catch (Exception ex)
            {
                //LogHelper.ErrorInfo(ex);
                //Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText(model.AppID, requestMessage.FromUserName,
                //    ex.Message.ToString());
                Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText(model.AppID, fromUser,
                                                                  ex.ToString());
            }
        }