一、微信登录说明
1.端内向微信请求信息,取到微信客户端返回信息:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
2.服务器拿到这些信息向微信服务器请求获取unionId,请求地址:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
拿到的结果为:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
说明:其中其中unionId是服务器针对此开发者账户来说唯一,服务器用此id作为微信账户在自己平台的唯一标识(如果该开发者账户有多个应用,可以做到服务器后台统一)。
备注:开发者平台
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=&lang=zh_CN
二、QQ登录
1.端内向服务器请求,从QQ客户端得到:
{
"ret":0,
"pay_token":"xxxxxxxxxxxxxxxx",
"pf":"openmobile_android",
"expires_in":"7776000",
"openid":"xxxxxxxxxxxxxxxxxxx",
"pfkey":"xxxxxxxxxxxxxxxxxxx",
"msg":"sucess",
"access_token":"xxxxxxxxxxxxxxxxxxxxx"
}
2.服务器客户端发送的数据后,向qq后台请求unionId
https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
返回(注意不是json)
callback({
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unioid":"YOUR_UNIONID"
});
同样,unionId作为qq账号在自己平台的唯一标识。
三.封装微信和qq,向服务器汇报时数据统一为:
public class LoginAuthBean implements UnProguard{
public LoginType fromType;//微信、qq
public String accessToken;
public String openId;
public long expire;
public LoginAuthBean(LoginType type) {
this.fromType = type;
}
}