网上翻了很多都是app版本的,不适用于小程序
<!-- 微信授权登录全程代码实现 -->
<template>
<view>
<view>
<!-- isloding是用来记录当前用户是否是第一次授权使用的 -->
<view>
<view class="header">
<image src="/static/logo.png"></image>
</view>
<view class="content">
<view>申请获取以下权限</view>
<text>获得你的公开信息(昵称,头像、地区等)</text>
</view>
<button
@click="login"
@getphonenumber="getPhone"
open-type="getPhoneNumber"
>
手机号授权登录
</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
code: "",
openid: "",
};
},
methods: {
// 获取手机号
getPhone(e) {
console.log(e);
uniCloud
.callFunction({
name: "login",
data: {
code: e.detail.code,
},
})
.then((res) => {
console.log(res, "ressssssss");
// 在这里就可以获取到手机号还有token了
});
},
// 获取code
login() {
let that = this;
wx.login({
success(res) {
console.log(res, "code---");
// that.code = res.code;
let appid = "你的appid";
let secret = "你的secret ";
let url =
"https://api.weixin.qq.com/sns/jscode2session?appid=" +
appid +
"&secret=" +
secret +
"&js_code=" +
res.code;
uni.request({
url: url, // 请求路径
success: (result) => {
console.log(result, "openid00000000000");
that.openid = result.data.openid;
},
});
},
});
},
},
};
</script>
<style>
.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;
}
.bottom {
border-radius: 80rpx;
margin: 70rpx 50rpx;
font-size: 35rpx;
}
</style>
因为我用的是云函数 所以如下 云函数js是这样的(记得上传部署)
// 云函数
exports.main = async function (event,context) {// 获取token
const appid = '你的appid'
const secret = '你的secret '
const res = await uniCloud.httpclient.request('https://api.weixin.qq.com/cgi-bin/token', {
method: 'GET',
data: {
grant_type: 'client_credential',
appid: appid,
secret: secret,
},
dataType: 'json',
header: {
'content-type': 'application/json'
}
})
// 获取用户手机号
let ress = {}
if (res && res.data.access_token) {
ress = await uniCloud.httpclient.request(
'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=' + res.data
.access_token, {
method: 'post',
data: {
code: event.code,
},
dataType: 'json',
contentType: 'json', // 指定以application/json发送data内的数据
})
}
// 执行入库等操作,正常情况下不要把完整手机号返回给前端
return {
code: event.code,
message: res.data.access_token,
data: ress.data,
}
}