ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**微信小程序登录** 流程: 1.判断有没有登录,如果已登录,且phone手机号存在,这个是正常登录了。 2.没登录时,执行以下1 2 3步骤完成,用户注册。 因为国内要求使用系统必须要有手机号,所以在1.授权取得openid,2.绑定手机号,3绑定头像、昵称(此处目录要求用户授权绑定)。这样才是完整的注册好帐号了。 3.注册后,下次再登录时,就不会再出现授权手机号了。但是可以重新更新头像、昵称。 1.获取登录授权,此时通过接口 ~~~ /plugins/login/api/v1_xcx.php ~~~ 获取openid ,但无昵称、头像信息 2.绑定手机号 ~~~ /plugins/login/api/v1_xcx_bind_phone.php ~~~ 请求参数如: ~~~ { api_user_id:"10" cloudID:"54_SKc-W9BNevJQlay7XCCTdh9Jas6u2jE2w5v8Pt2BQdD_fmitNlzM0pVYdOM" code:"783a4fff7b880f39d80ebdfda2f9500b2546448991f27533070b9c70725bde15" encryptedData:"qIUxKJEOtA+7pQw7QgS0kYVkMnzAbOZBv4Feorzie6Kr9L2Z3tzQ/4d1QJPBL0wO7GmehTD+U2cH9Tatv/CFLiA4wL5X/7jMvoFvkDJmmJ6qz3VfHBnxuaZNdFzxJH/gEfiEjg+AumLGjNvQnlhiRC1txK7iwLp0mYdsrBlT76tlHC9UidNyR08JVPIDb5y2YAy/KiTtw+MbXxDpaLJ4mA==" errMsg:"getPhoneNumber:ok" from:"wx_xcx" iv:"eeje5FQYyNoZjwT0yVvBEg==" openid:"ow3KF4pP45NaYotCZXUKT3L2YphI" } ~~~ 3.绑定头像、昵称 ~~~ /plugins/login/api/v1_update_info.php ~~~ 最重要的是`onLoad`里面要先获取用户信息, 如果有用户信息说明不需要登录了。 特别注意是以手机号来判断。没有手机号,就一定要用户绑定手机号。否则不能正常使用信息。 ~~~ /api/v1_user_info.php ~~~ 以下是演示代码 : ~~~ <template> <view class="page"> <button plain v-if="step == 1" @click="login_wx">1.获取登录授权</button> <button v-if="step == 2 || !user.phone" plain open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">2.绑定手机号,完成注册</button> <view @click="getAvatar"> <cl-avatar shape="square" :src="avatar_url" :size="90"></cl-avatar> {{ nick_name }} </view> <button @click="logout">退出</button> </view> </template> <script> var _this; export default { data() { return { avatar_url: '', has_avatar_url: false, nick_name: '', is_login: false, flag: '', step:"", user:{} }; }, onLoad() { _this = this; this.load(); }, methods: { //退出 logout() { uni.clearStorageSync('logined'); uni.clearStorageSync('user_id'); _this.is_login = false; this.load(); }, //判断有没有登录 load() { _this.ajax(_this.config.user.info, {}).then(res => { if (res.code == 0) { _this.is_login = true; _this.nick_name = res.data.nick_name || res.data.nickname; _this.user = res.data if (res.data.avatar_url) { _this.avatar_url = res.data.avatar_url; _this.has_avatar_url = true; } } else { _this.step = 1 _this.avatar_url = ''; _this.nick_name = '点击登录'; _this.has_avatar_url = false; } }); }, //第二步:绑定手机号 getPhoneNumber(e) { if (e.detail.errMsg == 'getPhoneNumber:ok') { _this.ajax(_this.config.xcx_login.bind_phone, e.detail).then(res => { if (res.code == 0) { //绑定手机号成功。可以添加一些代码 _this.step = "" _this.load(); } }); } }, getAvatar(){ uni.getUserProfile({ desc: '用于完善用户信息', success: res1 => { console.log('用于完善用户信息'); let d = JSON.parse(res1.rawData); _this.ajax(_this.config.xcx_login.update_info, d).then(res => { if (res.code == 0) { _this.load(); } }); }, fail: err => { console.log(err); } }); }, //第一步:获取用户头像、昵称、openid async login_wx() { uni.showLoading({ title: '登录中' }); let login = await new Promise((resolve, reject) => { uni.login({ provider: 'weixin', success: function(res) { _this .ajax(_this.config.xcx_login.login, { code: res.code }) .then(res => { uni.hideLoading(); if (res.code == 0) { uni.setStorageSync('user_id', res.data.id); uni.setStorageSync('openid', res.data.openid); //没有帐号时弹出绑定手机号 if (!res.data.phone) { _this.step = 2 console.log("需要绑定手机号") _this.$forceUpdate() //这里要弹出绑定手机号 resolve(0); } else { console.log("不需要绑定手机号") _this.step = "" _this.load(); resolve(1); } } }); } }); }); } } }; </script> <style></style> ~~~