/// <summary> /// 绑定微信 /// </summary> /// <param name="sceneid">微信识别码</param> /// <param name="trueName">真实姓名</param> /// <returns></returns> public JsonResult setShopWeiXin(string sceneid, string trueName) { if (!sceneid.Equals("") && !trueName.Equals("")) { var key = CacheKeyCollection.BindingReturn(sceneid); var obj = Core.Cache.Get <Mall.DTO.WeiXinInfo>(key); Mall.DTO.WeChatAccount model = new WeChatAccount() { ShopId = CurrentSellerManager.ShopId, Address = obj.province + obj.city, Logo = string.IsNullOrEmpty(obj.headimgurl) ? "" : obj.headimgurl, Sex = obj.sex, WeiXinNickName = string.IsNullOrEmpty(obj.NickName)?"":obj.NickName, WeiXinOpenId = obj.OpenId, WeiXinRealName = trueName }; ShopApplication.SetWeChatAccount(model); return(Json(new Result() { success = true })); } else { return(Json(new Result() { success = false })); } }
/// <summary> /// 同步公众号所用粉丝 /// </summary> /// <param name="wxAccount"></param> public void SyncAllWXUser(WeChatAccount wxAccount, string next_openid) { if (wxAccount.type == WeChatAccountType.AuthSubscriber || wxAccount.type == WeChatAccountType.AuthService) { //获取ToKen WXAccessTokenCache token = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret); string user_list = WeChatUserHelper.GetWXUserList(token.token, next_openid); WeChatUserBase wxUsers = JsonConvert.DeserializeObject <WeChatUserBase>(user_list); if (wxUsers.data != null) { //open_id 集合 string[] open_ids = wxUsers.data.openid; //遍历 foreach (string open_id in open_ids) { //通过微信接口获取 string WeChatUser_json = WeChatUserHelper.GetWXUserInfo(token.token, open_id); //序列化用户 WeChatUser WeChatUser = JsonConvert.DeserializeObject <WeChatUser>(WeChatUser_json); SyncWXUser(WeChatUser); } //存在下一openid if (!string.IsNullOrEmpty(wxUsers.next_openid)) { SyncAllWXUser(wxAccount, wxUsers.next_openid); } } } }
/// <summary> /// 在Action执行之前调用 /// </summary> /// <param name="context"></param> /// <returns></returns> public void OnActionExecuting(ActionExecutingContext context) { var query = context.HttpContext.Request.Query; string nonce = query["nonce"]; //随机数 string timestamp = query["timestamp"]; //时间戳 string signature = query["signature"]; //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数 string openId = query.ContainsKey("openid") ? $"{query["openid"]}" : ""; //用户的标识,对当前公众号唯一 string echostr = query.ContainsKey("echostr") ? $"{query["echostr"]}" : ""; //随机字符串 WeChatAccount account = ((BaseController)context.Controller).Account; //微信账户信息配置 if (!SignatureVerifyUtil.CheckSignature(signature, timestamp, nonce, account.Token)) { ContractResult result = new ContractResult(); result.SetError(ErrorCodeType.CheckSignFail); context.Result = new JsonResult(result); _log.Debug($"【微信签名校验】请求参数=》signature:{signature},timestamp:{timestamp},nonce:{nonce},echostr:{echostr},appid:{account.AppId},openid:{openId}"); return; } if (context.HttpContext.Request.Method.Equals("GET", StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(echostr)) { ContentResult result = new ContentResult() { Content = echostr }; context.Result = result; return; } }
/// <summary> /// 删除微信菜单 /// </summary> /// <returns></returns> public JsonResult DelWeChatMenu() { try { string data; WeChatAccount wxAccount = ServiceIoc.Get <WeChatAccountService>().Get(); AccessToken token = WeChatBaseHelper.GetAccessToken(wxAccount.appid, wxAccount.app_secret); if (token.access_token == null) { return(Json(GetResult(StateCode.State_152))); } data = WeChatBaseHelper.DeleteWXMenu(token.access_token); var errcode = JsonConvert.DeserializeObject <WXErrCode>(data); if (errcode.errcode > 0) { return(Json(GetResult(StateCode.State_152, token.errcode))); } //errcode 等于0时候成功 return(Json(GetResult(StateCode.State_200))); } catch { return(Json(GetResult(StateCode.State_500))); } }
public ActionResult DeleteConfirmed(string id) { WeChatAccount weChatAccount = db.WeChatAccounts.Find(id); db.WeChatAccounts.Remove(weChatAccount); db.SaveChanges(); return(RedirectToAction("Index")); }
public void should_not_generate_name_a_second_time_for_same_wechat_account() { var weChatAccount = new WeChatAccount(); var name1 = weChatAccount.DisplayName; var name2 = weChatAccount.DisplayName; Assert.True(name1 == name2); }
public ActionResult Edit([Bind(Include = "Id,AccountId,NickName,BarCode,Valid")] WeChatAccount weChatAccount) { if (ModelState.IsValid) { db.Entry(weChatAccount).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(weChatAccount)); }
public ActionResult Create([Bind(Include = "AccountId,NickName,BarCode,Valid")] WeChatAccount weChatAccount) { if (ModelState.IsValid) { db.WeChatAccounts.Add(weChatAccount); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(weChatAccount)); }
/// <summary> /// 生成微信自定义菜单 /// </summary> /// <returns></returns> public JsonResult BuildWeChatMenu() { try { ComplexButton complexBtn; WXDefineMenu wxDefiMenu = new WXDefineMenu(); wxDefiMenu.button = new List <Button>(); List <DefineMenu> Menus = ServiceIoc.Get <DefineMenuService>().GetEnableList(); List <DefineMenu> mainMenus = Menus.Where(m => m.parent_id == 0).ToList(); if (mainMenus.Count > 0) { foreach (var menu in mainMenus) { var subMenus = Menus.Where(m => m.parent_id == menu.id).ToList(); if (subMenus.Count > 0) { complexBtn = new ComplexButton(); complexBtn.sub_button = new List <Button>(); complexBtn.name = menu.name; foreach (var submenu in subMenus) { complexBtn.sub_button.Add(GetButton(submenu)); } wxDefiMenu.button.Add(complexBtn); } else { wxDefiMenu.button.Add(GetButton(menu)); } } string postData = JsonConvert.SerializeObject(wxDefiMenu).Replace("%26", "&"); WeChatAccount wxAccount = ServiceIoc.Get <WeChatAccountService>().Get(); AccessToken token = WeChatBaseHelper.GetAccessToken(wxAccount.appid, wxAccount.app_secret); if (token.access_token == null) { return(Json(GetResult(StateCode.State_152, token.errcode))); } string data = WeChatBaseHelper.CreateWXMenu(token.access_token, postData); var errcode = JsonConvert.DeserializeObject <WXErrCode>(data); if (errcode.errcode > 0) { return(Json(GetResult(StateCode.State_152, token.errcode))); } } return(Json(GetResult(StateCode.State_200))); } catch { return(Json(GetResult(StateCode.State_500))); } }
public JsonResult Save(WeChatAccount account) { if (account.Id != default(Guid)) { db.Entry(account).State = System.Data.Entity.EntityState.Modified; } else { db.WeChatAccounts.Add(account); } db.SaveChanges(); return(Json(new { code = "ok", message = "success saved" })); }
/// <summary> /// 同步单一粉丝 /// 关注时同步 /// </summary> /// <param name="open_id"></param> /// <param name="wxAccount"></param> public void SyncSingleWXUser(string open_id, WeChatAccount wxAccount) { //获取ToKen WXAccessTokenCache token = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret); //通过微信接口获取 string WeChatUser_json = WeChatUserHelper.GetWXUserInfo(token.token, open_id); //序列化用户 WeChatUser WeChatUser = JsonConvert.DeserializeObject <WeChatUser>(WeChatUser_json); SyncWXUser(WeChatUser); }
// GET: WeChatAccounts/Delete/5 public ActionResult Delete(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } WeChatAccount weChatAccount = db.WeChatAccounts.Find(id); if (weChatAccount == null) { return(HttpNotFound()); } return(View(weChatAccount)); }
public void should_generate_unique_names() { var account = new WeChatAccount(); var names = new List <string>(); var i = 20; do { names.Add(RandomDisplayNameGenerator.Generate()); } while (--i > 0); var distinctNames = names.Distinct().ToList(); Assert.True(distinctNames.Count >= names.Count / 2); }
/// <summary> /// 初始化基础上下文 /// </summary> /// <param name="openId">用户的标识,对当前公众号唯一</param> /// <param name="account">公众号账户配置</param> /// <returns></returns> private IAccountContext InitContext(string openId, WeChatAccount account) { var messageContext = new AccountContext(); if (account == null || string.IsNullOrEmpty(account.AppId) || string.IsNullOrEmpty(account.SecretKey) || string.IsNullOrEmpty(account.Token)) { return(messageContext); } messageContext.OpenId = openId; messageContext.Account = account; messageContext.AppId = account.AppId; return(messageContext); }
/// <summary> /// 同步微信用户分组 /// </summary> /// <param name="wxaccount"></param> /// <param name="open_id"></param> /// <param name="tableConfig"></param> public void SyncWXGroup(WeChatAccount wxAccount, string open_id) { //获取token WXAccessTokenCache token = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret); //公众号粉丝集合 string groups = WeChatUserHelper.GetWxGroups(token.token); //序列化数据 string[] groupslist = JsonConvert.DeserializeObject <string[]>(groups); foreach (string s in groupslist) { } //open_ids }
private WeChatAccount GetOrCreateGetWeChatAccount(ChatMessage msg) { var wxId = msg.SourceWxId; var wechatAccount = _weChatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId.ToLower() == wxId.ToLower()); if (wechatAccount == null) { wechatAccount = new WeChatAccount { WxId = msg.SourceWxId }; _weChatAccountRepo.Save(wechatAccount); } return(wechatAccount); }
/// <summary> /// 保存公众账号 /// </summary> /// <param name="user"></param> /// <param name="account"></param> /// <param name="account_ent"></param> /// <param name="merchant"></param> /// <param name="imgmsg"></param> /// <returns></returns> public JsonResult SaveAccount(SysUser user, WeChatAccount account, WeChatAccountEnt account_ent, WeChatMerchant merchant, string imgmsg) { //微信公众号类型验证 if (account.type != WXAccountType.Subscription) { AccessToken token = WeChatBaseHelper.GetAccessToken(account.appid, account.app_secret); if (token.access_token == null) { return(Json(GetResult(StateCode.State_11001, token.errcode.ToString()))); } } StateCode state = ServiceIoc.Get <WeChatAccountService>().Save(user.id, account, account_ent, merchant, imgmsg); return(Json(GetResult(state))); }
private WeChatAccount GetOrCreateGetWeChatAccount(ChatMessage msg) { var wxId = msg.SourceWxId; var wechatAccount = _weChatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId.ToLower() == wxId.ToLower()); if (wechatAccount == null) { // todo: real wechat account!! // todo: download avatar!! wechatAccount = new WeChatAccount { WxId = msg.SourceWxId, NickName = msg.SourceName }; _weChatAccountRepo.Save(wechatAccount); } return(wechatAccount); }
public async Task <ApiResponse> VerifyWeChatAccountByCode([FromForm] string code) { var verifyResult = await _chatyApiService.VerifyWeChatAccount(code); if (verifyResult == null) { return(ApiResponse.NoContent(HttpStatusCode.InternalServerError)); } var user = HttpContext.DiscussionUser(); if (verifyResult.Id == null) { _logger.LogWarning("验证微信账号失败:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code, Result = "验证码不正确或已过期" }); return(ApiResponse.Error("验证失败")); } _logger.LogInformation("验证微信账号成功:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code }); var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId == verifyResult.Id && wxa.UserId == 0); if (weChatAccount == null) { weChatAccount = new WeChatAccount() { WxId = verifyResult.Id, UserId = user.Id, WxAccount = verifyResult.Weixin }; _wechatAccountRepo.Save(weChatAccount); } else { weChatAccount.UserId = user.Id; weChatAccount.WxAccount = verifyResult.Weixin; _wechatAccountRepo.Save(weChatAccount); } return(ApiResponse.NoContent()); }
public ActionResult Index(WeChatAccount account) { try { if (account.ID == null) { svc.Create(account); } else { svc.Update(account); } ViewBag.Url = account.Url; ViewBag.Token = account.Token; return(View(account)); } catch (RuleViolatedException e) { ViewBag.Error = e.Message; ViewBag.Url = account.Url; ViewBag.Token = account.Token; return(View(account)); } }
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))); } } }
/// <summary> /// 构造函数 /// </summary> /// <param name="openId">用户的标识,对当前公众号唯一</param> /// <param name="account">公众号账户配置</param> /// <param name="inputStream">微信传入的文件流</param> public MessageHandlerProvider(string openId, WeChatAccount account, Stream inputStream) { Account = InitContext(openId, account); RequestDocument = XmlUtility.SerializeObject(inputStream); Descendants = RequestDocument.Descendants(); }
/// <summary> /// 构造函数 /// </summary> /// <param name="openId">用户的标识,对当前公众号唯一</param> /// <param name="account">公众号账户配置</param> /// <param name="requestDocument">微信传入的Xml文档</param> public MessageHandlerProvider(string openId, WeChatAccount account, XDocument requestDocument) { RequestDocument = requestDocument; Account = InitContext(openId, account); Descendants = RequestDocument.Descendants(); }
public JsonResult SubmitRefundOrder(string no, decimal refund_amount, IHostingEnvironment host) { try { //退款状态码 StateCode state = StateCode.State_500; #region 订单基本状态判断 //退款单 OrderRefund orderRefund = ServiceIoc.Get <OrderRefundService>().Get(no); //订单 ProductOrder order = ServiceIoc.Get <ProductOrderService>().GetById(orderRefund.order_id); //是否存在订单 if (order == null) { return(Json(GetResult(StateCode.State_551))); } //订单是否未支付 if (!order.is_pay) { return(Json(GetResult(StateCode.State_552))); } //退款金额是否大于实际支付金额 if (refund_amount > order.actual_amount) { return(Json(GetResult(StateCode.State_554))); } //订单状态和退款单状态是可以退款的情况 if (order.refund_status != 1 || orderRefund.status != 1) { return(Json(GetResult(StateCode.State_553))); } #endregion //返回信息 string msg = string.Empty; bool PayStatus = ConfigManage.AppSettings <bool>("AppSettings:WXPayStatus"); //支付宝支付 if (PayMethod.AliPay == order.pay_method) { //商户号ID string app_id = ConfigManage.AppSettings <string>("AppSettings:ALIPAY_APP_ID"); //AliRefundPayBizContent bizContent = new AliRefundPayBizContent(); //bizContent.out_trade_no = orderRefund.order_serial_no; //bizContent.refund_amount = PayStatus ? refund_amount : decimal.Parse("0.01"); ////string webRootPath = host.WebRootPath; //string privateKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_private_key.pem"; //string publicKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_public_key.pem"; //IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app_id, privateKeyPem, "json", "1.0", "RSA2", publicKeyPem, "utf-8", true); //AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); //request.BizContent = JsonConvert.SerializeObject(bizContent); //AlipayTradeRefundResponse response = client.Execute(request); //if (!response.IsError) //{ // state = ServiceIoc.Get<OrderRefundService>().AliPayConfirmRefund(orderRefund.order_serial_no, order.id); //} //else { } }//微信app支付 else if (PayMethod.WeChat_App == order.pay_method) { RefundPay refundParam = new RefundPay(); //证书路径 DirectoryInfo Dir = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath")); string certPath = Dir.Parent.Parent.FullName; //证书密钥 //string certPwd = Settings.AppSettings("CertPwd"); //商户信息 WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get(); refundParam.appid = merchant.app_id; //商户号 refundParam.mch_id = merchant.mch_id; //随机数 refundParam.nonce_str = StringHelper.CreateNoncestr(16); //商户侧传给微信的订单号 refundParam.out_trade_no = orderRefund.order_serial_no; //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 refundParam.out_refund_no = orderRefund.refund_serial_no; //订单总金额,单位为分 refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1; //订单总金额,单位为分 refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1; //操作员帐号, 默认为商户号 refundParam.op_user_id = merchant.mch_id; //退款 state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, merchant.mch_id, merchant.pay_key, out msg); }//微信公众号支付 else if (PayMethod.WeChat_JsApi == order.pay_method || PayMethod.WeChat_Native == order.pay_method) { RefundPay refundParam = new RefundPay(); //证书路径 DirectoryInfo Dir = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath")); string certPath = Dir.Parent.Parent.FullName; //证书密钥 //string certPwd = Settings.AppSettings("CertPwd"); //开放平台授权公众号信息 WeChatAccount weChatAccount = ServiceIoc.Get <WeChatAccountService>().Get(); refundParam.appid = weChatAccount.appid; //商户号 refundParam.mch_id = weChatAccount.mch_id; //随机数 refundParam.nonce_str = StringHelper.CreateNoncestr(16); //商户侧传给微信的订单号 refundParam.out_trade_no = orderRefund.order_serial_no; //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 refundParam.out_refund_no = orderRefund.refund_serial_no; //订单总金额,单位为分 refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1; //订单总金额,单位为分 refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1; //操作员帐号, 默认为商户号 refundParam.op_user_id = weChatAccount.mch_id; //退款 state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, weChatAccount.mch_id, weChatAccount.pay_key, out msg); } return(Json(GetResult(state, msg))); } catch (Exception ex) { ServiceIoc.Get <APILogsService>().Save("提交退款SubmitRefundOrder==>" + ex.ToString()); return(Json(GetResult(StateCode.State_500))); } }
/// <summary> /// 设置店铺微信帐户 /// </summary> /// <param name="account"></param> public static void SetWeChatAccount(WeChatAccount account) { Service.SetWeChatAccount(account); ClearCacheShop(account.ShopId); }
public async Task <int> UpdateWeChatAccountAsync(WeChatAccount model) { using var spiderContext = new SpiderContext(); spiderContext.WeChatAccounts.Update(model); return(await spiderContext.SaveChangesAsync()); }
/// <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()); }
/// <summary> /// 同步公众号所用粉丝 /// </summary> /// <param name="wxAccount"></param> public void SyncAllFans(WeChatAccount wxAccount) { SyncAllWXUser(wxAccount, ""); }