b***@qq.com
b***@qq.com
  • 发布:2018-02-28 16:37
  • 更新:2019-10-09 12:13
  • 阅读:5675

QQ第三方登陆的那些坑

分类:HTML5+

APP开发接近尾声.却在即将发布的时候发现APP 的QQ登陆授权凭证 和WEB版本无法共用...要了亲命了...于是各种搜索..下面吧解决办法分享给大家.

  1. 首先,要用发一个邮件 给腾讯互联平台客服 connect@qq.com,说明要APP共用数据,进行应用 APPID合并 分别提供WEB/手机应用的 APPID/appkey.并提供网站的ICP备案查询截图以及帐号认证的营业执照什么的.并且告知,以某一个APPID的用户数据为原有的主应用.

  2. 如果上述的邮件进行正常.会受到客服回信.已经批准什么的 邮件还会说明启用共用unionid .... 并且可通过接口进行获取:https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1....

不过HB 的第三方登陆,QQ授权并未封装获取unionid 的方法.所以,要自己再次获得授权用户的unionid..好在这部分简单得很


/*  
 * 获取QQ登陆unionID  
 */  
function getQQunionID(ACCESSTOKEN,callback)  
{     
    mui.ajax({  
        url: "https://graph.qq.com/oauth2.0/me?access_token="+ACCESSTOKEN+"&unionid=1",  
        async: true,  
        crossDomain: true, //强制使用5+跨域  
        type: 'get',          
        timeout: 50000,  
        success: function(data) {             
                if(data.indexOf("error")<=-1)  
               {  
                eval(data);  
               }  
               else{  
                mui.toast("QQ unionID凭证获取错误:"+data);  
               }  
        },  
        error: function(xhr, type, errorThrown) {  
            mui.toast("QQ unionID凭证网络访问错误:"+type);  
        }  
    });  
}  

拿去用吧:ACCESSTOKEN 是用户的ACCESSTOKEN,callback 回调方法...
这个接口访问的时候返回的是字符串:callback({appid:XXX,openid:XXX,unionid:XXX}); 所以直接eval......

看到此不要高兴得太早,如果你原来有应用的APP并且有留存用户数据...那么好了 OPENID 还是每个APPID 不同的 ,只有unionid 才会相同....怎么解? 经过各种折腾...才知道 再次回复腾讯邮件 说明需要 申请 存量用户 转为 unionid 的临时接口, 再次提供 临时接口使用的APPID 和APPKEY...然后就等着回复把..

最后怎样?写个程序 按照再次回复中临时接口的使用方法,遍历所有每个用户的原有OPENID ,再查询到新的 unionid,然后更新原有登陆凭证...

最后别忘记 如果原有登陆是WEB端...要更改登陆逻辑.需要再次获取 unionid 并储存.

这样才能保证WEB APP 等等登陆凭证的统一性.....

虽然以上解决看起来很简单.不过在网上确实没有一篇文章进行系统性的说明....都是本人一步步查..问客服才最终走到最后一步,记录下来 希望能够帮助遇到此问题倒霉程序员们吧....

3 关注 分享
v***@163.com 小摸羊 6***@qq.com

要回复文章请先登录注册

XHH

XHH

请问HB没有返回code,那么您是怎么获取到access_token的?
2019-10-09 12:13
5***@qq.com

5***@qq.com

留个眼
2019-07-24 15:06
无名者

无名者

您好,QQ授权登录mui跟PC的有什么区别啊,我第一次写
2018-11-06 14:04
3***@163.com

3***@163.com

虽然暂时还没用到,先mark一下
2018-08-15 18:06
v***@163.com

v***@163.com

厉害了我的哥!
mark一下!
2018-02-28 20:45