【uniapp】小程序开发5:获取openid、获取手机号

news/2024/7/7 21:21:47

一、获取小程序openid

需要配合后端接口获取授权码(code)

1)调用uni.login()方法获取授权code,并把code传给getOpenid

//使用uni.login的时候可以在任何接口下使用即可,主要看打印出来的code值和openid
let that = this
uni.login({
    provider: 'weixin',
    success: function (loginRes) {
      getOpenid(loginRes.code).then(res=>{
    	  console.log('getOpenid',res)
    	  that.openId = res.data.openId
    	  that.userInfo.openId = that.openId
    	  that.$store.commit('setUserInfo', that.userInfo)
      })
    }
});

2)方式一、从后端接口获取openId

从后端接口获取openid

function getOpenid(code) {
	const baseUrl = process.env.VUE_APP_URL;
    return new Promise(function (resolve, reject) {
        let url = baseUrl + '/api/open/weixin/getOauth2Code2Session'
        uni.request({
            url: url,
            data: {
                appId: process.env.VUE_APP_APPID,
                code: code
            },
            method: 'POST',
            success: (res) => {
                console.log('getOauth2Code2Session', res);
                resolve(res)
            }
        })
    })
}

3)方式二、纯前端写法获取openId

function getOpenid(code) {
    return new Promise(function (resolve, reject) {
        let appid = config.appid
        let secret = config.secret
        let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`
        wx.request({
            url: url,
            success: (res) => {
                let openid = res.data.openid;
                // console.log('openid', openid);
                resolve(openid)
            }
        })
    })

}

二、获取手机号

1)增加后端接口获取手机号,类似如下代码

//得到用户手机号
private static final String GET_USER_PHONENUMBER="https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=";
	
/**
 * 得到用户手机号
 * @return
 * @throws WeChatException
 */
public UserPhone getUserPhonenumber(String code) throws WeChatException{
	JSONObject groupJson =new JSONObject();
	groupJson.put("code", code);
	String requestData=groupJson.toString();
	logger.info("request data "+requestData);
	String resultStr = HttpUtils.post(GET_USER_PHONENUMBER+TokenProxy.accessToken(), requestData);
	logger.info("return data "+resultStr);
	WeChatUtil.isSuccess(resultStr);
	return JSONObject.parseObject(resultStr).getObject("phone_info", UserPhone.class);
}

@Data
public class UserPhone {

    private String countryCode;
    private String phoneNumber;
    private String purePhoneNumber;

}

2)增加vue页面文件中增加获取手机号权限代码
open-type="getPhoneNumber"

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"
	style="width: 100%;margin-top: 20px;">
	<text style="width: 100%;font-size: 20px;">点击授权获取手机号</text>
</button>

3)在vue中增加方法调用后端接口获取手机号

getPhoneNumber(res) {
	console.log('获取用户手机号:', res)
	this.getUserphonenumber(res.detail.code)
},

// 获取手机号
getUserphonenumber(code).then(res2 => {
	let phoneNunber;
	if (res2.data) {
		phoneNunber = res2.data.phoneNumber;
	}
	if (!phoneNunber) {
		wx.showToast({
			title: '没取到手机号',
			icon: 'none'
		})
		return;
	}
	console.log('phoneNumber', phoneNunber)
})


http://lihuaxi.xjx100.cn/news/1598763.html

相关文章

【Overload游戏引擎分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码&#xff0c;可以从视图投影矩阵逆推出摄像机的视锥体&#xff0c;本文来分析一下原理 一、平面的方程 平面方程可以由法线N&#xff08;A, B, C&#xff09;和一个点Q(x0,y0,z0)定义&#xff0c;其形式为&#xff1a; A ( x − x 0 ) B (…

ERDAS 2022 安装教程

注意&#xff1a; 演示ERDAS版本为&#xff1a;2022.v16.7.0.1216 安装程序&#xff1a; 1、主程序&#xff1a;点击下载 2、许可文件&#xff1a;点击下载 3、IDM下载器&#xff1a;点击下载 下载速度&#xff1a; 浏览器下载速度慢&#xff0c;可以使用以上提供的IDM下…

JavaEE初阶学习:HTTP协议和Tomcat

1. HTTP协议 HTTP协议是一个非常广泛的应用层协议~~ 应用层协议 —> TCP IP 协议栈 应用层 —> 关注数据怎么使用~ 传输层 —> 关注的是整个传输的起点和终点 网络层 —> 地址管理 路由选择 数据链路层 —> 相邻节点之间的数据转发 物理层 —> 基础设置,硬…

JavaEE-文件IO操作

构造方法 一般方法&#xff0c;有很多&#xff0c;我们以下只是列举几个经常使用的 注意在上述的操作过程中&#xff0c;无论是绝对路径下的这个文件还是相对路径下的这个文件&#xff0c;都是不存在的 Reader 使用 --> 文本文件 FileReader类所涉及到的一些方法 Fil…

RF元素定位

元素定位方式&#xff1a;id, name, link, partial_link_text, xpath, css id 【登录输入框】id session_email_or_mobile_number input text id session_email_or_mobile_numbername 【登录输入框】name session[email_or_mobile_number] input text name sessi…

SAP CDS 基础知识

CDS 入门知识&#xff1a;https://zhuanlan.zhihu.com/p/610924866?utm_id0 CDS 基本语法&#xff1a;https://blog.csdn.net/XLevon/article/details/128669506 测试CDS发布的oDATA:https://blogs.sap.com/2016/03/10/my-cds-view-self-study-tutorial-part-1-how-to-test-od…

Jmeter常用断言之断言持续时间简介

Duration Assertion&#xff1a;断言持续时间。 断言持续时间通常用于做性能测试&#xff0c;一般用于检查HTTP请求的响应时间是否超过预期值。而这个响应时间是性能测试中常关注的一个性能指标。 一、添加断言方式 根据需要可在【测试计划】、【线程组】、【线程请求】下添加…

代码随想录二刷day49

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣121. 买卖股票的最佳时机二、力扣122. 买卖股票的最佳时机 II 前言 一、力扣121. 买卖股票的最佳时机 lass Solution {public int maxProfit(int[] pr…