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

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;
}
相关推荐
南境十里·墨染春水4 分钟前
C++ 笔记 多重继承 菱形继承(面向对象)
开发语言·c++·笔记
Albert Edison6 分钟前
【ProtoBuf 语法详解】选项 option
开发语言·c++·序列化·反序列化·protobuf
墨雪不会编程7 分钟前
C++容器适配器【困难篇】双向队列详解
开发语言·c++
笨笨饿9 分钟前
博客目录框架
c语言·开发语言·arm开发·git·嵌入式硬件·神经网络·编辑器
请数据别和我作队9 分钟前
基于 DeepSeek API 的 ASR 文本纠错脚本实战:Python 多线程批量处理 JSONL 语音转写数据
开发语言·经验分享·python·自然语言处理·nlp
泡泡鱼(敲代码中)12 分钟前
C++-string学习笔记
c语言·开发语言·c++·笔记·学习·visualstudio
编程大师哥13 分钟前
JAVA 动态代理
java·开发语言
ytttr87320 分钟前
C# 读取数据库表结构工具设计与实现
开发语言·数据库·c#
Jinuss23 分钟前
源码分析之React中的useImperativeHandle
开发语言·前端·javascript
csdn2015_31 分钟前
HashSet 和 LinkedHashSet 区别
java·开发语言