uniapp微信小程序手机号一键登录获取手机号,获取openid

网上翻了很多都是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,
		
	}
}
相关推荐
2501_916008895 小时前
iOS 性能测试的深度实战方法 构建从底层指标到真实场景回放的多工具测试体系
android·ios·小程序·https·uni-app·iphone·webview
项目題供诗6 小时前
微信小程序黑马优购(项目)(二)
微信小程序·小程序
计算机徐师兄12 小时前
Java基于SpringBoot的足球队管理平台小程序【附源码、文档说明】
微信小程序·小程序·足球队管理平台小程序·java足球队管理平台小程序·足球队管理微信小程序·足球队管理平台·jav足球队管理小程序
笨笨狗吞噬者17 小时前
【uniapp】小程序实现自由控制组件JSON文件配置
vue.js·微信小程序·vite
2501_9159090617 小时前
iOS APP 抓包全流程解析,HTTPS 调试、网络协议分析与多工具组合方案
android·ios·小程序·https·uni-app·iphone·webview
2501_9151063218 小时前
游戏上架 App Store 的技术流程解析 从构建到审核的全流程指南
游戏·macos·ios·小程序·uni-app·cocoa·iphone
行云流水6261 天前
uniapp pinia实现数据持久化插件
前端·javascript·uni-app
zhangyao9403301 天前
uniapp动态修改 顶部导航栏标题和右侧按钮权限显示隐藏
前端·javascript·uni-app
2501_916007471 天前
iOS 压力测试的工程化体系,构建高强度、多维度、跨工具协同的真实负载测试流程
android·ios·小程序·uni-app·cocoa·压力测试·iphone
千寻技术帮1 天前
50035_基于微信小程序的民宿管理系统
微信小程序·源码·ppt·源代码管理·项目文档·民宿