1.摘要
在开发中遇到一个这样的需求,公众号实现微信网页授权,这里以H5为例,详见官方文档微信网页开发 / 网页授权 (qq.com) 😎😎
2.获取code
ini
// 公众号网页授权
const wxlogin = () => {
const redirectUrl = encodeURIComponent("http://your-url.cn");
let wxUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${你的公众号appid}&redirect_uri=${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=1213#wechat_redirect`;
location.href = wxUrl;
};
如上,根据官方文档,通过 location.href跳转路径携带相应参数,客户端中将会弹出授权许可。
具体参数配置如下:
appid | appid是公众号的唯一标识,必须携带 |
---|---|
redirect_uri | 授权回调链接地址,请使用urlEncode对链接进行处理(也就是 encodeURIComponent进行处理),此链接地址一般为你的线上域名,注是reditect_uri不是redirect_url |
response_type | 返回类型,固定填写code |
scope | 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 ) |
state | 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节 |
#wechat_redirect | 无论直接打开还是做页面302重定向时候,必须带此参数 |
forcePopup | 强制此次授权需要用户弹窗确认;默认为false;需要注意的是,若用户命中了特殊场景下的静默授权逻辑,则此参数不生效 |
第一,需要注意的是scope参数中的snsapi_base属于静默授权,将是在用户无感知的情况下授权,snsapi_userinfo 是如上图的弹出授权许可,再次做区分。第二,你的重定向线上地址必须在公众号后台配置。
且必须给予权限
当一切准备就绪,点击同意授权登录
路劲出现your-url.cn/?code=071A4... 如此情况根本无法调试,在本地也拿不到code,更无法就行后续操作,有没有一种办法让跳转的路径请求指向本地项目呢?答案肯定是有的。
修改host文件
这一步主要是为了把线上域名,定向到本地的ip,从而实现请求线上域名,等同于访问本地localhost:80
C:\Windows\System32\drivers\etc\hosts 在当前文件中添加一条:
arduino
// 注意不需要带协议
127.0.0.1 your-url.cn
这里填写网页授权域名,也就是你的线上域名。
让后就是,刷新DNS缓存:Win+R打开输入
bash
ipconfig /flushdns
这种情况说明成功
修改项目端口号
修改项目端口号,这里以vue3+vite项目为例:
php
export default defineConfig({
plugins: [
uni(),
],
server: {
// disableHostCheck: true,
host: '0.0.0.0',
port: 80,
open: true,
}
})
最好把端口号改为80,避免出现一些小问题😀😀😀😀😀
此时,你在浏览器或者公众号网页调试直接访问your-url.cn, 就可以直接反射localhost:80,前提是你的项目中必须启动localhost:80。
3.截取code
在当前页面截取路劲的code参数
typescript
// 获取code
const getUrlCode = (name: any) => {
return (
decodeURIComponent(
(new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
location.href
) || [, ""])[1].replace(/+/g, "%20")
) || null
);
};
getUrlCode('code')//071A4KFa1oleFG04RnHa1hlxa90A4KFb
这里有一个坑,你不能通过vue中的获取页面query参数route.query.code拿去code,或者是uniapp中的
javascript
onLoad((query)=>{
console.log(query.code)
})
这样的话会造成上线后授权死循环。
最后,当你拿到code就可以进行后续操作了。
4.总结
公众号微信网页授权,网上有很多教程,请根据自己的实际情况,并查阅官方文档。我也是针对我遇到的问题进行总结。可供参考学习!!!