/// <summary> /// 获取 WXOpenCmptAccessToken /// </summary> /// <param name="opensetting"></param> /// <param name="cmpt_verify_ticket"></param> /// <returns></returns> public string GetCmptAccessToken(WXOpenSetting opensetting, string cmpt_verify_ticket) { using (ISession s = SessionFactory.Instance.CreateSession()) { //返回的Token字符串 string cmpt_access_token = string.Empty; //当前预授权码对象 WXOpenCmptAccessToken cmptAccessToken = null; //当前凭据参数是否存在 WXOpenAuth entity = s.Get <WXOpenAuth>("where auth_key = @0 ", WXOpenAuthKey.cmpt_access_token.ToString()); if (entity == null) { entity = new WXOpenAuth(); } else { cmptAccessToken = JsonConvert.DeserializeObject <WXOpenCmptAccessToken>(entity.val); cmpt_access_token = cmptAccessToken.component_access_token; } //获取授权票据 if (entity.id == 0 || (cmptAccessToken != null && entity.update_time.AddSeconds(cmptAccessToken.expires_in) < DateTime.Now)) { cmptAccessToken = WeChatOpenHelper.GetComponentAccessToken(opensetting.component_appid, opensetting.component_appsecret, cmpt_verify_ticket); if (cmptAccessToken.errcode != 0) { string er = "获取微信开放组件Token,方法[GetCmptAccessToken]==>" + JsonConvert.SerializeObject(cmptAccessToken); s.Insert(new APILogs() { type = 1, created_date = DateTime.Now, content = er }); } else { //提前10分钟刷新 cmptAccessToken.expires_in -= 600; entity.update_time = DateTime.Now; entity.auth_key = WXOpenAuthKey.cmpt_access_token.ToString(); entity.val = JsonConvert.SerializeObject(cmptAccessToken); cmpt_access_token = cmptAccessToken.component_access_token; if (entity.id == 0) { s.Insert(entity); } else { s.Update(entity); } } } return(cmpt_access_token); } }
/// <summary> /// 公众号设置 /// </summary> /// <param name="user"></param> /// <param name="auth_code"></param> /// <param name="expires_in"></param> /// <returns></returns> public IActionResult AccountSetting(SysUser user, string auth_code = "", string expires_in = "") { //当前用户加密ID ViewBag.Ticket = StringHelper.GetEncryption(bid.ToString()); //用户图片路径 ViewBag.imgurl = string.Empty; ViewBag.OpenToken = ""; ViewBag.AscKey = ""; //缺省图片路劲 ViewBag.defimgurl = ResXmlConfig.Instance.DefaultImgSrc(AppGlobal.Res, ImgType.WX_Account); ViewBag.wx_account_imgurl = ViewBag.defimgurl; WeChatAccount account = ServiceIoc.Get <WeChatAccountService>().Get(); if (account != null) { Img img = ServiceIoc.Get <ImgService>().GetImg(ImgType.WX_Account, account.id); if (img != null) { ViewBag.wx_account_imgurl = string.IsNullOrEmpty(img.getImgUrl()) ? ViewBag.defimgurl : img.getImgUrl(); } ViewBag.account = JsonConvert.SerializeObject(account); } else { ViewBag.Token = StringHelper.CreateRandomCode(10); } WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get(); if (merchant != null) { ViewBag.merchant = JsonConvert.SerializeObject(merchant); } WXOpenAccount openAcount = ServiceIoc.Get <WXOpenAccountService>().Get(); if (openAcount != null) { ViewBag.openAcount = JsonConvert.SerializeObject(openAcount); } WXOpenSetting openSetting = ServiceIoc.Get <WXOpenSettingService>().Get(); if (openSetting != null) { ViewBag.opensetting = JsonConvert.SerializeObject(openSetting); } else { ViewBag.OpenToken = StringHelper.GetRandomCode(10); ViewBag.AscKey = StringHelper.GetRandomCode(43); } ViewBag.AuthTitle = "待微信推送票据"; ViewBag.url = "javascript:;"; //获取当前凭据 WXOpenCmptVerifyTicket ticket = ServiceIoc.Get <WXOpenAuthService>().GetCmptVerifyTicket(); if (ticket != null && ConfigManage.AppSettings <bool>("WeChatSettings:IsOpenAuthUrl")) { if (ticket.ComponentVerifyTicket != null) { ViewBag.WXOpenTicket = ticket.ComponentVerifyTicket.Value; string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ViewBag.WXOpenTicket); string pre_auth_code = ServiceIoc.Get <WXOpenAuthService>().GetOpenPreAuthCode(cmpt_access_token, openSetting.component_appid); string redirect_uri = AppGlobal.Admin + "WeChat/AccountSetting"; ViewBag.AuthTitle = "授权公众号"; //授权地址 ViewBag.url = WeChatOpenHelper.GetOpenOuthUrl(openSetting.component_appid, pre_auth_code, redirect_uri); } } //授权回调 if (!string.IsNullOrEmpty(auth_code) && !string.IsNullOrEmpty(expires_in)) { //组件Token string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value); //使用授权码换取公众号的接口调用凭据和授权信息 WXOpenAuthFun auth_fun = ServiceIoc.Get <WXOpenAuthService>().GetAuthInfo(cmpt_access_token, openSetting.component_appid, auth_code); //组件ID string cmpt_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value); //成功 if (auth_fun != null && !string.IsNullOrEmpty(cmpt_token)) { ServiceIoc.Get <WXOpenAccountService>().AuthWeChatAccount(user.id, cmpt_token, openSetting.component_appid, auth_fun.authorization_info.authorizer_appid); } return(Redirect(AppGlobal.Admin + "WeChat/AccountSetting")); } return(View()); }