当前位置: 首页 > news >正文

快速登录界面关于如何登录以及多账号列表解析以及config配置文件如何读取以及JsLogin模块与SdoLogin模块如何通信(4)

1、### Jslogin模块与前端以及JsLogin模块与Sdologin的交互

配置文件的读取:

	<CompanyIdForQq value="301"/>	<CompanyIdForWx value="300"/><CompanyIdForWb value="302"/><qq value="https://graph.qq.com/oauth2.0/authorize?response_type=code&amp;client_id=101531594&amp;redirect_uri=https://mygm.sdo.com/v1/oauth/authorize&amp;state=qq" /><wx value="https://open.weixin.qq.com/connect/qrconnect?response_type=code&amp;scope=snsapi_login&amp;appid=wxa0ef5c72c3732d26&amp;redirect_uri=https://mygm.sdo.com/v1/oauth/authorize&amp;state=wx#wechat_redirect" /><wb value="https://api.weibo.com/oauth2/authorize?client_id=3349601784&amp;redirect_uri=https://mygm.sdo.com/v1/oauth/authorize&amp;state=wb" />

假设url:

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101531594&redirect_uri=https://mygm.sdo.com/v1/oauth/authorize&state=qq

然后代码里面调用:

tstring qq_url =  CConfigManager::GetInstance()->GetClientInfoValue(L"qq");

最后被转义,所以url要被设定为:

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101531594&redirect_uri=https://mygm.sdo.com/v1/oauth/authorize&state=qq

与前端交互接口的注册:

SystemAction::SystemAction()
{TRACET();m_mapFunctions["Minimize"]			=	&SystemAction::Minimize;m_mapFunctions["Close"]				=	&SystemAction::Close;m_mapFunctions["Login"]				=	&SystemAction::Login;m_mapFunctions["IeResize"]			=	&SystemAction::IeResize;m_mapFunctions["CloseAgreementIE"]	=	&SystemAction::CloseAgreementIE;m_mapFunctions["OpenAgreementIE"]	=	&SystemAction::OpenAgreementIE;m_mapFunctions["IeWResize"]			=	&SystemAction::IeWResize;m_mapFunctions["IeHResize"]			=	&SystemAction::IeResize;m_mapFunctions["OpenShunWangloginIE"] =	&SystemAction::OpenShunWangloginIE;m_mapFunctions["CloseShunWangloginIE"]=	&SystemAction::CloseShunWangloginIE;m_mapFunctions["CloseAreaSetting"]  =	&SystemAction::CloseAreaSetting;m_mapFunctions["IeHReset"]			=	&SystemAction::IeHReset;m_mapFunctions["FeiHuoLoginResult"]	=	&SystemAction::FeiHuoLoginResult;m_mapFunctions["onCommonGeetestResult"]	=	&SystemAction::onCommonGeetestResult;//三方打开ie关闭ie/*m_mapFunctions["OpenThirdloginIE"] =	&SystemAction::OpenThirdloginIE;*/m_mapFunctions["CloseThirdloginIE"]=	&SystemAction::CloseThirdloginIE;通知前端登录器调用//m_mapFunctions["NotifyThirdlogin"]=		&SystemAction::NotifyThirdlogin;m_mapFunctions["IsThirdLogin"]=	&SystemAction::IsThirdLogin;
}

与前端交互接口定义:

HRESULT SystemAction::CloseThirdloginIE( DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr,EXCEPINFO* pInternalExcepInfo)
{TRACET();ThirdloginReq request;request.m_flag = 0;LPWSTR  _ticket = pDispParams->rgvarg[0].bstrVal;wcsncpy_s(request.ticket, _ticket, _countof(request.ticket)-1);if(!CJsLoginExternal::GetInstance()->SendMessage(&request)){TRACEW(_T("Send CloseThirdloginIE failed."));return S_FALSE;}//MessageRsp response;//if(!CJsLoginExternal::GetInstance()->WaitResponse(&request, &response, DEFAULT_TIMEOUT))//{//	TRACEW(_T("Send CloseShunWangloginIE timeout"));//	return S_FALSE;//}return S_OK;
}

