-
Notifications
You must be signed in to change notification settings - Fork 4
简单写一下微信登录的过程(服务器)
看到坛子里有好多问第三方登录的(包括微信)。 这里简单写一下微信登录的过程。
一些资料,来自微信官方: 开发前(前后端)必读资料: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN
必知概念:
- 什么是授权临时票据(code)? 答:第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。
- access_token 第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等
开发(后端)
-
客户端呼起微信SDK授权,微信SDK会返回票据(code)
-
(重点)客户端使用此票据(code)向游戏服务器请求登录,KBEngine会将此登录转发到 interface app(注意在配置文件中设置好将数据转发到interface) a.配置文件修改 kbengine_defs.xml 中的 --> 模块。如果你使用自己项目中的配置时则在你项目中的kbengine.xml中的 -- 模块。 b.将票据(code)通过登录接口传递给服务器 推荐将票据(code)作为帐号。移动设备推荐将唯一设备码作为密码,PC设备推荐生成UUID作为密码。密码在此处意义并不大,只是为了满足引擎调用。或者作你需析处理(比如统计) b.dbmgr转发登录请求到interface app时,会触发接口 interface\kbemain.py ---> onRequestAccountLogin 你需要在此接口接收票据(code)并做后续处理;
-
找微信验证票据(code)并获取access_token 在interface\kbemain.py ---> onRequestAccountLogin接口中: a. 取到票据(code)后(即onRequestAccountLogin接口第一个参数,之前在客户端的时候使用票据代替帐号了),需要 通过code获取access_token
-
获取微信用户信息 到这里后有两种做法,一种是服务器进行,一种是客户端进行。 首先必须要了解微信的两种帐号ID的意义。 openid:在第3步请求返回access_tonke的时候会同时返回微信用户在此应用(你的游戏在微信中叫应用)的帐号,即openid。 uniodid:需要单独调用接口请求获取。当你同一个微信后台帐号申请了多个游戏(应用)的时候,同一个微信用户进行你这多个游戏(应用)的时候,你可以通过uniodin来识别他们。 比如微信用户 小明,进入了游戏A和游戏B。 此时小明在游戏A中的openid可能是'xm12311111',uniodid可能是'xm99999999' 在游戏B中的openid可能是'mmm132123',uniodid一定是'xm99999999' 根据你的项目需求作选择吧。
方法1客户端获取用户信息:适用于只记录openid的游戏(应用),并且有自己的角色命名规则或者角色命名不重要不敏感的游戏 a. 当服务器收到微信返回的access_tonke以后,调用KBEngine.accountLoginResponse(票据, 帐号可以是openid或者你自己体系中生成的帐号只要你能和openid关联起来, 客户端请求时所附带的数据可将数据转发第三方平台在此提供对其进行修改的机会, KBEngine.SERVER_SUCCESS) 让用户在客户端登录成功并且已经和你的数据库中的数据关联起来了(不用过多关心,引擎会自动完成)
b. 登录完成后客户端自行调用公用步骤的接口获取呢称、头像、性别等并同步给服务器 ps.在这里不推荐将获取到的uniodid再上传给服务器记录,因为容易被恶意作假 方法2服务器获取用户信息:适用于全部游戏(应用) 这里也有两种方法。 a方法:开发一个公用的微信用户信息中心实体(base),用来存储授权登录成功获取的,一但用户授权成功后即调用公用步骤获得的用户信息,并且通过Poller.py类似的服务发送到这个公用的微信用户信息中心实体(base)存储起来并且调用KBEngine.accountLoginResponse(票据, 帐号可以是unionid或者openid或者你自己体系中生成的帐号只要你能和openid关联起来, 客户端请求时所附带的数据可将数据转发第三方平台在此提供对其进行修改的机会, KBEngine.SERVER_SUCCESS) 让用户在客户端登录成功并且已经和你的数据库中的数据关联起来了(不用过多关心,引擎会自动完成)。待此帐号实体真正创建成功后再从公用的微信用户信息中心实体(base)将数据取走并设置 b方法:先调用KBEngine.accountLoginResponse(票据, 帐号可以是unionid或者openid或者你自己体系中生成的帐号只要你能和openid关联起来, 客户端请求时所附带的数据可将数据转发第三方平台在此提供对其进行修改的机会, KBEngine.SERVER_SUCCESS) 让用户在客户端登录成功并且已经和你的数据库中的数据关联起来了(不用过多关心,引擎会自动完成),然后待此帐号实体真正创建成功后在合适的时机(自行进行选择),再由帐号实体分别去调用公用步骤获得的用户信息并设置
公用步骤: