网页端微信登录

3 篇文章 0 订阅

网页端微信登录授权

1.微信网页授权:

  如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑

2.官方文档:

  https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

3.思路:

	1.网页端将参数拼接到微信授权页面链接上然后location.href跳转到微信授权的页面;
	2.用户确定授权后拿到code拼接到上一步的参数redirect_uri上跳转回去;
	3.然后拿code调用微信接口换取openid和unionid(这个一定要存,不要存openid)4.有需要的话可以拿openid去获取用户微信信息;
	第三步第四步接口可以前端调用也可以后端调用,由于安全性官方文档推荐服务端调用,不过实际看情况吧。

4.代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery-3.4.1.min.js"></script>
</head>

<body></body>
<script>
    var config = { appId: "yourappid", secret: "yoursecret" }
    handlecheckCode();
    function handlecheckCode() {
        let obj = getUrlParams();
        console.log(obj)
        if (obj.code) {
            // code换取openId和unionid            
            handleGetWXInfoByCode(obj)
        } else {
            // 跳转微信登录            
            //同意授权后跳转到的页面            
            let redirect_uri = `https://www.you.com/login.html?url=${obj.url}`;
            let wxInfo = {
                appid: config.appId,
                redirect_uri: encodeURIComponent(redirect_uri),//要携带code跳转的地址                
                response_type: "code",
                scope: "snsapi_userinfo",//应用授权作用域,
                snsapi_base, //(不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )            
            }
            let openurl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${wxInfo.appid}&redirect_uri=${wxInfo.redirect_uri}&response_type=${wxInfo.response_type}&scope=${wxInfo.scope}&state=STATE#wechat_redirect`
            // console.log(openurl)            
            window.location.href = openurl
        }
    }
    //获取openid和unionid    
    function handleGetWXInfoByCode(obj) {
        console.log(config)
        $.ajax({
            url: `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${config.appId}&secret=${config.secret}&code=${obj.code}&grant_type=authorization_code`,
            method: "get"
        }).then((data) => {
            console.log(data);
            if (data.errcode) {
                alert(data.errmsg);
                return
            }
            localStorage.setItem("WXLoginInfo", data);
            //  window.location.href=obj.url            
            handleGetWXUserInfo(JSON.parse(data), "data")
        }, (err) => { console.log(err, "err") })
    }    //获取微信用户信息,看情况调用    
    function handleGetWXUserInfo(obj) {
        $.ajax({
            url: `https://api.weixin.qq.com/sns/userinfo?access_token=${obj.access_token}&openid=${obj.openid}&lang=zh_CN`,
            method: "get"
        }).then((data) => {
            if (data.errcode) {
                alert(data.errmsg);
                return
            } localStorage.setItem("WXUserInfo", data);
        }, (err) => { console.log(err, "err") })
    }
    function getUrlParams() {
        var args = {};
        if (location.search.length > 1) {
            var query = location.search.substring(1);//获取查询串            
            var pairs = query.split("&");
            for (var i = 0; i < pairs.length; i++) {
                var pos = pairs[i].indexOf('=');//查找name=value               
                if (pos == -1) continue;//如果没有找到就跳过                
                var argname = pairs[i].substring(0, pos);//提取name                
                var value = pairs[i].substring(pos + 1);//提取value                
                args[argname] = decodeURIComponent(value);//存为属性            
            }
        }
        return args;
    };
</script>

</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET是由微软公司推出的一个跨平台的软件开发框架。它提供了一系列的工具和技术,用于开发各种不同类型的应用程序,包括Web应用程序、桌面应用程序、移动应用程序和服务。 C#是一种面向对象的编程语言,是.NET框架的主要开发语言之一。它由微软在2000年推出,并作为.NET框架的一部分进行开发。C#具有简单易学的语法,与C++相似,但具有更强大的类型检查和更高的抽象级别,使开发人员能够更容易地编写可靠和高性能的代码。 使用.NET和C#进行开发具有许多优势。首先,它们是由微软公司开发和维护的,因此有着强大的支持和社区。这意味着开发者可以轻松地获得有关.NET和C#的文档和教程,以及来自其他开发者的帮助和支持。 其次,.NET和C#是跨平台的。这意味着开发者可以使用它们在不同的操作系统上构建应用程序,如Windows、Linux和MacOS。这对于开发人员来说非常便利,因为他们可以在不同的平台上使用相同的代码和开发工具,减少了开发和维护的工作量。 此外,.NET和C#还具有良好的性能和安全性。通过使用.NET和C#,开发人员可以使用各种优化技术和工具来提高应用程序的性能,并使用.NET框架的安全性功能来保护应用程序免受安全漏洞和攻击。 综上所述,.NET和C#是一对强大的技术组合,可以帮助开发人员构建各种类型的应用程序,并享受跨平台、性能和安全性方面的好处。无论是初学者还是经验丰富的开发人员,都可以从使用.NET和C#进行开发中获得很多好处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值