微信开放平台扫码登录获取用户基本信息!附可用demo

微信开放平台扫码登录获取用户基本信息!附可用demo微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。准备工作:1、准备APPID、APPSECRET2、准备接口地址3、准备REDIRECT_URI获取code接口https://open.weixin.qq.com/connect/qr…

大家好,又见面了,我是你们的朋友全栈君。

微信开放平台提供了网站扫码登录的接口,用于获取用户基本信息(头像,昵称)方便网站快速接入微信登录,快捷登录。需要使用登录接口,需要成为微信开放平台认证开发者(300元)才可以获得这个接口权限。

准备工作:

1、准备APPID、APPSECRET
2、准备接口地址
3、准备REDIRECT_URI

获取code接口

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

获取acess_token、openid接口

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

获取用户信息接口:

https://api.weixin.qq.com/sns/userinfo?access_token=access_token&openid=openid

流程:

1、获取CODE
2、获取access_token、openid
3、获取用户信息

操作:

1、请求CODE

参数说明

微信开放平台扫码登录获取用户基本信息!附可用demo

 

通过接口地址,拼接以上参数进行访问即可

https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=这里填写redirect_uri&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

redirect_uri说明
这是点击上面地址扫码后跳转的地址,跳转的地址回给你带上两个参数,code和state参数。

state说明
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验。

可以自己生成随机字符串,为了简单学习,我这里用时间戳进行MD5加密简单生成

<?php
$data = time();
$state = MD5($data);
?>

例如你的redirect_uri是http://www.baidu.com/login.php,那么扫码后,跳转的地址会是这样的。

http://www.baidu.com/login.php?code=生成的code&state=生成的state

当然redirect_uri需要进行urlEncode编码。

<?php
$redirect_uri = urlEncode("http://www.baidu.com/login.php");
?>

最终获取CODE的访问链接就是这样的:

<?php
$appid = "填写你的APPID";
$redirect_uri = UrlEncode("http://www.baidu.com/login.php");
$data = time();
$state = MD5($data);
//跳转页面
echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";
?>

然后就跳转到了一个扫码的页面了:

微信开放平台扫码登录获取用户基本信息!附可用demo

2、获取access_token和openid

通过curl向接口发起请求即可

<?php
//从redirect_uri得到code
$code = $_GET["code"];
$appid = "填写你的";
$secret = "填写你的";

//获取access_token和openid
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
function post($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $rst = curl_exec($ch);
        curl_close($ch);
        return $rst;
}

//发送请求
$result = post($url);
//返回接口的数据
$arr = json_decode($result,true);
//解析json,单独把openid和access_token取出来待会用
$openid = $arr['openid'];
$token = $arr['access_token'];
?>

3、获取用户信息

<?php
//这里是接着上面的代码的
//获取用户信息需要openid 和 access_token
//获取用户信息
$getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
function getinfo($getinfourl) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $getinfourl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $rst = curl_exec($ch);
        curl_close($ch);
        return $rst;
}

//发送请求获取用户信息
$info_result = getinfo($getinfourl);
//返回接口的数据
// echo $info_result;
$info_arr = json_decode($info_result,true);
$nickname = $info_arr['nickname'];
$headimgurl = $info_arr['headimgurl'];

//显示头像和昵称
echo "<img src=\"$headimgurl\"/>";
echo "<h2>$nickname<h2>";
?>

完整代码

code.php

<?php
$appid = "填写你的";
$redirect_uri = UrlEncode("http://www.baidu.com/login.php");
$data = time();
$state = MD5($data);

echo "<script>location.href=\"https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_login&state=$state#wechat_redirect\";</script>";

?>

login.php

<!DOCTYPE html>
<html>
<head>
    <title>登录成功!</title>
    <style type="text/css">
        *{margin:0px;padding: 0px;}
        #headimg{
            width: 180px;
            height: 180px;
            margin:100px auto 10px;
            border-radius: 100%;
        }

        #headimg img{
            width: 180px;
            height: 180px;
            border-radius: 100%;
        }

        h2{
            text-align: center;
        }

        p{
            text-align: center;
            font-size: 38px;
            font-weight: bold;
            margin-top: 20px;
        }
    </style>
</head>
<body>

</body>
</html>

<?php
$code = $_GET["code"];
$appid = "填写你的";
$secret = "填写你的";

//获取access_token和openid
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code";
function post($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $rst = curl_exec($ch);
        curl_close($ch);
        return $rst;
}

//发送请求
$result = post($url);
//返回接口的数据
$arr = json_decode($result,true);
$openid = $arr['openid'];
$token = $arr['access_token'];

//获取用户信息
$getinfourl = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid";
function getinfo($getinfourl) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $getinfourl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $rst = curl_exec($ch);
        curl_close($ch);
        return $rst;
}

//发送请求获取用户信息
$info_result = getinfo($getinfourl);
//返回接口的数据
// echo $info_result;
$info_arr = json_decode($info_result,true);
$nickname = $info_arr['nickname'];
$headimgurl = $info_arr['headimgurl'];
$errcode = $info_arr['errcode'];

if ($errcode == "41001") {
    echo "<p>登录失效,请重新扫码登录<p>";
    echo "<p><a href=\"code.php\">登录</a><p>";
}else{
    echo "<div id=\"headimg\"><img src=\"$headimgurl\"/></div>";
    echo "<h2>$nickname<h2>";
    echo "<p>登录成功<p>";
}
?>

DEMO:http://www.likeyunba.com/WX-OPEN-LOGIN/code.php

时间:2018-1-26
作者:TANKING
网站:http://likeyunba.com

学习交流微信:face6009

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140028.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【软考】系统集成项目管理工程师(三)系统集成专业技术知识

    【软考】系统集成项目管理工程师(三)系统集成专业技术知识软考中级——系统集成项目管理工程师备考干货第三章:系统集成专业技术知识。

    2022年10月15日
  • 京东云 服务器_京东云服务器免费体验

    京东云 服务器_京东云服务器免费体验哈哈哈~又来“打广告”了~~~一开始用着华为云服务不错,只不过因为自己一时粗心忘了密码,找回密码又比较麻烦,所以从网上搜免费的云服务器。果然发现了京东云……(虽然是第一次见),不过确实方便好用。好处如下:*实名认证方式就比较简单,不需要拿着身份证照来照去了,审核基本是秒过*功能操作比较简单*免费半年使用权(主要是这个原因)注册账号领取免费套餐注册账号:1、进入官网,直接

    2022年10月14日
  • 常用的算法和数据结构 面试_数据结构与算法面试题80道

    常用的算法和数据结构 面试_数据结构与算法面试题80道(1)红黑树的了解(平衡树,二叉搜索树),使用场景把数据结构上几种树集中的讨论一下:1.AVLtree定义:最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。…

  • 【豆瓣达人总结】做爱做的事,看有趣的人

    【豆瓣达人总结】做爱做的事,看有趣的人惊雀http://www.douban.com/people/4917689/有想法很特别的一位大哥,从另一个角度告诉你什么叫做“人不可貌相”,有位友邻说得好:之所以觉得惊先生特别是因为先生是为数不多思考爱情的帅哥~@东窗未白keledollhttp://www.douban.com/people/keledoll/热血科学心理学女青年,今天才发现她有豆瓣页面。搜索kele

  • java cas原理 CAP技术_fpga和java哪个好

    java cas原理 CAP技术_fpga和java哪个好1:CAS概念及原理CAS:CompareandSwap,翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。有啥用处?    对于常用

    2022年10月16日
  • 如何制作一个简单的HTML登录页面(附代码)

    如何制作一个简单的HTML登录页面(附代码)几乎每个网站都会有登录页面,那你知道如何写HTML登录页面吗?这篇文章就和大家分享一个HTML简单登录界面的代码,有一定的参考价值,感兴趣的朋友可以看看。实例:制作一个HTML登录页面,包含邮箱,登录密码,立即注册,忘记密码等,代码如下:HTML部分:<divclass=”dowebok”><divclass=”logo”></div><divclass=”form-item”><inputid=”username”t

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号