HDL Home App 第二版本 旧平台金堂用 正在使用
黄学彪
2019-11-18 16604a593202f2f87adf71abd57d036fe7da3b52
ZigbeeApp/Shared/Phone/UserCenter/OtherParty/OtherPartyAccountMenuForm.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Shared.Phone.UserCenter.OtherParty
{
@@ -10,6 +11,11 @@
    public class OtherPartyAccountMenuForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 绑定的方式
        /// </summary>
        private Dictionary<string, OtherPartyResult> dicBindData = null;
        #endregion
@@ -23,8 +29,39 @@
            //设置头部信息
            base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uOtherPartyAccount));
            //初始化中部信息
            this.InitMiddleFrame();
            //初始化中部数据
            this.InitMiddleData();
        }
        /// <summary>
        /// 初始化中部数据
        /// </summary>
        private void InitMiddleData()
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            HdlThreadLogic.Current.RunThread(async () =>
            {
                //打开进度条
                this.ShowProgressBar();
                //获取绑定数据
                var result = await this.GetBingData();
                if (result == false)
                {
                    //关闭进度条
                    this.CloseProgressBar(ShowReLoadMode.YES);
                    return;
                }
                //关闭进度条
                this.CloseProgressBar();
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //初始化中部信息
                    this.InitMiddleFrame();
                });
            });
        }
        /// <summary>
@@ -32,24 +69,31 @@
        /// </summary>
        private void InitMiddleFrame()
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            var listView = new VerticalListControl(12);
            listView.Height = Application.GetRealHeight(317);
            listView.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(listView);
            var frameBack = new FrameListControl(12);
            frameBack.Height = Application.GetRealHeight(317);
            frameBack.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(frameBack);
            var rowChat = new FrameRowControl(frameBack.rowSpace / 2);
            //未授权
            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"].Nickname;
            }
            var rowChat = new FrameRowControl(listView.rowSpace / 2);
            rowChat.Y = Application.GetRealHeight(11);
            frameBack.AddChidren(rowChat);
            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.BindEventOnly);
            //未授权
            var btnTip1 = rowChat.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNotAuthentication), 400, 49);
            //未授权  OR  名字
            var btnTip1 = rowChat.AddLeftCaption(bindNameText, 400, 49);
            btnTip1.Y = Application.GetRealHeight(72) + rowChat.chidrenYaxis;
            btnTip1.TextSize = 12;
            btnTip1.TextColor = UserCenterColor.Current.TextGrayColor1;