获取前端JS代码调用接口传过来的参数:

在这里插入图片描述

然后使用CJsLoginExternal::GetInstance()->SendMessage(&request)把消息发送给SdoLogin

在这里插入图片描述

	case SDOL_CMD_THIRD_DIALOG_REQ:return new ThirdloginReq();

在这里插入图片描述

LRESULT CSDOLApp::OnThirdDialogLogin(WPARAM wParam, LPARAM lParam)
{TRACET();ThirdloginReq* pReq = (ThirdloginReq*)wParam;ASSERT_RETURN_VALUE(pReq, -1);wchar_t* ticket = pReq->ticket;//m_flag为0时候可以验证QQ登录if (pReq->m_flag == 0){CDataReportMaker::GetInstance()->OnCollecUserOperated("0x018");tstring phone, smsCode;CAuthenManager::GetInstance()->AsyncForThirdLogin(StringHelper::Format(ticket),all_commpany_id, phone, smsCode,"1");//区分老旧版本:extend=1表示新版本if(GetIetDlg()){GetIetDlg()->OnBtnClose();}HWND hwd = CSDOLApp::GetInstance()->GetGameWnd();ShowWindow(hwd,SW_RESTORE);}m_LoginModule.SendSimpleResponse(pReq, 0);return 0;
}

在这里插入图片描述

JsLogin模块参数传给前端:

HRESULT SystemAction::IsThirdLogin(DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr,EXCEPINFO* pInternalExcepInfo)
{TRACET();pVarResult->vt = VT_BOOL;pVarResult->boolVal = True;return S_OK;
}

在这里插入图片描述

前端调用JsLogin模块方法:web页面是在相同的浏览器环境内打开的 向这个环境内注入了方法是可以在拿到三方返回的code之后前端通过该方法把code传递给JsLogin模块的。

在这里插入图片描述

当出现问题根据调试工具调试:

在这里插入图片描述

根据传给前端的参数为false:

在这里插入图片描述

然后调用System.Action.CloseThirdLoginIE(“ticket”):

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】
  • Python处理Excel文件并与数据库匹配做拼接
  • leetcode面试经典150题——35 螺旋矩阵
  • css 输入框动态特效
  • X86汇编语言:从实模式到保护模式--命令篇
  • docker基本管理和相关概念
  • Docker网络原理及Cgroup硬件资源占用控制
  • blender 粒子系统 roughness 属性
  • 构建Servlet项目流程
  • IDEA中.java .class .jar的含义与联系
  • iptables(二)
  • Vue.delete
  • 面向对象中的单例模式
  • 智能优化算法应用:基于蚁狮算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 一文说清google最新大模型Gemini
  • 《剑指offer》分解让复杂问题更简单
  • 【css3】浏览器内核及其兼容性
  • CentOS6 编译安装 redis-3.2.3
  • Invalidate和postInvalidate的区别
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MYSQL 的 IF 函数
  • python 学习笔记 - Queue Pipes,进程间通讯
  • react-native 安卓真机环境搭建
  • RxJS: 简单入门
  • Spring核心 Bean的高级装配
  • webpack+react项目初体验——记录我的webpack环境配置
  • 构建工具 - 收藏集 - 掘金
  • 力扣(LeetCode)22
  • 什么是Javascript函数节流?
  • 数组的操作
  • 双管齐下,VMware的容器新战略
  • 通信类
  • 小程序 setData 学问多
  • 栈实现走出迷宫(C++)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • UI设计初学者应该如何入门?
  • ​【已解决】npm install​卡主不动的情况
  • # Java NIO(一)FileChannel
  • ###C语言程序设计-----C语言学习(6)#
  • (2)(2.10) LTM telemetry
  • (26)4.7 字符函数和字符串函数
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)fiber的基本认识
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)docker:Dockerfile构建容器运行jar包
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 4.0中的泛型协变和反变
  • .net 流——流的类型体系简单介绍
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)