微信小程序授权登录和获取手机号功能(详细)(1)

// 展示本地存储能力

var logs = wx.getStorageSync(‘logs’) || []

logs.unshift(Date.now())

wx.setStorageSync(‘logs’, logs)

var that = this;

//获取用户本地是否是第一次进入新版本

var versions = wx.getStorageSync(‘versions’);

console.log(‘versions:’ + versions);

//判断是不是需要授权

if (versions == ‘1’){

// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

wx.getUserInfo({

success: function (res) {

that.globalData.userInfo = res.userInfo

console.log(that.globalData.userInfo)

},

fail: function () {

wx.redirectTo({

url: ‘…/wurui_house/pages/login/index’,

})

}

})

}else{

//未授权, 跳转登录页面

wx.redirectTo({

url: ‘…/wurui_house/pages/login/index’,

})

}

},

onShow: function () {

// console.log(getCurrentPages())

},

onHide: function () {

// console.log(getCurrentPages())

},

onError: function (msg) {

//console.log(msg)

},

util: require(‘we7/resource/js/util.js’),

tabBar: {

“color”: “#123”,

“selectedColor”: “#1ba9ba”,

“borderStyle”: “#1ba9ba”,

“backgroundColor”: “#fff”,

“list”: [

]

},

getLocationInfo: function (cb) {

var that = this;

if (this.globalData.locationInfo) {

cb(this.globalData.locationInfo)

} else {

wx.getLocation({

type: ‘gcj02’, // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标

success: function (res) {

that.globalData.locationInfo = res;

cb(that.globalData.locationInfo)

},

fail: function () {

// fail

},

complete: function () {

// complete

}

})

}

},

globalData: {

userInfo: null,

appid: “”,

appsecret: “”,

},

siteInfo: require(‘siteinfo.js’)

});

2.login登录页判断

(一)index.wxml

请依次允许获得你的公开信息及手机号码

{{AuthorizedLogin}}

{{UserPhone}}

请升级微信版本

(四)index.wxss

.header {

margin: 90rpx 0 90rpx 50rpx;

border-bottom: 1px solid #ccc;

text-align: center;

width: 650rpx;

height: 300rpx;

line-height: 450rpx;

}

.header image {

width: 200rpx;

height: 200rpx;

}

.content {

margin-left: 50rpx;

margin-bottom: 90rpx;

}

.content text {

display: block;

color: #9d9d9d;

margin-top: 40rpx;

}

/* .operBtn{

border-radius: 80rpx;

margin: 70rpx 50rpx;

font-size: 35rpx;

}

.operBtns{

background: #eef0ed !important;

border-radius: 80rpx;

margin: 70rpx 50rpx;

font-size: 35rpx;

color: #000300 !important;

} */

.hide{

border-radius: 80rpx;

margin: 70rpx 50rpx;

font-size: 35rpx;

display: none;

}

.show{

display: block;

/* background: #eef0ed !important; */

border-radius: 80rpx;

margin: 70rpx 50rpx;

font-size: 35rpx;

/* color: #000300 !important; */

}

(三)index.js

const app = getApp();

