微信小程序getPhoneNumber获取用户手机号攻略
微信小程序提供了getPhoneNumber接口,可以获取用户的手机号码。本文将详细介绍如何使用getPhoneNumber接口获取用户手机号,包括前置条件、调用流程、注意事项等。同时,本文还提供了两个示例说明,以帮助您更好地理解和应用这些技术。
前置条件
在使用getPhoneNumber接口获取用户手机号之前,需要满足以下条件:
-
小程序需要通过微信认证,且已经开通了获取用户手机号的权限。
-
用户已经授权小程序获取手机号的权限。
调用流程
使用getPhoneNumber接口获取用户手机号的流程如下:
- 在需要获取用户手机号的地方,调用wx.login接口获取用户的code。
wx.login({
success: res => {
if (res.code) {
// 将code发送给后台服务器
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
- 在后台服务器中,使用code调用微信的接口获取session_key和openid。
``
https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`
const https = require('https')
const appid = 'your_appid'
const secret = 'your_secret'
const code = 'user_code'
const url =
https.get(url, (res) => {
let rawData = ''
res.on('data', (chunk) => {
rawData += chunk
})
res.on('end', () => {
const sessionData = JSON.parse(rawData)
const sessionKey = sessionData.session_key
const openid = sessionData.openid
// 将session_key和openid发送给小程序前端
})
})
```
- 在小程序前端,调用wx.getUserInfo接口获取用户的加密数据和iv。
wx.getUserInfo({
success: res => {
const encryptedData = res.encryptedData
const iv = res.iv
// 将encryptedData和iv发送给后台服务器
}
})
- 在后台服务器中,使用session_key、encryptedData和iv调用微信的接口解密用户的手机号。
```
const crypto = require('crypto')
const sessionKey = 'your_session_key'
const encryptedData = 'user_encrypted_data'
const iv = 'user_iv'
const decipher = crypto.createDecipheriv('aes-128-cbc', Buffer.from(sessionKey, 'base64'), Buffer.from(iv, 'base64'))
let decrypted = decipher.update(Buffer.from(encryptedData, 'base64'))
decrypted = Buffer.concat([decrypted, decipher.final()])
const phoneNumber = JSON.parse(decrypted.toString()).phoneNumber
// 将phoneNumber发送给小程序前端
```
- 在小程序前端,获取到用户的手机号。
wx.showModal({
title: '手机号',
content: phoneNumber,
showCancel: false
})
注意事项
在使用getPhoneNumber接口获取用户手机号时,需要注意以下事项:
-
用户必须授权小程序获取手机号的权限,否则无法获取手机号。
-
获取用户手机号的过程需要在后台服务器中进行,小程序前端只能获取到加密数据和iv。
-
解密用户手机号的过程需要使用session_key、encryptedData和iv,其中session_key只能在后台服务器中获取。
示例说明
示例1:获取用户手机号并显示
以下是获取用户手机号并显示的示例:
- 在UI界面中添加一个Button控件。
<button type="primary" bindtap="getPhoneNumber">获取手机号</button>
- 在Page中添加getPhoneNumber方法,调用wx.login接口获取用户的code,并将code发送给后台服务器。
getPhoneNumber: function () {
wx.login({
success: res => {
if (res.code) {
wx.request({
url: 'https://your_server.com/get_session_key',
data: {
code: res.code
},
success: res => {
const sessionKey = res.data.session_key
const openid = res.data.openid
// 将session_key和openid保存在本地
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
- 在Page中添加getPhoneNumber方法,调用wx.getUserInfo接口获取用户的加密数据和iv,并将加密数据和iv发送给后台服务器。
getPhoneNumber: function () {
wx.getUserInfo({
success: res => {
const encryptedData = res.encryptedData
const iv = res.iv
wx.request({
url: 'https://your_server.com/decrypt_phone_number',
data: {
session_key: sessionKey,
encrypted_data: encryptedData,
iv: iv
},
success: res => {
const phoneNumber = res.data.phone_number
wx.showModal({
title: '手机号',
content: phoneNumber,
showCancel: false
})
}
})
}
})
}
示例2:获取用户手机号并保存
以下是获取用户手机号并保存的示例:
- 在UI界面中添加一个Button控件。
<button type="primary" bindtap="getPhoneNumber">获取手机号</button>
- 在Page中添加getPhoneNumber方法,调用wx.login接口获取用户的code,并将code发送给后台服务器。
getPhoneNumber: function () {
wx.login({
success: res => {
if (res.code) {
wx.request({
url: 'https://your_server.com/get_session_key',
data: {
code: res.code
},
success: res => {
const sessionKey = res.data.session_key
const openid = res.data.openid
// 将session_key和openid保存在本地
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
- 在Page中添加getPhoneNumber方法,调用wx.getUserInfo接口获取用户的加密数据和iv,并将加密数据和iv发送给后台服务器。
getPhoneNumber: function () {
wx.getUserInfo({
success: res => {
const encryptedData = res.encryptedData
const iv = res.iv
wx.request({
url: 'https://your_server.com/decrypt_phone_number',
data: {
session_key: sessionKey,
encrypted_data: encryptedData,
iv: iv
},
success: res => {
const phoneNumber = res.data.phone_number
wx.setStorageSync('phone_number', phoneNumber)
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
})
}
})
}
})
}
- 在需要使用用户手机号的地方,调用wx.getStorageSync方法获取用户手机号。
const phoneNumber = wx.getStorageSync('phone_number')
console.log('用户手机号:' + phoneNumber)
结论
使用getPhoneNumber接口获取用户手机号需要满足一定的前置条件,并且需要在后台服务器中进行解密操作。通过本文的介绍,您应该已经了解了如何使用getPhoneNumber接口获取用户手机号,并掌握了两个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序getphonenumber获取用户手机号 - Python技术站