@@ -57,40 +101,228 @@
            //向右图标
            rowChat.AddRightArrow();
            //底线
            rowChat.AddBottomLine();
            //请绑定
            rowChat.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uPleaseBind), 400);
            //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();
                }
            };
            var rowQQ = new FrameRowControl(frameBack.rowSpace / 2);
            frameBack.AddChidren(rowQQ);
            //微信
            var btnQQ = rowQQ.AddLeftCaption("QQ", 400, 60);
            btnQQ.Y = Application.GetRealHeight(12) + rowQQ.chidrenYaxis;
            btnQQ.TextSize = 15;
            rowQQ.AddChidren(btnQQ, ChidrenBindMode.BindEventOnly);
            //未授权
            var btnTip2 = rowQQ.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNotAuthentication), 400, 49);
            btnTip2.Y = Application.GetRealHeight(72) + rowQQ.chidrenYaxis;
            btnTip2.TextSize = 12;
            btnTip2.TextColor = UserCenterColor.Current.TextGrayColor1;
            rowQQ.AddChidren(btnTip2, ChidrenBindMode.BindEventOnly);
            //向右图标
            rowQQ.AddRightArrow();
            //请绑定
            rowQQ.AddMostRightView(Language.StringByID(R.MyInternationalizationString.uPleaseBind), 400);
            rowQQ.ButtonClickEvent += (sender, e) =>
            {
            };
            ////未授权
            //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.BindEventOnly);
            ////未授权  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.BindEventOnly);
            ////向右图标
            //rowQQ.AddRightArrow();
            ////请绑定  OR  解除绑定
            //rowQQ.AddMostRightView(bindTipText, 400);
            //rowQQ.ButtonClickEvent += (sender, e) =>
            //{
            //    if (dicBindData.ContainsKey("QQ") == true)
            //    {
            //    }
            //    else
            //    {
            //    }
            //};
            //调整真实高度
            listView.AdjustRealHeight(Application.GetRealHeight(23));
        }
        #endregion
        #region ■ 一般方法___________________________
        #region ■ 获取绑定数据_______________________
        /// <summary>
        /// 获取绑定数据
        /// </summary>
        /// <returns></returns>
        private async Task<bool> GetBingData()
        {
            this.dicBindData = new Dictionary<string, OtherPartyResult>();
            var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetUserAuthItem", false, "");
            if (result == null)
            {
                return false;
            }
            var data = Newtonsoft.Json.JsonConvert.DeserializeObject<List<OtherPartyResult>>(result);
            foreach (var info in data)
            {
                this.dicBindData[info.Platform] = info;
            }
            //获取用户昵称
            if (this.dicBindData.ContainsKey("Wechat") == true)
            {
                var myData = this.dicBindData["Wechat"];
                //给个默认值
                myData.Nickname = "Wechat";
                var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + myData.AccessToken;
                strUrl += "&openid=" + myData.OpenID;
                var byteData = await Common.CommonPage.Instance.DoRequestZigbeeHttpsInterface(strUrl, null, null, "GET");
                if (byteData != null)
                {
                    var receipData = System.Text.Encoding.UTF8.GetString(byteData);
                    var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject<NicknameInfo>(receipData);
                    myData.Nickname = nickData.nickname;
                }
            }
            return true;
        }
        #endregion
        #region ■ 绑定微信___________________________
        /// <summary>
        /// 激活微信App
        /// </summary>
        private void ActionWechatApp()
        {
#if Android
            com.hdl.home.Application.WXLogin();
            com.hdl.home.WXEntryActivity.RespAction = (authStr) =>
            {
                if (string.IsNullOrEmpty(authStr) == true)
                {
                    return;
                }
                var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.AuthUserRes>(authStr);
                //绑定微信
                this.BindWechat(authRes.access_token, authRes.refresh_token, authRes.openid);
            };
#endif
        }
        /// <summary>
        /// 绑定微信
        /// </summary>
        /// <param name="infoData"></param>
        private async void BindWechat(string accessToken, string refreshToken, string openID)
        {
            var pra = new { AccessToken = accessToken, RefreshToken = refreshToken, OpenID = openID };
            var listNotShow = new List<string>() { "UserNoBindAccount" };
            var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/InsertOrUpdateAuthUser", false, pra, listNotShow);
            if (result == false)
            {
                return;
            }
            var pra2 = new { AccountGuid = Common.Config.Instance.Guid, OpenID = openID };
            result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/BindAuthUserToAccount", false, pra2);
            if (result == true)
            {
                //绑定微信成功!
                string msg = Language.StringByID(R.MyInternationalizationString.uBindSomethingSuccess);
                msg = msg.Replace("{0}", Language.StringByID(R.MyInternationalizationString.uWebChat));
                this.ShowMassage(ShowMsgType.Tip, msg);
                //重新刷新界面
                this.InitMiddleData();
            }
        }
        #endregion
        #region ■ 解除绑定___________________________
        /// <summary>
        /// 解除绑定
        /// </summary>
        /// <param name="infoData"></param>
        private async void UnBindOtherParty(OtherPartyResult infoData)
        {
            var pra = new { DistributedMark = infoData.Id };
            var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/UnBindUserAuth", false, pra);
            if (result == true)
            {
                //重新刷新界面
                this.InitMiddleData();
            }
        }
        #endregion
        #region ■ 结构体_____________________________
        /// <summary>
        /// 获取第三方结果信息
        /// </summary>
        private class OtherPartyResult
        {
            /// <summary>
            /// 这个是用来删除绑定的
            /// </summary>
            public string Id = string.Empty;
            /// <summary>
            /// OpenID
            /// </summary>
            public string OpenID = string.Empty;
            /// <summary>
            /// AccessToken
            /// </summary>
            public string AccessToken = string.Empty;
            /// <summary>
            /// RefreshToken
            /// </summary>
            public string RefreshToken = string.Empty;
            /// <summary>
            /// Wechat  或者 QQ
            /// </summary>
            public string Platform = string.Empty;
            /// <summary>
            /// 昵称(需要自己去获取)
            /// </summary>
            public string Nickname = string.Empty;
        }
        /// <summary>
        /// 昵称信息
        /// </summary>
        private class NicknameInfo
        {
            /// <summary>
            /// 昵称
            /// </summary>
            public string nickname = string.Empty;
        }
        #endregion
    }