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
}
}