发布时间:2023-06-01 文章分类:WEB开发, 电脑百科 投稿人:王小丽 字号: 默认 | | 超大 打印

第一步:在微信公众平台 登录小程序 将h5网址的域名加入业务域名

设置原因:配置为业务域名后,可调用web-view组件在小程序中打开

设置路径:登录微信公众平台->左边菜单栏找到开发管理->开发设置->找到业务域名

设置方法:

1. 点击修改按钮

小程序嵌入H5页面获取公众号openId的方法

2. 使用开发者权限微信扫码验证

小程序嵌入H5页面获取公众号openId的方法

 3. 下载校验文件 放到h5域名对应的服务器根目录下(下载文件后让后端操作) 然后点击+号将h5的域名配置成业务域名

小程序嵌入H5页面获取公众号openId的方法

第二步:在小程序新建一个空白页面使用webView组件将路径传入

小程序嵌入H5页面获取公众号openId的方法

let url = 'https://xxxx.com?id=' + 你需要带的参数
this.src =`https://open.weixin.qq.com/connect/oauth2/authorize?appid=公众号appid&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`

路径解析:

1. https://open.weixin.qq.com/connect/oauth2/authorize

这是微信固定的路径

2. appid:微信公众号的appid 

3. redirect_uri:重定向路径,将h5的路径放在redirect_uri的等号后面 若h5页面使用的是哈希路径 需要使用encodeURIComponent进行编码,因为微信会默认将#后的所有字段进行截取删除 会导致访问时报错

        注意:

                a. 需要在微信公众号将域名配置为业务域名

                b. 若需要带参跳转 可以直接在h5路径后使用?拼接

4. response_type:响应类型,用户同意授权,获取code,直接填写code即可

5. scope: 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户公众号openid),snsapi_userinfo (弹出授权页面,可通过 openid 拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )

6. state:重定向后会带上 state 参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

7. #wechat_redirect: 无论直接打开还是做页面302重定向时候,必须带此参数

8. 附上微信官方文档:网页授权 | 微信开放文档

第三步:如何在h5页面拿到传递的参数

1. 定义一个函数 通过地址栏获取需要的参数

getParameterByName (name, url) {
	if (!url) url = window.location.href;
	name = name.replace(/[\[\]]/g, "\\$&");
	//匹配所有符合条件的,并取最后一个
	var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", 'g');
	var results = url.match(regex);
	var tempResults = results != null && results[results.length - 1] != undefined ? results[results.length - 1] : '';
	var finalResults = regex.exec(tempResults);
	if (!finalResults) return "";
	if (!finalResults[2]) return '';
	return decodeURIComponent(finalResults[2].replace(/\+/g, " "));
}
// name: 你需要从地址栏中获取到的数据字段,例如:id、code等等 必填
// url: 需要从什么链接中获取字段 非必填

2. 使用上面的函数获取需要的数据 进行需要的操作

//获取openId
getOpenIds () {
    let code = this.getParameterByName('code')    // 这个code就是用户的公众号openid
    let id = this.getParameterByName('id')    // 这个id就是从小程序跳转时带的参数
    // 进行需要的操作
    this.bindOpenId(code, id).....
}