微信报错
my.js? [sm]:35 调用云函数失败: Error: cloud.callFunction:fail Error: errCode: -601034 | errMsg: 没有权限,请先开通云开发或者云托管 (callId: 1722384784328-0.7449541406839615) (trace: 8:13:4 start->8:13:4 system error (Error: errCode: -601034 | errMsg: 没有权限,请先开通云开发或者云托管), abort)
at R (<anonymous>:1:245532)
at <anonymous>:1:280548(env: Windows,mp,1.06.2405020; lib: 3.5.0)
vue文件
<template>
<button open-type="getPhoneNumber" @getphonenumber="handleGetPhoneNumber">获取手机号</button>
</template>
<script setup>
const handleGetPhoneNumber = (e) => {
// 检查用户是否同意授权
if (e.detail.errMsg === 'getPhoneNumber:ok') {
const encryptedData = e.detail.encryptedData; // 获取加密数据
const iv = e.detail.iv; // 获取初始向量
// 先初始化云开发环境
wx.cloud.init({
env: 'your-env-id', // 替换为你的云环境 ID
traceUser: true, // 是否在将用户访问记录到用户管理中,在控制台中可见
});
// 获取 sessionKey,通常在用户登录后获得
wx.login({
success: (res) => {
// 假设你有一个后端接口来获取 sessionKey
wx.cloud.callFunction({
name: 'user', // 调用云函数
data: {
encryptedData: encryptedData,
iv: iv,
sessionKey: wx.getStorageSync('sessionKey') // 从本地存储获取 sessionKey
},
success: (res) => {
if (res.result.success) {
console.log('解密后的手机号:', res.result.data.phoneNumber);
// 处理解密后的手机号
} else {
console.error('解密失败:', res.result.error);
}
},
fail: (err) => {
console.error('调用云函数失败:', err);
}
});
}
});
} else {
console.log('用户拒绝授权手机号');
}
};
</script>
<style scoped>
/ 可以添加样式 /
</style>
云端服务代码
const cloud = require('wx-server-sdk');
const crypto = require('crypto');
cloud.init({
env: 'env-00jxh1dsnrnx', // 替换为你的云环境 ID
});
exports.main = async (event, context) => {
const { encryptedData, iv, sessionKey } = event;
// 解密手机号
try {
const decryptedData = decryptData(encryptedData, iv, sessionKey);
return { success: true, data: decryptedData };
} catch (err) {
return { success: false, error: err.message };
}
};
// 解密函数
function decryptData(encryptedData, iv, sessionKey) {
// base64 decode
const sessionKeyBuffer = Buffer.from(sessionKey, 'base64');
const encryptedDataBuffer = Buffer.from(encryptedData, 'base64');
const ivBuffer = Buffer.from(iv, 'base64');
// decrypt
const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKeyBuffer, ivBuffer);
let decoded = decipher.update(encryptedDataBuffer, 'binary', 'utf8');
decoded += decipher.final('utf8');
decoded = JSON.parse(decoded);
// 校验数据的来源
if (decoded.watermark.appid !== cloud.getWXContext().APPID) {
throw new Error('Invalid Buffer');
}
return decoded;
}
自己不懂这个是什么也找不到教程,我很想要开发自己的业务,麻烦好心人帮帮我
3***@qq.com (作者)
但是我是uniapp
2024-07-31 10:04
3***@qq.com (作者)
他和微信写的也不一样
2024-07-31 10:05
3***@qq.com (作者)
你可以帮我解决获取手机号事件: {type: "getphonenumber", timeStamp: 16431, target: {…}, currentTarget: {…}, mark: {…}, …}
my.js? [sm]:12 encryptedData: cs2excyGDuFxL/mzfGD5eoscyZrAVDNb3yQrEck+KZTMpBTDRhxM2RNpb/NzEc/U09rXT0e04ejaO6gAg/JKjW0DqGHjWEDmV6enxxdIO6EEwKUG4odWuuEzdefq8xNV/jKnNCWGl0Ae1MNybUMS0wD3mFsquwIs5e9t62qGF/ybEAePYntaMxZsUirmipKUW/9mmPquOOX3/OmmDB1BPQ==
my.js? [sm]:13 iv: sYnJdJpb4/mP6orILfos/A==
my.js? [sm]:22 云函数返回: {result: {…}}result: error: "解码失败: Session Key 未获取"proto: Objectproto: Object
my.js? [sm]:27 解码失败: 解码失败: Session Key 未获取(env: Windows,mp,1.06.2405020; lib: 3.5.0)吗,我以后做大了肯定会感谢你的
2024-07-31 10:08
DCloud_UNI_yuhe
回复 3***@qq.com: 你是用的uniCloud吗?你这不是微信云开发?
2024-07-31 10:40
DCloud_UNI_yuhe
回复 DCloud_UNI_yuhe: 微信云开发我记得都不用Session Key 直接就能获取吧
2024-07-31 10:40