我的编程空间,编程开发者的网络收藏夹
学习永远不晚

微信扫码登陆的总体步骤--详细

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

微信扫码登陆的总体步骤--详细

前言

记录一下自己实现微信登陆的艰难历程,希望能对大家有所帮助。


一、微信公众号申请

1.点击下方地址进入

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

2.接口配置信息的修改

eg:之前在这里卡了很久一直不知道怎么弄,最后经过不断的尝试发现想要修改成功首先你得有一个域名和服务器,它的大概实现图如下
在这里插入图片描述
具体实现

  • (1)申请域名并成功部署服务器(此处不懂,点击此处
    注:因为本人使用的宝塔面板,此处就以宝塔面板为例
  • (2)在宝塔面板的软件管理下载php环境,并在部署域名的时候选择php环境
  • (3)在域名的根目录下新建一个php文件,并在该文件下输入以下代码
  if ('notify' == $type) {    echo $_GET['echostr'];}

注:若此处申请失败可以使用官网的代码

  • (4)接口URL填写格式详述
    在这里插入图片描述
  • (5)成功后系统反馈回修改成功,此时就大功告成了,接下来就是二维码得提取了和回调了

二、利用php代码实现二维码的获取

eg:这里就直接给源码了(内涵具体注释),源码所放位置为刚刚在域名根目录下所建立的php文件内

1.引入库

代码如下(示例):

<?phpheader('Content-Type: text/html;charset=utf-8');header('Access-Control-Allow-Origin:http://localhost:8080'); // *代表允许任何网址请求header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); // 允许请求的类型header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送 cookiesheader('Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin'); // 设置允许自定义请求头的字段require './vendor/autoload.php';$type = $_GET['type'];$config['app_id'] = 'xxx';//你的微信公众平台的app_id$config['secret'] = 'xxx';//你的微信公众平台的secret$config['expire'] = 60;function getKey(){    return time() . rand(0, 10000);//获取key值防止用户重复登陆}//存取key到缓存,并设置key的有效时间,判断key值是否变化function cacheKey(){    global $config;    $cache = getCache();    $key = getKey();    return $cache->set($key, -1, ['nx', 'ex' => $config['expire']]) ? $key : cacheKey();}function response($code, $msg, $data = []){    exit(json_encode(compact('code', 'msg', 'data')));}//获取缓存,用来存储key值function getCache(){    static $cache;    return $cache ?? $cache = \Symfony\Component\Cache\Adapter\RedisAdapter::createConnection('redis://localhost');}//根据微信的app_id,secret获取app值function getWechatApp(){    global $config;    static $app;    return $app ?? $app = \EasyWeChat\Factory::officialAccount([        'app_id' => $config['app_id'],        'secret' => $config['secret'],    ]);}if ('getQrcode' == $type) {    try {        $key = cacheKey();        $app = getWechatApp();        $result = $app->qrcode->temporary($key, $config['expire']);//根据key值和二维码有效时间生成临时二维码        $url = $app->qrcode->url($result['ticket']);//将临时二维码是指为地址        $data = ['key' => $key, 'url' => $url];//输出key值和二维码地址        response(0, 'success', $data);    } catch (Exception $e) {        response(500, '系统繁忙,请稍后再试');    }}if ('login' == $type) {    $con = getCon();    $result = mysqli_query($con, "select openid from users where id=1");    $user = mysqli_fetch_assoc($result);//    response(0, '已登陆',$user);    if($user){        $result = mysqli_query($con, "delete from users where id=1");        response(0, '已登陆',$user);    }else{        $result = mysqli_query($con, "delete from users where id=1");        response(-1, '未登陆',$user);    }//    $key = $_GET['key'];//获取当前的key值//    $cache = getCache();//获取缓存//    $userId = $cache->get($key);//判断缓存中的key值是否与当前key值相等//    if (-1 == $userId) {//不相等显示未登录//        response(-1, 'not login',$userId);//    } elseif (!$userId) {//没有值显示过期//        $con = getCon();//        $result = mysqli_query($con, "select openid from users where id=1");//        $user = mysqli_fetch_assoc($result);    response(0, '已登陆',$user);//        if($user){//            $result = mysqli_query($con, "delete from users where id=1");//            response(0, '已登陆',$user);//        }else{//            response(1, '二维码已经过期',$userId);//        }////    } else {//存在即此时的id值为数据库查询到的id值//        session_start();//        $_SESSION['userId'] = $userId;//        response(0, '已登陆',$userId);//    }}if ('autoLogin' == $type) {    $con = getCon();    $result = mysqli_query($con, "select openid from users where id=1");    $user = mysqli_fetch_assoc($result);//    response(0, '已登陆',$user);    if($user){        $result = mysqli_query($con, "delete from users where id=1");        response(0, '已登陆',$user);    }//    response(-1, 'no login',$openId);//    $con = getCon();//    if (!$userId || !$result = mysqli_query($con, "select id,nick_name,avatar_url from users where id=$userId")) {//        response(-1, 'no login');//    }//    $user = mysqli_fetch_assoc($result);//    response(0, 'success', [//        'userInfo' => [//            'nickName' =>  $openId,//        ]//    ]);}function responseMsg(){    $postStr = file_get_contents("php://input");//获取数据流    if (!$postStr) {        exit();    }    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//将数据流转化成字符串类型    $msgType = trim($postObj->MsgType);//判断事件类型    if ('event' == $msgType) {//判断是关注和扫码事件        echo receiveEvent($postObj);    }}function getCon(){    static $con;    return $con ?? $con = mysqli_connect('localhost', '数据库账号', '数据库密码', '数据库名称');}function loginInit($key, $openId){    $cache = getCache();//    if (!$cache->exists($key)) {//        return false;//    }    $con = getCon();    $result = mysqli_query($con, "insert into users(openid,id)values ('$openId',1)");//    if (!$result) {//        try {//            $app = getWechatApp();//            $user = $app->user->get($openId);//        } catch (Exception $e) {//            return false;//        }//        $nickname = $user['nickname'];//        $avatarUrl = $user['headimgurl'];//        $result = mysqli_query($con, "insert into users(nick_name,avatar_url,openid)values ('$nickname','$avatarUrl','$openId')");//        if (!$result) {//            return false;//        }//        $uid = mysqli_insert_id();//    }    $user = mysqli_fetch_assoc($result);    $uid = $user['openid'];    return true;}function transmitText($postObj, $content){    $xmlTpl = "<xml>  <ToUserName><![CDATA[%s]]></ToUserName>  <FromUserName><![CDATA[%s]]></FromUserName>  <CreateTime>%s</CreateTime>  <MsgType><![CDATA[text]]></MsgType>  <Content><![CDATA[%s]]></Content></xml>";    return sprintf($xmlTpl, $postObj->FromUserName, $postObj->ToUserName, time(), $content);}function receiveEvent($postObj){    if (in_array($postObj->Event, ['subscribe', 'SCAN'])) {        $key = str_replace('qrscene_', '', $postObj->EventKey);//获取数据流传输过来的事件类型        if (empty($key)) {//若没有返回空值            return '';        }        //若接收到则调用登陆判断        $responseText = loginInit($key, trim($postObj->FromUserName)) ? '登陆成功' : '系统繁忙,请稍后再试';        return transmitText($postObj, $responseText);    }    return '';}if ('notify' == $type) {//    loginInit(123, osUsv5gncfksgUo1Nn8AnO9mJa88);    responseMsg();//    response(1, '二维码已经过期');    //echo $_GET['echostr'];}

eg:有一点忘记提了,你还需要在在宝塔面板上建立一个数据库,因为挺简单的,网上教程也多,这里就不具体叙述了,数据库的大概样子如下
在这里插入图片描述
在这里插入图片描述
sql文件点此链接获取
注:数据库导入后按照上面图片对数据库进行结构,编辑因为改版后已经不支持获取用户头像和昵称了

这里有具体测试php代码的方法(可以查看二维码是否调用):点此此处

三、vue的前端调用

注:在调用前忍不住吐槽一下内心的想法,原本想利用微信登陆获取头像和昵称的,但是微信为了用户的安全性在2021年12月取消了该权限,所以最终只能获取到用户的openid了,具体文件如下所示!!!
在这里插入图片描述
这里前端代码太多,就直接给出vue前端源码吧
在这里插入图片描述
源码链接:点击此处

总结

做了一次微信登陆,感觉特别繁琐,最后也没有获取到用户的头像和昵称,没有达到最后的预期,虽然最后通过网页授权的方法实现了,但是接口始终不是自己的,所以把自己的经历给写下来分享给大家。

来源地址:https://blog.csdn.net/m0_46657126/article/details/127627191

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

微信扫码登陆的总体步骤--详细

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

微信公众号授权登录的超详细步骤

微信公众号授权登录的使用最为常见,当然只是一些会只有登录,所以选择点击授权登,下面这篇文章主要给大家介绍了微信公众号授权登录的超详细步骤,需要的朋友可以参考下
2022-12-09

PHP实现微信扫码登录功能的详细教程

PHP 实现微信扫码登录功能的详细教程随着移动互联网的快速发展,微信作为最受欢迎的即时通讯工具之一,提供了丰富的开放接口,为开发者提供了丰富的功能扩展能力。其中,微信扫码登录功能极大地方便了用户登录过程,提高了用户体验。本文将详细介绍如何
PHP实现微信扫码登录功能的详细教程
2024-03-04

PHP编写实现微信扫码登录的完整步骤解析

PHP编写实现微信扫码登录的完整步骤解析一、引言微信扫码登录是一种便捷的用户认证方式,通过微信的扫码功能可以实现用户的快速登录。在本文中,我们将介绍如何使用PHP编写实现微信扫码登录的完整步骤,包括获取微信扫码登录二维码、处理用户扫码后
PHP编写实现微信扫码登录的完整步骤解析
2024-03-04

Android集成微信登录的步骤详解

一、首先在Application的onCreate中写:// GeneralAppliction.java public static IWXAPI sApi; @Override public void onCreate() {super
2022-06-06

远程登陆阿里云服务器的详细使用步骤

随着云计算的发展,越来越多的用户开始使用阿里云服务器。阿里云提供了多种访问服务器的方式,包括远程登陆。远程登陆是一种非常实用的操作方式,可以让用户在任何地方访问服务器,进行各种操作。这篇文章将详细解释如何远程登陆阿里云服务器。一、登录阿里云账号首先,你需要有一个阿里云账号。如果还没有阿里云账号,你可以点击阿里云的
远程登陆阿里云服务器的详细使用步骤
2023-12-09

微信小程序获取当前位置的详细步骤

微信小程序开发中选择地理位置就需要通过官方文档API去判断用户是否授权地理位置,用户开启授权后可直接获取地理位置,下面这篇文章主要给大家介绍了关于微信小程序获取当前位置的详细步骤,需要的朋友可以参考下
2022-12-08

vscode连接远程Linux服务器及免密登陆的详细步骤

目录写在开头步骤1:在本机生成公钥和私钥步骤2:在vscode安装Remote-SSH步骤3:服务器端添加私钥到authorized_keys步骤4:本机配置vscode文件步骤5:选择服务器文件夹开始android使用写在开头 做深度学习
2022-08-16

阿里云服务器登陆指南详细的登录步骤与注意事项

在信息化的今天,云计算服务已经成为了企业运营的重要组成部分。阿里云作为国内领先的云计算服务提供商,其服务器产品深受广大用户的喜爱。本文将为您提供一份阿里云服务器的登陆指南,让您能够轻松地进行服务器的登录和管理。步骤一:注册阿里云账号在您初次使用阿里云服务器之前,您需要首先注册一个阿里云账号。您可以通过官方网站(h
阿里云服务器登陆指南详细的登录步骤与注意事项
2023-11-16

SQL Server 实例之间传输登录名和密码的详细步骤

目录简介步骤如下1. 首先在源服务器A “master”数据库中创建两个存储过程。 过程分别名为“sp_hexadecimal”和“sp_help_revlogin”2
2023-06-09

阿里云主机ecs绑定域名信息和密码的详细步骤

阿里云主机ecs是阿里云推出的一种高性能计算服务,它可以帮助用户快速搭建和管理自己的服务器。然而,用户在使用ecs时,常常需要绑定域名信息和设置密码,这对于一些新手用户来说可能是一个挑战。本文将详细介绍阿里云主机ecs如何绑定域名信息和密码。一、绑定域名信息登录阿里云控制台:首先,你需要在电脑或手机上登录你的阿里
阿里云主机ecs绑定域名信息和密码的详细步骤
2023-11-22

阿里云服务器一级代理设置密码登录的详细步骤

阿里云服务器作为一款强大的云计算服务,具有灵活的计算能力,高效的存储空间和强大的安全性能。但是,为了保护服务器的安全,我们需要设置密码进行登录。本文将详细介绍如何设置阿里云服务器一级代理的密码登录。一、准备工具在进行设置之前,我们需要准备以下工具:阿里云服务器:需要已经购买并开通的一级代理阿里云服务器。SSH工具
阿里云服务器一级代理设置密码登录的详细步骤
2023-12-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录