Page({

data: {

//判断小程序的API,回调,参数,组件等是否在当前版本可用。

canIUse: wx.canIUse(‘button.open-type.getUserInfo’),

isHide: false,

AuthorizedLogin: ‘授权登录’,

UserPhone: ‘手机号授权’,

lee: “”,

flag: true

},

onLoad: function() {

var that = this;

// 查看是否授权

//获取用户本地是否是第一次进入新版本

var versions = wx.getStorageSync(‘versions’);

if (versions == ‘1’) {

wx.getSetting({

success: function(res) {

if (res.authSetting[‘scope.userInfo’]) {

//调用共通的登录方法

app.util.getUserInfo(

function(userinfo) {

that.setData({

userinfo: userinfo

})

});

} else {

// 用户没有授权

// 改变 isHide 的值,显示授权页面

that.setData({

isHide: true

});

}

}

});

} else {

// 用户没有授权

// 改变 isHide 的值,显示授权页面

that.setData({

isHide: true

});

}

},

bindGetUserInfo: function(e) {

if (e.detail.userInfo) {

//用户按了允许授权按钮

var that = this;

let user = e.detail.userInfo;

// 获取到用户的信息了,打印到控制台上看下

console.log(“用户的信息如下:”);

console.log(user);

//授权成功后,通过改变 isHide 的值,让实现页面显示出来,把授权页面隐藏起来

that.data.lee

if (that.data.lee == ‘’) {

wx.showToast({

icon: “none”,

title: ‘请继续点击获取手机号’,

}),

that.setData({

isHide: true,

flag: (!that.data.flag),

lee: true

})

that.wxlogin();

} else if (!that.data.lee) {

wx.switchTab({

url: “/wurui_house/pages/index/index”

})

}

} else {

//用户按了拒绝按钮

wx.showModal({

title: ‘警告’,

content: ‘您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!’,

showCancel: false,

confirmText: ‘返回授权’,

success: function(res) {

// 用户没有授权成功,不需要改变 isHide 的值

if (res.confirm) {

console.log(‘用户点击了“返回授权”’);

}

}

});

}

},

wxlogin: function() { //获取用户的openID

var that = this;

//调用共通的登录方法

app.util.getUserInfo(

function(userinfo) {

that.setData({

userinfo: userinfo

})

});

},

getPhoneNumber: function(e) { //点击获取手机号码按钮

var that = this;

that.data.lee

if (that.data.lee == ‘’) {

wx.showToast({

icon: “none”,

title: ‘请先点击获取用户信息’,

})

return

} else {

wx.checkSession({

success: function(res) {

console.log(e.detail.errMsg)

console.log(e.detail.iv)

console.log(e.detail.encryptedData)

var ency = e.detail.encryptedData;

var iv = e.detail.iv;

var sessionk = that.data.sessionKey;

if (e.detail.errMsg == ‘getPhoneNumber:fail user deny’) {

wx.showModal({

title: ‘警告’,

content: ‘您点击了拒绝授权,部分功能无法使用!!!’,

showCancel: false,

confirmText: ‘返回授权’,

success: function(res) {

// 用户没有授权成功,不需要改变 isHide 的值

if (res.confirm) {

wx.setStorageSync(‘enws’, ‘1’);

wx.switchTab({

url: “/wurui_house/pages/index/index”

})

console.log(‘用户点击了“返回授权”’);

};

}

}),

that.setData({

modalstatus: true,

});

} else {

that.setData({

lee: false,

});

wx.switchTab({

url: “/wurui_house/pages/index/index”

})

//同意授权

var userinfo = wx.getStorageSync(‘userInfo’);

app.util.request({

‘url’: ‘entry/wxapp/saveusermobile’,

data: {

sessionid: userinfo.sessionid,

uid: userinfo.memberInfo.uid,

iv: iv,

encryptedData: ency

},

success: function(res) {

if (res.data.data.error == 0) {

console.log(‘success’ + res.data.data);

//用户已经进入新的版本,可以更新本地数据

wx.setStorageSync(‘versions’, ‘1’);

wx.setStorageSync(‘enws’, ‘2’);

} else {

//用户保存手机号失败,下次进入继续授权手机号

wx.setStorageSync(‘enws’, ‘1’);

console.log(‘fail’ + res.data.data);

}

},

fail: function(res) {

console.log(‘fail’ + res);

}

});

}

},

fail: function() {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
console.log(‘fail’ + res);

}

});

}

},

fail: function() {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-DVkBN7qu-1715243974814)]

[外链图片转存中…(img-1ABzwT6D-1715243974815)]

[外链图片转存中…(img-UylJcOlz-1715243974815)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用uniapp框架开发微信小程序进行授权登录获取用户手机号的代码: 1. 在项目根目录下的 `manifest.json` 文件中添加微信小程序授权登录的配置: ```json "mp-weixin": { "appid": "你的小程序appid", "scope": "scope.userInfo,scope.userPhoneContact", "settings": { "authSetting": { "scope.userInfo": true, "scope.userPhoneContact": true } } } ``` 2. 在需要进行授权登录的页面中添加以下代码: ```html <template> <button type="primary" @click="getUserInfo">授权登录</button> </template> <script> export default { methods: { getUserInfo() { uni.getUserProfile({ desc: '用于完善会员资料', lang: 'zh_CN', success: (res) => { uni.login({ success: (loginRes) => { uni.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: '你的小程序appid', secret: '你的小程序secret', js_code: loginRes.code, grant_type: 'authorization_code' }, success: (sessionRes) => { const { openid, session_key } = sessionRes.data uni.request({ url: 'https://api.weixin.qq.com/wxa/getphoneNumber', data: { encryptedData: res.encryptedData, iv: res.iv, sessionKey: session_key }, success: (phoneRes) => { console.log(phoneRes.data.phoneNumber) } }) } }) } }) } }) } } } </script> ``` 说明: - `getUserProfile` 方法用于获取用户信息,包括手机号。 - `uni.login` 方法用于获取临时登录凭证code。 - `uni.request` 方法用于向微信服务器发送请求,获取用户手机号。 - 在 `getUserProfile` 方法中,`desc` 参数用于描述授权窗口的文案,`lang` 参数用于设置授权窗口的语言。 - 在 `uni.request` 方法中,`encryptedData` 参数为加密数据,`iv` 参数为加密算法的初始向量,`sessionKey` 参数为临时登录凭证的会话密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值