uniapp-微信公众号静默授权

第一次开发公众号,以为静默授权非常的复杂,后面才发现静默授权本质上就是跳一个微信的内部链接,拿到code,通过code再去获取openid即可。

在网上找到了一个比较详细的教程进行了一些改造

首先跳转静默授权的地址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${uri}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect

只有appid和uri是自己的,其他的都是固定的
appid: 就是自己配置测试账号的appid
uri: 是静默授权后要跳转的地址,(需要上线的地址,否则跨域)

(这里一定要注意,跳转的地址是一定要进行转码的) 也可以直接用代码转码,更加方便

转码地址:http://www.ab173.com/gongju/enc/urlencode.php
在这里插入图片描述

接下来就是具体的实现代码:

import store from '@/store'

// 微信公众号授权
export function wxAuthorize() {
	// 非静默授权,第一次有弹框
	let local = '跳转的地址'; // 获取页面url
	let appid = 'appid' // 公众号appid
	let code = getUrlCode().code; // 截取code
	// 获取之前的code
	let oldCode = uni.getStorageSync('wechatCode')
	//判断是否存在code,不存在或者过期将重新授权
	if (code == null || code === '' || code == 'undefined' || code == oldCode) {
		// 如果没有code,就去请求获取code
		console.log('当前没有code,进入授权页面')
		//转码
		let uri = encodeURIComponent(local)
		// 设置旧的code为0,避免死循环
		uni.setStorageSync('wechatCode',0)
		window.location.href =
			`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${uri}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
	} else {
		console.log('存在code,使用code换取用户信息')
		// 保存最新code
		uni.setStorageSync('wechatCode',code)
		uni.request({
			method: 'GET',
			url: this.userUrl+'/sys/getOpenId', // 你的接口地址
			data: {
				code:code
			},
			success: res => {
					console.log(res)
					//根据后端返回的结果和需求自行修改,这里直接讲openid本地存储了
				    uni.setStorageSync('OPEN_ID',res.data.openid)  //正式
			},
			fail: (err) => {
				window.alert('请求失败')
				console.log(err)
			}
		});
	}
}

function getUrlCode() {
	// 截取url中的code方法
	var url = location.search;
	// this.winUrl = url;
	var theRequest = new Object();
	if (url.indexOf('?') != -1) {
		var str = url.substr(1);
		var strs = str.split('&');
		for (var i = 0; i < strs.length; i++) {
			theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
		}
	}
	return theRequest;
}

使用:
在main.js中全局引入即可
在这里插入图片描述
需要静默授权的页面调用该方法:
在这里插入图片描述
注意:一般微信公众号的静默授权都是进入首页就授权
这样我们在配置公众号菜单的时候可以直接让他跳转静默授权的地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${uri}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
这也避免了进入这个页面之后再去静默授权,出现页面闪动的效果。

注意点:

刚开始开发的时候,非常纠结于这个静默授权是否好用的问题,其实完全可以先去开发页面,因为他的影响并不大,就是拿到openid。
如何测试静默授权是否能够成功:
首先开发测试阶段要用 微信开发者工具中的公众号网页 项目测试
浏览器根本无法测试,运行项目也不会自动跳转,需要把运行地址手动赋值到里面

在这里插入图片描述
在这里插入图片描述
跳转的地址需要是放到服务器上,外网能够访问的,本地不可以
(如果能够配置跨域也是可以的,或者用花生壳穿透)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
uniapp中,你可以通过使用微信小程序的API来获取微信公众号的code。你可以在前端通过调用小程序的登录接口wx.login()来获取到code,然后将这个code传给后端来获取token。 具体步骤如下: 1. 在前端中,使用wx.login()方法获取到小程序的code。 2. 将获取到的code传给后端,后端通过code调用微信公众号的接口获取到token和openId等用户信息。 参考代码如下: ```javascript // 在uniapp中获取微信公众号的code uni.login({ provider: 'weixin', success: function (loginRes) { if (loginRes.code) { // 将code传给后端 // 调用后端接口获取token和openId等用户信息 } else { console.log('登录失败!' + loginRes.errMsg) } } }) ``` 你可以将上述代码放在需要获取微信公众号code的地方,当用户登录时,调用该代码获取code并传给后端进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [uniapp微信公众号H5获取code进行登录](https://blog.csdn.net/m0_55333789/article/details/129405206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ASP微信公众号授权登陆,获取OpenID,昵称,头像等相关信息完整示例](https://download.csdn.net/download/u010439874/88231886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值