记录小程序中获取公众号的信息授权实现过程

1.小程序页面触发webview跳转h5授权

<template>
	<view v-if="showContent">
		<web-view :src="hrefName" ></web-view>
	</view>
</template> 
<script>
	export default{
		data(){
			return{
				showContent:false,
				hrefName:''
			}
		},
		onShow(){
			//判断小程序登录授权
			if(!uni.getStorageSync('login')){ 
				uni.navigateTo({
					url: '/pages/mine/login'
				})
			}else{
                //小程序中访问h5页面url需要配置业务域名
                //开发管理>开发设置>业务域名
				this.hrefName="https://xxx.xxxxxx.com/?login="+uni.getStorageSync('login');
				this.showContent=true;
			}
		} 
	}
</script>

2.h5页面接收当前路径所传的值并获取code

<script>
	export default{ 
		data(){
			return{
				showReminder:false,
				login:'',
				code:''
			}
		},
		mounted(){   
			/**
			 * 因为实现非静默授权需要重定向再次返回此页面,所以第一次访问此页面携带login参数
			 * 第二次会携带其他参数,所以在这个位置坐下判断防止被第二次路由数据污染
			 * */
			if(obj.login){
				this.login=this.getUrlCode().login; 
			}
			this.getCode();
		},
		methods:{  
            //页面授权之后点击按钮返回小程序页面
			tapSVal(val){
				//使用引入的js的sdk实现wx跳转小程序页面
				wx.miniProgram.getEnv((res)=>{
					wx.miniProgram.redirectTo({
					    url: '../../pages/mine/mine'
					}); 
				}) 
			}, 
			getCode () { // 非静默授权,第一次有提示
				this.code = '';  
				var local = 'url地址' //公众号重定向此url地址需要在公众号设置>功能设置>网页授权域名
				console.log(encodeURIComponent(local)); //重定向的页面路径需要encodeURIComponent进行处理
				var appid = '' //公众号的APPID
				this.code = this.getUrlCode().code // 截取code  
				if (this.code == null || this.code === ''){ // 如果没有code,则去请求
					//第一次访问此页面所传的login,可以放到state参数中,第二次重定向进来直接获取state的值就是login
					window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=${this.login}#wechat_redirect`
				} else {
					// 你自己的业务逻辑
					this.login=this.getUrlCode().state;
					this.getToken(); //code不为空,传给后台
				}
			},
			getUrlCode() { // 截取url中的参数
				let arr=window.location.search.substr(1).split("&");
    			let obj={};
			    arr.map(item=>{
				    let [key,value]=item.split("=")
				    obj[key]=value;
			    })
				return obj
			},
			getToken(){ 
				//获取微信code和login
				let data = {code:this.code,login:this.login}
				this.showReminder=true;
			}
		}
	} 
</script>

上面提到的sdk需要在App.vue获取看另一个博文实现小程序webview中的h5页面,跳转小程序的某一个页面_路光.的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值