public ActionResult SendMessage(string content, string fromUserID, string formID, string toUserID) { Common.WeChat.IConfig config = new Common.WeChat.ConfigMini(); var appID = config.AppID; var toUser = db.Users.FirstOrDefault(s => s.Id == toUserID); var option = new Bll.Users.UserOpenID(toUser); var e = db.Enterprises.FirstOrDefault(s => s.ID == toUser.EnterpriseID); string openID = option.SearchOpenID(appID); var fromUser = db.Users.FirstOrDefault(s => s.Id == fromUserID); var temp = new Common.WeChat.WeChatMessageTemp.EDefaultNotifyWeChatMessage(e.Name, fromUser.NickName, content, DateTime.Now); var result = new Common.WeChat.WeChatMinApi(config) .SendMessage(openID, formID, null, temp); return(Json(Comm.ToJsonResult("Success", "", result))); }
public ActionResult GetPhoneNumberFromWeChat(string userID, string iv, string encryptedData) { var user = db.Users.FirstOrDefault(s => s.Id == userID); if (user == null) { return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在"))); } if (db.CardPersonals.Any(s => s.UserID == userID)) { return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在"), JsonRequestBehavior.AllowGet)); } //把数据中的OpenID取出 var userOpenIDs = new Bll.Users.UserOpenID(user); IConfig config = new ConfigMiniPersonal(); var openID = userOpenIDs.SearchOpenID(config.AppID); if (openID == null) { return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在"), JsonRequestBehavior.AllowGet)); } string session = null; try { session = Jscode2sessionResultList.GetSession(openID); } catch (Exception ex) { return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message), JsonRequestBehavior.AllowGet)); } string mobile = null; try { mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv); } catch (Exception) { Comm.WriteLog("CreateByWeChatPhoneDecrypt", JsonConvert.SerializeObject(new { encryptedData, session, iv }), Common.Enums.DebugLogLevel.Error); return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口"))); } return(Json(Comm.ToJsonResult("Success", "成功", mobile), JsonRequestBehavior.AllowGet)); }
public void WeChatNofity(string userID, decimal amount, string content) { using (ApplicationDbContext db = new ApplicationDbContext()) { var config = new Common.WeChat.ConfigMiniPersonal(); Common.WeChat.WeChatMinApi wechat = new Common.WeChat.WeChatMinApi(config); var user = db.Users.FirstOrDefault(s => s.Id == userID); var option = new Bll.Users.UserOpenID(user); var openID = option.SearchOpenID(config.AppID); var form = db.WeChatMiniNotifyForms.FirstOrDefault(s => s.AppID == config.AppID && s.UserID == userID && s.EndDateTime > DateTime.Now); if (form != null) { var temp = new Common.WeChat.WeChatMessageTemp.PReceivableNotifyWeChatMessage(amount, content, DateTime.Now); wechat.SendMessage(openID, form.FormID, null, temp); db.WeChatMiniNotifyForms.Remove(form); db.SaveChanges(); } } }
public ActionResult AddForm(string userID, string[] formIDs) { if (formIDs.Any(s => s == "the formId is a mock one")) { return(Json(Common.Comm.ToJsonResult("FormIDInvalid", "FormID无效"))); } if (!db.Vips.Any(s => s.UserID == userID)) { return(Json(Common.Comm.ToJsonResult("VipNoFound", "未注册"))); } var config = new Common.WeChat.ConfigMiniPersonal(); var user = db.Users.FirstOrDefault(s => s.Id == userID); var openID = new Bll.Users.UserOpenID(user).SearchOpenID(config.AppID); var list = new List <WeChatMiniNotifyForm>(); foreach (var item in formIDs) { list.Add(new WeChatMiniNotifyForm { AppID = config.AppID, CreateDateTime = DateTime.Now, EndDateTime = DateTime.Now.AddDays(7).AddMinutes(-1), FormID = item, OpenID = openID, UserID = userID }); } db.WeChatMiniNotifyForms.AddRange(list); db.SaveChanges(); var del = db.WeChatMiniNotifyForms .Where(s => s.EndDateTime < DateTime.Now); db.WeChatMiniNotifyForms.RemoveRange(del); db.SaveChanges(); var count = db.WeChatMiniNotifyForms .Where(s => s.UserID == userID) .Count(); return(Json(Common.Comm.ToJsonResult("Success", "成功", new { Count = count }))); }
/// <summary> /// 注册VIP /// </summary> /// <param name="userID">用户ID</param> /// <param name="iv">手机号</param> /// <param name="code"></param> /// <returns></returns> public ActionResult CreateByWeChatPhone(string userID, string iv, string encryptedData, string code) { var user = db.Users.FirstOrDefault(s => s.Id == userID); if (user == null) { return(Json(Comm.ToJsonResult("UserNoFound", "用户不存在"))); } if (db.CardPersonals.Any(s => s.UserID == userID)) { return(Json(Comm.ToJsonResult("CardPersonalHadCreate", "该用户已经个人名片已存在"))); } //把数据中的OpenID取出 var userOpenIDs = new Bll.Users.UserOpenID(user); IConfig config = new ConfigMiniPersonal(); var openID = userOpenIDs.SearchOpenID(config.AppID); if (openID == null) { return(Json(Comm.ToJsonResult("OpenIDIsNull", "OpenID不存在"))); } string session = null; try { session = Jscode2sessionResultList.GetSession(openID); } catch (Exception ex) { return(Json(Comm.ToJsonResult("GetSessionFail", ex.Message))); } string mobile = null; try { mobile = Jscode2sessionResultList.AESDecryptPhoneNumber(encryptedData, session, iv); } catch (Exception) { return(Json(Comm.ToJsonResult("DecryptFail", "解密失败,SessionKey过期,需要重新调用登录接口"))); } if (db.Users.Any(s => s.PhoneNumber == mobile)) { return(Json(Comm.ToJsonResult("MobileHadUsed", "手机号已被使用"))); } //if (!Reg.IsMobile(mobile)) //{ // return Json(Comm.ToJsonResult("Moblie Error", "手机号不正确")); //} Vip parentVip = null; if (!string.IsNullOrWhiteSpace(code)) { //判断是否邀请码是否存在 parentVip = db.Vips.FirstOrDefault(s => s.State == Common.Enums.VipState.Enable && s.Code == code); if (parentVip == null) { return(Json(Comm.ToJsonResult("CodeNoFound", "邀请码不存在"))); } } //保存用户手机号到用户表 user.PhoneNumber = mobile; //把名片已知信息填到个人名片 var card = new CardPersonal { UserID = userID, Avatar = user.Avatar, Enable = true, Gender = Common.Enums.Gender.NoSet, Name = user.NickName, Mobile = mobile }; db.CardPersonals.Add(card); db.SaveChanges(); try { card.WeChatMiniQrCode = GetWeChatQrCode(card.ID); db.SaveChanges(); } catch (Exception ex) { Comm.WriteLog(this.GetType().ToString(), ex.Message, Common.Enums.DebugLogLevel.Error); } var result = new Bll.VipBLL().CreateVipRelation(userID, code); if (result.retCode == Comm.ReqResultCode.failed) { //回滚 db.CardPersonals.Remove(card); db.SaveChanges(); return(Json(Comm.ToJsonResult("Error", result.retMsg))); } return(Json(Comm.ToJsonResult("Success", "成功", new { PCardID = card.ID }))); }
///消息推送 public static void NotifyByLog(UserLog log, Common.WeChat.IConfig config) { using (ApplicationDbContext db = new ApplicationDbContext()) { var targetUser = db.Users.FirstOrDefault(s => s.Id == log.TargetUserID); var user = db.Users.FirstOrDefault(s => s.Id == log.UserID); var wechat = new Common.WeChat.WeChatMinApi(config); if (targetUser == null) { return; //throw new Exception("推送用户不存在"); } var userOpenID = new Bll.Users.UserOpenID(targetUser); string openID = userOpenID.SearchOpenID(config.AppID); var form = db.WeChatMiniNotifyForms .FirstOrDefault(s => s.UserID == log.TargetUserID && s.EndDateTime > DateTime.Now); var fromUser = db.Users.FirstOrDefault(s => s.Id == log.UserID); if (form == null) { return; } db.WeChatMiniNotifyForms.Remove(form); db.SaveChanges(); Common.WeChat.WeChatMessageTemp.IWeChatMessageTemp iTempMessage; try { switch (log.Type) { case UserLogType.CardPersonalRead: { iTempMessage = new Common.WeChat.WeChatMessageTemp.PNewUserNotifyWeChatMessage(fromUser.NickName, log.CreateDateTime); wechat.SendMessage(openID, form.FormID, null, iTempMessage); } break; case UserLogType.CardPersonalAddressNav: case UserLogType.CardPersonalEmailCopy: case UserLogType.CardPersonalEnterpriseCopy: case UserLogType.CardPersonalMobileCall: case UserLogType.CardPersonalLike: case UserLogType.CardPersonalPhoneCall: case UserLogType.CardPersonalSave: case UserLogType.CardPersonalShare: case UserLogType.CardPersonalWechat: { string content = null; switch (log.Type) { case UserLogType.CardPersonalAddressNav: content = "复制了您的地址"; break; case UserLogType.CardPersonalEmailCopy: content = "复制了您的邮箱"; break; case UserLogType.CardPersonalEnterpriseCopy: content = "复制了您的公司"; break; case UserLogType.CardPersonalMobileCall: content = "呼叫了您的手机"; break; case UserLogType.CardPersonalLike: content = "点赞了您的名片"; break; case UserLogType.CardPersonalPhoneCall: content = "呼叫了您的座机"; break; case UserLogType.CardPersonalSave: content = "保存了您的名片"; break; case UserLogType.CardPersonalShare: content = "分享了您的名片"; break; case UserLogType.CardPersonalWechat: content = "复制了您的微信号"; break; } iTempMessage = new Common.WeChat.WeChatMessageTemp.PDefaultNotifyWeChatMessage(fromUser.NickName, content, log.CreateDateTime); wechat.SendMessage(openID, form.FormID, null, iTempMessage); } break; default: break; } } catch (Exception ex) { } finally { } } }
private ApplicationUser CreateByWeChat(Common.WeChat.UserInfoResult model) { string username, nickname, avart, unionId = model.UnionID; var user = db.Users.FirstOrDefault(s => s.WeChatID == unionId); IConfig config = null; switch (model.Type) { case WeChatAccount.AiCardMini: config = new ConfigMini(); break; case WeChatAccount.AiCardPersonalMini: config = new ConfigMiniPersonal(); break; default: case WeChatAccount.PC: config = new ConfigWeChatWork(); break; } if (user != null) { string appID = config.AppID; var op1 = new Bll.Users.UserOpenID(user); op1.AddOpenID(appID, model.OpenID); db.SaveChanges(); return(user); } nickname = model.NickName; avart = model.HeadImgUrl; if (!string.IsNullOrWhiteSpace(avart)) { try { avart = this.Download(avart); } catch (Exception) { avart = "~/Content/Images/404/avatar.png"; } } unionId = model.UnionID; #region 把图片传到七牛 var path = Server.MapPath(avart); avart = new Common.Qiniu.QinQiuApi().UploadFile(path, true); #endregion do { username = $"wc{DateTime.Now:yyyyMMddHHmmss}{Comm.Random.Next(1000, 9999)}"; } while (db.Users.Any(s => s.UserName == username)); if (string.IsNullOrWhiteSpace(nickname)) { nickname = username; } user = new ApplicationUser { WeChatID = unionId, UserName = username, NickName = nickname, Avatar = avart, RegisterDateTime = DateTime.Now, LastLoginDateTime = DateTime.Now, UserType = UserType.Personal }; var option = new Bll.Users.UserOpenID(user); option.AddOpenID(config.AppID, model.OpenID); var r = UserManager.Create(user); user = db.Users.FirstOrDefault(s => s.WeChatID == unionId); db.SaveChanges(); if (!r.Succeeded) { throw new Exception(r.Errors.FirstOrDefault()); } return(user); }
public ActionResult LoginByWeiXin(string code, string state = null, WeChatAccount type = WeChatAccount.AiCardMini) { Func <string, string, ActionResult> error = (content, detail) => { if (type != WeChatAccount.PC) { return(Json(Comm.ToJsonResult("Error", content, detail))); } else { return(this.ToError("错误", detail, Url.Action("Login", "Account"))); } }; if (string.IsNullOrWhiteSpace(code)) { return(error("请求有误", "Code不能为空")); } if (Request.HttpMethod == "GET") { type = WeChatAccount.PC; } if (type != WeChatAccount.AiCardMini && type != WeChatAccount.AiCardPersonalMini) { //非小程序 switch (type) { default: case WeChatAccount.PC: { Common.WeChat.IConfig config = new Common.WeChat.ConfigWeChatWork(); Common.WeChat.WeChatApi wechat = new Common.WeChat.WeChatApi(config); Common.WeChat.AccessTokenResult result; try { result = wechat.GetAccessTokenSns(code); var openID = result.OpenID; if (state == "openid") { Response.Cookies["WeChatOpenID"].Value = openID; return(Json(Comm.ToJsonResult("Success", "成功", new { OpenID = openID }))); } config.AccessToken = result.AccessToken; var unionid = result.UnionID; var user = db.Users.FirstOrDefault(s => s.WeChatID == unionid); try { if (user != null) { if (user.UserName == user.NickName) { var userInfo = wechat.GetUserInfoSns(openID); string avart; try { avart = this.Download(userInfo.HeadImgUrl); } catch (Exception) { avart = "~/Content/Images/404/avatar.png"; } user.NickName = userInfo.NickName; user.Avatar = avart; } var option = new Bll.Users.UserOpenID(user); option.AddOpenID(config.AppID, result.OpenID); user.LastLoginDateTime = DateTime.Now; db.SaveChanges(); } else { try { var userInfo = wechat.GetUserInfoSns(openID); user = CreateByWeChat(userInfo); } catch (Exception) { user = CreateByWeChat(new Common.WeChat.UserInfoResult { UnionID = unionid }); } } if (type != WeChatAccount.PC) { return(Json(Comm.ToJsonResult("Success", "成功", new UserForApiViewModel(user)))); } SignInManager.SignIn(user, true, true); switch (state.ToLower()) { case null: case "": case "ticketindex": return(RedirectToAction("Index", "Tickets")); case "qrcode": return(RedirectToAction("Index", "Tickets", new { mode = "qrcode" })); case "pagelogin": { var card = db.Cards.FirstOrDefault(s => s.UserID == user.Id); if (card != null) { return(Redirect($"https://radar.dtoao.com/#/Login?userID={user.Id}&enterpriseID={card.EnterpriseID}&cardID={card.ID}&userName={user.UserName}")); } else { return(Redirect($"https://radar.dtoao.com/#/Login?error=名片不存在")); } } default: return(Redirect(state)); } } catch (Exception ex) { return(error("请求有误", ex.Message)); } } catch (Exception ex) { return(error("请求有误", ex.Message)); } } } } else { Common.WeChat.IConfig config; switch (type) { case WeChatAccount.AiCardMini: config = new Common.WeChat.ConfigMini(); break; case WeChatAccount.AiCardPersonalMini: config = new Common.WeChat.ConfigMiniPersonal(); break; default: return(Json(Comm.ToJsonResult("Error", "Type参数有误"))); } //小程序 WeChatMinApi wechat = new Common.WeChat.WeChatMinApi(config); try { var result = wechat.Jscode2session(code); ApplicationUser user = null; if (!string.IsNullOrWhiteSpace(result.UnionID)) { user = db.Users.FirstOrDefault(s => s.WeChatID == result.UnionID); // 把OpenID存进数据库 if (user != null) { var option = new Bll.Users.UserOpenID(user); option.AddOpenID(config.AppID, result.OpenID); db.SaveChanges(); } } return(Json(Comm.ToJsonResult("Success", "成功", new { result.OpenID, result.UnionID, User = user == null ? null : new UserForApiViewModel(user) }))); } catch (Exception ex) { return(Json(Comm.ToJsonResult("Error", ex.Message))); } } }
public ActionResult VerufucatuibCard(string phonenumber, string verificationcode, string wxcode, int cardid) { var vcodemodel = db.VerificationCodes.FirstOrDefault(s => s.To == phonenumber.Replace(" ", "") && s.Code == verificationcode); Card cardmodel = new Card(); if (cardid <= 0) { cardmodel = db.Cards.FirstOrDefault(s => s.Mobile == phonenumber.Replace(" ", "")); } else { cardmodel = db.Cards.FirstOrDefault(s => s.ID == cardid); } //验证手机短信验证码是否正确 if (vcodemodel == null || vcodemodel.Code != verificationcode) { return(Json(Comm.ToJsonResult("Error", "验证码不正确"))); } //验证手机短信验证码是否过时 else { DateTime date1 = DateTime.Now; DateTime date2 = vcodemodel.CreateDate; TimeSpan timeSpan = date1 - date2; int timespanint = Convert.ToInt32(timeSpan.TotalMinutes); if (timespanint > 30) { return(Json(Comm.ToJsonResult("Error", "验证码超时"))); } } if (cardmodel == null) { return(Json(Comm.ToJsonResult("Error", "名片不存在"))); } else { Common.WeChat.IConfig config = new Common.WeChat.ConfigOpen(); Common.WeChat.WeChatApi wechat = new Common.WeChat.WeChatApi(config); Common.WeChat.AccessTokenResult result; try { //根据微信code获取到accesstoken、openid result = wechat.GetAccessTokenSns(wxcode); var openID = result.OpenID; config.AccessToken = result.AccessToken; var unionid = result.UnionID; var user = db.Users.FirstOrDefault(s => s.WeChatID == unionid); try { if (user != null) { if (user.UserName == user.NickName) { var userInfo = wechat.GetUserInfoSns(openID); string avart; try { avart = this.Download(userInfo.HeadImgUrl); } catch (Exception) { avart = "~/Content/Images/404/avatar.png"; } user.NickName = userInfo.NickName; user.Avatar = avart; } var option = new Bll.Users.UserOpenID(user); option.AddOpenID(config.AppID, result.OpenID); user.LastLoginDateTime = DateTime.Now; db.SaveChanges(); cardmodel.UserID = user.Id; cardmodel.Enable = true; user.EnterpriseID = cardmodel.EnterpriseID.Value; db.SaveChanges(); } else { try { var userInfo = wechat.GetUserInfoSns(openID); user = CreateByWeChat(userInfo); cardmodel.UserID = user.Id; cardmodel.Enable = true; user.EnterpriseID = cardmodel.EnterpriseID.Value; db.SaveChanges(); } catch (Exception) { user = CreateByWeChat(new Common.WeChat.UserInfoResult { UnionID = unionid }); cardmodel.UserID = user.Id; cardmodel.Enable = true; user.EnterpriseID = cardmodel.EnterpriseID.Value; db.SaveChanges(); } } return(Json(Comm.ToJsonResult("Success", "激活成功", new UserForApiViewModel(user)))); } catch (Exception ex) { return(Json(Comm.ToJsonResult("Error", ex.Message))); } } catch (Exception ex) { return(Json(Comm.ToJsonResult("Error", ex.Message))); } } }