小程序雲開發解析獲取手機號
// 雲函數入口文件
const cloud = require('wx-server-sdk')
const request = require('request')
const jwt = require('jsonwebtoken')
cloud.init()
const db = cloud.database()
const crypto = require('crypto')
// 雲函數入口函數
exports.main = async (event, context) => {
/**code是通過wx.login獲取的。
**iv,encryptedData通過微信開放能力getphoneNumber獲取的
**/
const { iv, encryptedData, userid, code } = event
const wxContext = cloud.getWXContext()
const openid = wxContext.OPENID
const appid = wxContext.APPID
const unionid = wxContext.UNIONID
let phoneNumber
phoneNumber = await mobileDecode({ iv, encryptedData, code, appid })
console.log('phone' + phoneNumber);
return phoneNumber;
}
async function requestSync(url) {
return new Promise((resolve, reject) => {
try {
request(url, (err, resp, body) => {
if (err) {
return reject(err)
}
return resolve(body)
})
} catch (e) {
return reject(e)
}
})
}
async function mobileDecode(data) {
const { iv, encryptedData, code, appid } = data
const secret = '897b5234984dedc373ed0fd300e5c5d9'
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`
const req = await requestSync(url)
const session = JSON.parse(req)
const sessionKey = session.session_key
// console.log(sessionKey)
const crypted = Buffer.from(encryptedData, 'base64')
const key = Buffer.from(sessionKey, 'base64')
const i = Buffer.from(iv, 'base64')
const decipher = crypto.createDecipheriv('aes-128-cbc', key, i)
let decoded = decipher.update(crypted, 'base64', 'utf8')
decoded += decipher.final('utf8')
const mobile = JSON.parse(decoded).phoneNumber
console.log(mobile);
return mobile
}
————————————————
版權聲明:本文爲CSDN博主「愛上彗星的尾巴」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_38698753/article/details/100763550