微信登录
1.获取微信用户绑定的手机号,需先调用wx.login
接口。
因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。
微信官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。
1.1 使用方法
需要将 button
组件 open-type
的值设置为 getPhoneNumber
,当用户点击并同意之后,可以通过 bindgetphonenumber
事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key
以及 app_id
进行解密获取手机号。
注意: 在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
1.2 代码示例
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
<script>
Page({
getPhoneNumber (e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
</script>
1.3 返回参数说明
参数 | 类型 | 说明 | 最低版本 |
---|---|---|---|
encryptedData | String | 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法 | |
iv | String | 加密算法的初始向量,详细见加密数据解密算法 | |
cloudID | string | 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据 | 基础库 2.8.0 |
获取得到的开放数据为以下 json 结构:
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp": TIMESTAMP
}
}
参数 | 类型 | 说明 |
---|---|---|
phoneNumber | String | 用户绑定的手机号(国外手机号会有区号) |
purePhoneNumber | String | 没有区号的手机号 |
countryCode | String | 区号 |
2.开放接口—登录— wx.login(Object object)
以 Promise 风格 调用:不支持
小程序插件:支持,需要小程序基础库版本不低于 2.3.1
在小程序插件中使用时,需要在用户信息功能页中获得用户授权之后调用。否则将返回 fail。详见 用户信息功能页
微信 Windows 版:支持
微信 Mac 版:支持
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid
)、微信开放平台帐号下的唯一标识(unionid
,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key
)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见 小程序登录。
2.1 参数 Object object
微信官方文档 :https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
timeout | number | 否 | 超时时间,单位ms | 1.9.90 | |
success | function | 否 | 接口调用成功的回调函数 | ||
fail | function | 否 | 接口调用失败的回调函数 | ||
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
wx.login({
success (res) {
if (res.code) {
//发起网络请求 code string 用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid、unionid、session_key 等信息
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})