100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 调用QQ/微信/新浪微博 实现登录

调用QQ/微信/新浪微博 实现登录

时间:2023-06-15 16:30:25

相关推荐

调用QQ/微信/新浪微博 实现登录

调用QQ/微信/新浪微博的第三方登录接口(开发者端口)

官方文档写的很明确了,不过在这里总结一下,方便小白了解下具体接入流程和情况

总体大致流程:

其中:

1.微信登录可省去获取用户标识ID这一步,获取ID在获取token时即可获取

2.QQ第三步如果未开通unionid权限,是不会返回的,而默认返回的OPENID,无法保证跨应用的唯一!

3.新浪微博登录在获取token这一步可以返回用户UID,可根据不同业务情况考虑是否需要多调一个接口(区别是,token是时效性的,而code只能使用一次)

实现:

代码不用多说,都是直接调接口,写一个模拟调用接口的帮助类就好了。

(需要注意,微博获取access_token的接口,请求类型必须为post,参数以URL拼接的形式传递)

其他事项:

需注意,QQ返回参数格式的问题:

格式1:返回错误码:

callback( {"error":100010,"error_description":"redirect uri is illegal"} )

格式2:正常出参,exp:

access_token=1ACEE***4C8&expires_in=7776000&refresh_token=69C4***701

返回参数如需打包结果集,需自行处理,我的处理方案(欢迎拍砖):

(JsonHelper自行封装json转换工具类,fastjson/gson/jackson等等)

private static Map packResult(String jsonStr) {if ( logger.isDebugEnabled() ) {logger.debug("got an original param :{}", jsonStr);}if ( StringHelper.isEmpty(jsonStr) ) {logger.warn("got an error msg for null");return null;}//返回错误码,exp:callback( {"error":100010,"error_description":"redirect uri is illegal"} )else if ( jsonStr.startsWith("callback(") ) {//9 == "callback(".length()jsonStr = jsonStr.substring(9, jsonStr.lastIndexOf(")"));if ( logger.isDebugEnabled() ) {logger.debug("param after substring :{}", jsonStr);}return JsonHelper.getObjectByJSON(jsonStr, Map.class);}//正常出参,exp:access_token=1ACEE701****9A4C8&expires_in=7776000&refresh_token=69C45C*****082E0701else if ( !jsonStr.trim().startsWith("{") ) {Map dataParam = new HashMap();//each key & valueString[] items = jsonStr.split("&");for (String item : items) {String[] kv = item.split("=");if ( kv.length > 1 ) {// >=2dataParam.put(kv[0], kv[1]);}else if ( kv.length == 1 ) {logger.warn("get an error result.set null to the return value");dataParam.put(kv[0], null);}}return dataParam;}else {return JsonHelper.getObjectByJSON(jsonStr, Map.class);}}

其他:

实现接入第三方系统,拿到唯一ID做记录就可以了,关于获取用户信息这一步,是为了完善/补充注册用户的信息,实现智能化操作而已,所以针对QQ登录,如果涉及到多个子应用,切记openid并不能做唯一约束,而要申请unionid接口。

目前本人只是测试阶段,微信和QQ已有实际生产应用,新浪微博并未实际生产应用,用户标识应该取得是:

QQ:unionid(需申请权限)

Wechat:unionid

Sina:uid

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。