using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; namespace Shared.Phone.UserCenter.OtherParty { /// /// 第三方账号的菜单界面 /// public class OtherPartyAccountMenuForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 绑定的方式 /// private Dictionary dicBindData = null; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// public void ShowForm() { //设置头部信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uOtherPartyAccount)); //初始化中部数据 this.InitMiddleData(); } /// /// 初始化中部数据 /// private void InitMiddleData() { //清空bodyFrame this.ClearBodyFrame(); HdlThreadLogic.Current.RunThread(() => { //打开进度条 this.ShowProgressBar(); //获取绑定数据 var result = this.GetBingData(); if (result == false) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); HdlThreadLogic.Current.RunMain(() => { //初始化中部信息 this.InitMiddleFrame(); }); }); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { var listView = new VerticalListControl(12); listView.Height = Application.GetRealHeight(317); listView.BackgroundColor = UserCenterColor.Current.White; bodyFrameLayout.AddChidren(listView); //未授权 string bindNameText = Language.StringByID(R.MyInternationalizationString.uNotAuthentication); //请绑定 string bindTipText= Language.StringByID(R.MyInternationalizationString.uPleaseBind); if (dicBindData.ContainsKey("Wechat") == true) { //解除绑定 bindTipText = Language.StringByID(R.MyInternationalizationString.uUnBinded); bindNameText = dicBindData["Wechat"].UserName; } var rowChat = new FrameRowControl(listView.rowSpace / 2); rowChat.Y = Application.GetRealHeight(11); listView.AddChidren(rowChat); //微信 var btnChat = rowChat.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uWebChat), 400, 60); btnChat.Y = Application.GetRealHeight(12) + rowChat.chidrenYaxis; btnChat.TextSize = 15; rowChat.AddChidren(btnChat, ChidrenBindMode.BindEvent); //未授权 OR 名字 var btnTip1 = rowChat.AddLeftCaption(bindNameText == null ? string.Empty : bindNameText, 400, 50); btnTip1.Y = Application.GetRealHeight(72) + rowChat.chidrenYaxis; btnTip1.TextSize = 12; btnTip1.TextColor = UserCenterColor.Current.TextGrayColor1; rowChat.AddChidren(btnTip1, ChidrenBindMode.BindEvent); //向右图标 rowChat.AddRightArrow(); //底线 //rowChat.AddBottomLine(); //请绑定 OR 解除绑定 rowChat.AddMostRightView(bindTipText, 400); rowChat.ButtonClickEvent += (sender, e) => { if (dicBindData.ContainsKey("Wechat") == true) { //确定要解除绑定微信? string msg = Language.StringByID(R.MyInternationalizationString.uComfirmUnBindedMsg); msg = msg.Replace("{0}", Language.StringByID(R.MyInternationalizationString.uWebChat)); this.ShowMassage(ShowMsgType.Confirm, msg, () => { //解除绑定 this.UnBindOtherParty(dicBindData["Wechat"]); }); } else { //激活微信App this.ActionWechatApp(); } }; ////未授权 //bindNameText = Language.StringByID(R.MyInternationalizationString.uNotAuthentication); ////请绑定 //bindTipText = Language.StringByID(R.MyInternationalizationString.uPleaseBind); //if (dicBindData.ContainsKey("QQ") == true) //{ // //解除绑定 // bindTipText = Language.StringByID(R.MyInternationalizationString.uUnBinded); // bindNameText = "QQ"; //} //var rowQQ = new FrameRowControl(listView.rowSpace / 2); //listView.AddChidren(rowQQ); ////微信 //var btnQQ = rowQQ.AddLeftCaption("QQ", 400, 60); //btnQQ.Y = Application.GetRealHeight(12) + rowQQ.chidrenYaxis; //btnQQ.TextSize = 15; //rowQQ.AddChidren(btnQQ, ChidrenBindMode.BindEvent); ////未授权 OR 名字 //var btnTip2 = rowQQ.AddLeftCaption(bindNameText, 400, 49); //btnTip2.Y = Application.GetRealHeight(72) + rowQQ.chidrenYaxis; //btnTip2.TextSize = 12; //btnTip2.TextColor = UserCenterColor.Current.TextGrayColor1; //rowQQ.AddChidren(btnTip2, ChidrenBindMode.BindEvent); ////向右图标 //rowQQ.AddRightArrow(); ////请绑定 OR 解除绑定 //rowQQ.AddMostRightView(bindTipText, 400); //rowQQ.ButtonClickEvent += (sender, e) => //{ // if (dicBindData.ContainsKey("QQ") == true) // { // } // else // { // } //}; //调整真实高度 listView.AdjustRealHeight(Application.GetRealHeight(23)); } #endregion #region ■ 获取绑定数据_______________________ /// /// 获取绑定数据 /// /// private bool GetBingData() { this.dicBindData = new Dictionary(); var result = UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetUserAuthItem", false, ""); if (string.IsNullOrEmpty(result) == true) { return false; } var data = Newtonsoft.Json.JsonConvert.DeserializeObject>(result); foreach (var info in data) { this.dicBindData[info.Platform] = info; } return true; } #endregion #region ■ 绑定微信___________________________ /// /// 激活微信App /// private void ActionWechatApp() { #if Android com.hdl.home.Application.WXLogin(); com.hdl.home.WXEntryActivity.RespAction = (authStr) => #endif #if iOS Home.IOS.AppDelegate.WXLogin(); Home.IOS.AppDelegate.RespAction = (authStr) => #endif { if (string.IsNullOrEmpty(authStr) == true) { return; } var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr); //绑定微信 this.BindWechat(authRes.access_token, authRes.refresh_token, authRes.openid); }; } /// /// 绑定微信 /// /// private void BindWechat(string accessToken, string refreshToken, string openID) { //获取微信昵称 var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken; strUrl += "&openid=" + openID; var byteData = Common.CommonPage.Instance.DoRequestZigbeeHttpsInterface(strUrl, null, null, "GET"); if (byteData == null) { return; } var receipData = System.Text.Encoding.UTF8.GetString(byteData); var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject(receipData); //先上传微信资料 var pra = new { AccessToken = accessToken, RefreshToken = refreshToken, OpenID = openID, UserName = nickData.nickname }; var listNotShow = new List() { "UserNoBindAccount" }; var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/InsertOrUpdateAuthUser", false, pra, listNotShow); if (result == false) { return; } //再执行绑定 var pra2 = new { AccountGuid = Common.Config.Instance.Guid, OpenID = openID }; result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/BindAuthUserToAccount", false, pra2); if (result == true) { //绑定成功!下次你可以用微信{0}账号快速登录啦 string msg = Language.StringByID(R.MyInternationalizationString.uBindWebchatSuccessMsg); msg = msg.Replace("{0}", "\r\n"); this.ShowMassage(ShowMsgType.Normal, msg, null, Language.StringByID(R.MyInternationalizationString.uWell)); //重新刷新界面 this.InitMiddleData(); } } #endregion #region ■ 解除绑定___________________________ /// /// 解除绑定 /// /// private void UnBindOtherParty(OtherPartyResult infoData) { var pra = new { DistributedMark = infoData.Id }; var result = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/UnBindUserAuth", false, pra); if (result == true) { //重新刷新界面 this.InitMiddleData(); } } #endregion #region ■ 结构体_____________________________ /// /// 获取第三方结果信息 /// private class OtherPartyResult { /// /// 这个是用来删除绑定的 /// public string Id = string.Empty; /// /// OpenID /// public string OpenID = string.Empty; /// /// AccessToken /// public string AccessToken = string.Empty; /// /// RefreshToken /// public string RefreshToken = string.Empty; /// /// Wechat 或者 QQ /// public string Platform = string.Empty; /// /// 昵称 /// public string UserName = string.Empty; } #endregion } }