微信小程序,微信授权手机号码

uniapp中index.vue:

复制代码
<template>
	<view class="content">
		<button 
		  open-type="getPhoneNumber" 
		  @getphonenumber="getPhoneNumber"
		  type="primary"
		>
		  授权手机号登录 
		</button>
	</view>
	
</template>

<script>
	export default {
		data() {
			return {

			}
		},
		onLoad() {
			 
		},
		methods: {
			getPhoneNumber(e) {
			if (e.detail.errMsg  === 'getPhoneNumber:ok') {
			      const { encryptedData, iv } = e.detail; 
				  
				wx.login({
				  	success: (res) => {
				  		console.log('====>'+res.code);
				  		wx.request({
				  		  url: 'http://localhost:8089/wx/user/wx-login',  // 替换为你的后端接口 
				  		  method: 'POST',
				  		  data: {
				  		    code: res.code, 
				  		    encryptedData,
				  		    iv 
				  		  },
				  		  success: (res) => {
				  			console.log(res);
				  		    // 3. 登录成功处理 
				  		    if (res.data.code  === 200) {
				  				console.log(res.data.msg);
				  		    }
				  		  }
				  		});
				  	}
				});
			      
			    } else {
			      console.error(' 获取手机号失败:', e.detail.errMsg); 
			    }
			  },
			

			
		}
	}
</script>

<style>

</style>

后端代码:

依赖

html 复制代码
<dependency>
	<groupId>com.github.binarywang</groupId>
	<artifactId>weixin-java-miniapp</artifactId>
	<version>4.3.0</version>
</dependency>

controller:

复制代码
    @PostMapping("/wx-login")
    public R<String> wxLogin(@RequestBody WxUserInfo userInfo) {
        return userInfoService.getPhoneNumber(userInfo);
    }

serviceImpl:

java 复制代码
    @Override
    public R<String> getPhoneNumber(WxUserInfo userInfo) {
        try {
            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(userInfo.getCode());
            log.info(session.getSessionKey());
            log.info(session.getOpenid());
            //TODO 可以增加自己的逻辑,关联业务相关数据
            WxMaPhoneNumberInfo phoneInfo = wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(), userInfo.getEncryptedData(), userInfo.getIv());
            String phoneNumber = phoneInfo.getPhoneNumber();

            return R.ok(phoneNumber);
        } catch (WxErrorException e) {
            log.error(e.getMessage(), e);
            return R.fail(e.toString());
        } finally {
            WxMaConfigHolder.remove();//清理ThreadLocal
        }
    }
复制代码
WxUserInfo
java 复制代码
package com.example.demo.domain.dto;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
public class WxUserInfo implements Serializable {
    private String appid;
    private String sessionKey;
    /**
     * 签名信息
     */
    private String signature;
    /**
     * 非敏感的用户信息
     */
    private String rawData;
    /**
     * 加密的数据
     */
    private String encryptedData;
    /**
     * 加密密钥
     */
    private String iv;

    private String code;
}
相关推荐
大不点wow41 分钟前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
阿里嘎多学长41 分钟前
2026-07-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
爱刷碗的苏泓舒1 小时前
C 语言 if-else 与 switch-case 分支语句对比
c语言·开发语言
-银雾鸢尾-1 小时前
C#中的泛型约束
开发语言·c#
Revolution611 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
雪碧透心凉_1 小时前
while 循环与循环嵌套
开发语言·python
乐观勇敢坚强的老彭2 小时前
信奥C++一维数组笔记
开发语言·c++·笔记
这就是佬们吗2 小时前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
asdzx672 小时前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf