APP微信登录

微信,QQ等第三方登录在在App上很常见,便于用户快速登录。所以这篇文章说的是App如何调用微信登录实现功能;
以下的谈论项目框架不是原生开发,是以uni-app框架为背景的,但需要参考微信官方关于移动应用登录指南。而且涉及到的代码更多是前端代码,后端只是讲下流程。
uni-app框架本身通过h5Plus的封装是可以开发微信登录的,但这里参考的是微信官方的文档及h5Plus部分api所开发的。

大致流程:

1 客户端通过h5+的api获取到授权临时票据(code),传给服务端;
2 服务端通过code获取access_token,得到相应的参数,eg:openid,refresh_token等;

到这一步其实已经完成了登录过程。至于之后再获取用户个人信息时,由服务端去调用相关api获取;
流程看起来很简单,但前端还是存在一些坑,需要填下。

前端:

var aweixin=null;
var _this=this
plus.oauth.getServices(function(services){
    console.log(services)
    services.forEach((item)=>{
        if(item.id=='weixin'){
            aweixin = item;
        }
    })
        if(!aweixin){//没有取得微信登陆的服务
        uni.showToast({
            title:'当前环境不支持微信登录',
            icon:'none'
        })
        return;
    }
      if(!aweixin.authResult){//是否登录认证过
        aweixin.authorize((e)=>{
          console.log(e.code)
          //将这个code 传给服务端,服务端调用相关api做操作,进而自定义业务逻辑
        },(e)=>{
          uni.showToast({
            title:'用户取消授权',
            icon:'none'
          })
        },{scope:'snsapi_userinfo',state:'authorize',appid:''})
    }else{
        console.log('已经登录过了')
        uni.showToast({
            title:'请使用其他登录方式',
            icon:'none'
        })
    }
}, function(e){
    console.log(e)
    uni.showToast({
        title:'获取登录授权服务列表失败',
        icon:'none'
    })
});
用户退出登录

用户退出登录,还是需要调用h5+的api退出;否则可能会出现用户退出登录再登录时,会执行authResult已经执行登录过了的情况。

plus.oauth.getServices(function(services){
    console.log(services)
    if(services.length!=0){
        services.forEach(item=>{
                if(item.id=='weixin'){
                    item.logout(function(e){
                        console.log(e)
                    }, function(e){
                        console.log(e)
                    });
                }
        })
    }
})

以上的代码是前端的操作;

authorize函数的第三个参数在Android端是可以不用填的,在ios端也是可以实现授权登录的,但是APP Store在审核时,出现了问题,并没有走的第一个函数回调,而是执行第二个函数,具体原因不明,因为本人在多台设备上测试并没有复现 出bug。所以解决方法是加上第三个参数即可;

服务端:

服务端通过调用微信的api获取到openid,refresh_token ,access_token等;服务端要将access_token保存起来,2h有效期,过期后需要通过refresh_token进行刷新获取;
客户端在每一次登录时,服务端都是要获取用户的信息,然后插入到数据库中便于更新用户信息;

1 这块获取到的unionId不一定会有,如果开发者需要用unionId去做用户的判别,则需要再通过openid等参数调用api获取unionid;
2 服务端需要对access_token 进行过期的刷新,一般是提前5min重新刷新。

总结:

APP端的微信登录用h5+的api也是能开发的,但实际上并没有去直接跟微信服务器交互,调h5+的api能够直接获取到openid,unionID以及用户的信息,客户端载将这个数据提交给服务端,完成登录的操作;
但实际上,本人在开发时,问题很多,比如 authorize的方法,用户在每次授权弹窗时,会调用authorize两次,即用户需要授权两次才能执行接下来的进程;ios端是获取不到unionId,因为项目使用unionID做用户身份的识别。而且api所需要的appSecret是保存在客户端的,当然也可以保存在服务端,回传给客户端,但这样是比较麻烦或者保存在客户端不安全。
所以最好的方式是用微信文档的流程操作
要是有不对的地方,请大佬指教!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容