uniapp实现微信登录或者QQ登录
无论是哪种登录, 都要用到uni.login
一. 获取服务供应商
在实现登录前,先查看一下可以使用哪种方式登录. 在APP平台, 可用的服务商, 是打包环境中配置的服务商, 与手机端是否安装了该服务商的APP没有关系
uni.getProvider({
service: 'oauth',
success: function (res) {
    console.log(res.provider);
}
});

service值说明
oauth: 授权登录
share: 分享
payment: 支付
push: 推送
success返回参数说明
service: 服务类型(string)
provider: 得到的服务供应商(Array)
provider在不同服务类型下可能的取值说明
service: oauth
- provider: weixin 微信登录
- provider: qq QQ登录
- provider: sinaweibo 新浪微博登录
- provider: xiaomi 小米登录
- provider: apple Apple登录
service: share
- provider: sinaweibo 新浪微博分享
- provider: qq QQ分享
- provider: weixin 分享微信消息、朋友圈及微信小程序
service: payment
- provider: alipay 支付宝支付
- provider: wxpay 微信支付
- provider: baidu 百度收银台
- provider: appleiap 苹果应用内支付
service: push
- provider: unipush
- provider: igexin 个推
- provider: mipush 小米推送

二. 使用uni.login登录

uni.login({
provider: 'weixin',
success: function (loginRes) {
    console.log("微信登录")
    console.log(loginRes)
    console.log(loginRes.code)
}
});

object参数说明
provider: 登录服务提供商(如果不设置则弹出登录列表选择界面)
scopes: 授权类型, 默认auth_base. auth_base(静默授权) / auth_auser(主动授权) / auth_zhima(芝麻信用)
timeout: 超时时间(单位ms)
success: 成功的回调函数
fail: 失败的回调函数
complete: 接口调用结束的回调函数(调用成功失败都会执行)

success返回参数说明

authResult: 登录服务商提供的登录信息, 服务商不同返回的结果不完全相同
code: 小程序专有, 用户登录凭证. 开发者需要在开发者服务器后台, 使用code换取openid和session_key等信息
errMsg: 描述信息

三. 获取用户信息

uni.login({
provider: 'weixin',
success: function (loginRes) {
console.log(loginRes);
// 获取用户信息
uni.getUserInfo({
provider: 'weixin',
success: function (infoRes) {
  console.log(infoRes);
}
});
}
});


object参数说明

provider: 登录服务提供商
withCredentials: 是否带上登录态信息
leng: 指定返回用户信息的语言, 默认为en, 中文为zh_CN
timeout: 超时时间, 单位ms
success:成功回调函数
fail:失败回调函数
complete:接口调用结束的回调函数

success返回参数说明

userInfo: 用户信息对象
rawData: 不包括敏感信息的原始数据字符串, 用于计算签名
signature: 使用sha1(rawData + sessionkey)得到字符串, 用于校验用户信息
encryptedData: 包括敏感数据在内的完整用户信息的加密数据,
iv: 加密算法的初始用量
errMsg: 描述信息

userInfo参数说明

nickName: 用户昵称
openId: 该服务商唯一用户标识
avatarUrl: 用户头像