微信公众号h5网页获取授权openId

文章目录前言一、准备一个页面用于授权获取code2.在首页使用code进行授权登录前言 在微信公众号h5网页里面获取授权,我是用的是uniapp框架,主要讲一下前端的操作,

文章目录

  • 前言
  • 一、准备一个页面用于授权获取code
    • 2.在首页使用code进行授权登录


前言

在微信公众号h5网页里面获取授权,我是用的是uniapp框架,主要讲一下前端的操作,前面的微信公号配置域名操作可以去官网查看


一、准备一个页面用于授权获取code

将该页设置为进入的默认页面,功能类似登录页,只是登陆的操作是由微信来做,此页面可以什么都没有,只需要在这个页面进行跳转回调页面,获取code

 // let link = encodeURI(window.location.href);
	   let link = encodeURIComponent('https://xxxxxxxxxxxx');
	   console.log(link)
	   	console.log(link,'link');
	   	let code = null;
	   	
	   	// //判断link中有没有code=字符串  
	   	// if(link.indexOf('code=') == -1){
	   		//没有code则引导关注者打开如下页面链接,授权
	   		let appid = 'xxxxxxxxxxxxxxxxxx';
	   		let uri = link;
			
	   		let authURL = `https://open.weixin.qq/connect/oauth2/authorize?appid=${appid}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`;
	   		//重新引导回本页面,然后又重新判断link.indexOf('code=') == -1
	   		window.location.href = authURL;
	   		console.log(authURL)

	   	// }

这个回调的页面设置为系统的首页路径,
let link = encodeURIComponent(‘https://域名+首页地址’);

2.在首页使用code进行授权登录

在首页的onLoad生命周期里进行登录
代码如下(示例):

methods: {
			getQueryParam(name){
			const urlParams = new URLSearchParams(window.location.search);
			return urlParams.get(name);
			},
			//用户登录
			userLogin(){
				      const code=this.getQueryParam('code')
				      console.log(code)
				      //发送请求传参code获取用户openid
				      uni.request({
				              url: 'https://xxxx/api/user/users/wxLogin',
				              data: {
				                  code: code,
				                  // phoneNum: this.phone,
				                  // name: this.name
				              },
				              method: 'POST',
				              success: (res) => {
				                  uni.hideLoading();
				                  console.log(res);
								 
				                  // res.data.openid
				                  if (res.data.code == 200) {
				                      uni.showToast({
				                          title: res.data.msg
				                      });
				                      const userInfo = {
				                          userId: res.data.data.id
				                      };
				      				
				                      uni.setStorageSync('userInfo', JSON.stringify(userInfo));
				                      app.userInfo = userInfo;
				                      uni.setStorageSync('token', res.data.data.token);
				      				this.getMsgAccount()
									
				                  } else {
				                      uni.showToast({
				                          title: res.data.msg,
				                          icon: 'error'
				                      });
				                  }
								  // this.getMsgAccount()
				              },
				              fail: (err) => {
				                  uni.hideLoading();
								  // this.onloadFinish=true
								  // resolve()
				                  console.log(err);
				              }
				          });
				    
			},

注意,如需在首页的onshow生命周期里调用接口,而且接口需要使用登录获取的参数时,由于在onload里调用了登录接口,所以导致在onshow里调用接口时还没拿到登录接口返回的参数,导致请求失败。
所有可以在登录的成功回调里面去请求接口,然后再onshow里面判断一下是否登录,如果登陆了再去调接口,这样第一次进入首页,就可以触发登录成功的回调,后面再次进入首页也可以发送请求。

onShow() {
			// this.getWorkCount()
			//如果有用户信息,不是第一次登录
			if(app.userInfo){
				this.getMsgAccount()
			}
			
		},

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754996650a5225173.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信