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

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语言·开发语言·算法·面试·bug
门思科技4 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
ℋᙚᵐⁱᒻᵉ鲸落6 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
恋恋西风6 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx6 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_7 小时前
C++(22)——类型转换和IO流
开发语言·c++
默_笙7 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
小范同学_7 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
geovindu8 小时前
CSharp: 万年历
开发语言·后端·c#·.net
我找到地球的支点啦8 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信