1,小程序的登录流程
使用uniapp,调用uni.login()返回code,将此code传入传入后端接口,获取对应的openID或者自己公司平台的id。调用uni.setStorageSync()将id传入存储中,方便在其他页面调用或者作为接口的请求头。
onLoad() {
// 静默登录
uni.login({
provider: 'weixin',
success: (res) => {
this.code = res.code;
uni.showLoading({
title: '授权中'
})
if (res.errMsg == 'login:ok') {
uni.request({
url: '你需要访问的url' ,
method: 'GET',
header: {
'Content-Type': 'application/json;charset=UTF-8'
},
data
}).then((res) => {
// console.log(res, 777);
uni.hideLoading();
//获取到 openid 和 session_k后,自己的逻辑
console.log('授权登录', res[1].data);
// DoSomeThing.................
});
}
},
});
},
2,获取头像和昵称
之前是通过uni.getUserProfile()来获取用户的头像和昵称,现在只能返回一个默认的头像和昵称。可以看官网的描述:头像昵称填写 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html
获取头像需要将 button 组件 open-type
的值设置为 chooseAvatar
,当用户选择需要使用的头像之后,可以通过 bindchooseavatar
事件回调获取到头像信息的临时路径。
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<image class="avatarURL" mode="aspectFill" :src="avatar1?avatar1:defaultAvatarUrl"></image>
</button>
// 获取头像
onChooseAvatar(e) {
// console.log(e);
const {avatarUrl} = e.detail // 此返回的路径为临时路径,需转换为永久路径保存使用
},
获取永久头像可以浏览该文章:
微信小程序上传头像和昵称持久化保存_RedEric的博客-CSDN博客
获取昵称需要将 input 组件 type
的值设置为 nickname
,当用户在此input进行输入时,键盘上方会展示微信昵称。
<input type="nickname" class="nickName" placeholder="请输入昵称" v-model="nickname1" @blur="getNickname" />
// 获取昵称
getNickname(e) {
console.log(e.detail.value);
},
3,获取手机号
获取手机号需要将 button 组件 open-type
的值设置为 getPhoneNumber
,当用户点击并同意之后,可以通过 bindgetphonenumber
事件回调获取到动态令牌code
,然后把code
传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code
来换取用户手机号。每个code
有效期为5分钟,且只能消费一次。
获取手机号,只能在企业级的小程序能用,因为要去做微信认证,需要交300块作为认证费用。
<button open-type="getPhoneNumber" type="primary" @getphonenumber="getPhoneNumber">唤起授权手机号</button>
// 获取手机号
getPhoneNumber(e) {
console.log(e);
if (e.detail.errMsg == "getPhoneNumber:ok") { // 用户允许或去手机号
uni.request({
url: "你要访问的url",
method: "GET",
header: {
'itmp-token': this.token // 这里是自己写的请求头,用作验证
},
success: (res) => {
console.log(res);
if (res.data.errorinfo == null) {
console.log(res.data) // 这个里面就有手机号了
uni.setStorageSync('phoneNumber', res.data.data)
this.phoneNumber = res.data.data
}
}
})
}
},