• 首页
  • 微语
  • 相册
  • 足迹
  • 邻居
  • 留言
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2016-2026  幻影博客 Theme by OneBlog

    幻影博客博客

    搜索
    标签
    # e4a # 域名 # 源码 # 教程 # 内容 # 代挂 # app # 网站 # 软件 # QQ
  • 首页>
  • 我的项目>
  • 正文
  • 【教程】无需微信认证的公众号登录系统:零成本实现快捷登录

    2025年11月22日 487 阅读 4 评论 3746 字

    背景介绍

    在传统网站登录系统中,用户注册、密码管理、短信验证码等环节都存在诸多痛点。今天我要分享的是一套无需微信认证的公众号登录方案,即使是个人订阅号也能轻松实现网站微信登录功能。

    系统架构设计

    核心原理

    用户访问网站后,关注公众号并发送"登录"指令,公众号生成6位验证码,用户在网站输入验证码即可完成登录。

    技术流程

    1. 用户访问网站登录页面
    2. 扫码关注微信公众号
    3. 向公众号发送"登录"指令
    4. 公众号返回6位验证码
    5. 在网站输入验证码完成登录

    核心代码实现

    微信公众号消息处理

    // 微信公众号消息处理核心代码
    $token = 'your_wechat_token';
    
    // 服务器验证
    if (isset($_GET['echostr'])) {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $echostr = $_GET["echostr"];
        
        $array = array($token, $timestamp, $nonce);
        sort($array);
        $str = sha1(implode($array));
        
        if ($str == $signature) {
            echo $echostr;
        }
        exit;
    }
    
    // 处理用户消息
    $postStr = file_get_contents("php://input");
    if ($postStr) {
        $postObj = simplexml_load_string($postStr);
        
        $msgType = $postObj->MsgType;
        $fromUser = $postObj->FromUserName;
        $content = trim($postObj->Content);
        
        // 处理"登录"指令
        if ($msgType == 'text' && $content == '登录') {
            // 生成6位随机验证码
            $code = sprintf("%06d", mt_rand(1, 999999));
            
            // 保存到数据库
            $log_data = [
                'openid' => $fromUser,
                'login_code' => $code,
                'created_time' => time(),
                'status' => 0
            ];
            $DB->insert('wechat_login', $log_data);
            
            // 返回验证码给用户
            $reply_content = "您的网站登录验证码:{$code},有效期5分钟";
            
            $textTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[%s]]></Content>
    </xml>";
            
            echo sprintf($textTpl, $fromUser, $toUser, time(), $reply_content);
        }
    }

    网站登录验证

    // 网站登录验证接口
    $login_code = trim($_POST['login_code']);
    
    // 验证码格式检查
    if(empty($login_code) || strlen($login_code) != 6){
        echo json_encode(['code' => 1, 'msg' => '请输入6位数字验证码']);
        exit;
    }
    
    // 查找验证码记录
    $code_info = $DB->find('wechat_login', '*', [
        'login_code' => $login_code,
        'status' => 0
    ]);
    
    if(!$code_info){
        echo json_encode(['code' => 1, 'msg' => '验证码不存在或已被使用']);
        exit;
    }
    
    // 检查验证码有效期(5分钟)
    if(time() - $code_info['created_time'] > 300){
        echo json_encode(['code' => 1, 'msg' => '验证码已过期']);
        exit;
    }
    
    // 标记验证码为已使用
    $DB->update('wechat_login', [
        'status' => 1,
        'used_time' => time()
    ], ['id' => $code_info['id']]);
    
    // 生成用户登录凭证
    $session = md5($code_info['openid'] . 'fixed_password');
    $expiretime = time() + 604800;
    
    // 设置登录Cookie
    setcookie("user_token", $token, $expiretime, '/', '', false, true);
    
    echo json_encode(['code' => 0, 'msg' => '登录成功']);

    数据库设计

    -- 验证码存储表结构
    CREATE TABLE wechat_login (
        id int(11) NOT NULL AUTO_INCREMENT,
        openid varchar(100) NOT NULL,
        login_code char(6) NOT NULL,
        created_time int(11) NOT NULL,
        used_time int(11) DEFAULT NULL,
        status tinyint(1) DEFAULT 0,
        ip_address varchar(45) DEFAULT '',
        PRIMARY KEY (id),
        KEY idx_login_code (login_code),
        KEY idx_created_time (created_time)
    );

    系统特色与优势

    核心优势

    1. 零认证成本

      • 无需微信认证(节省300元/年)
      • 个人订阅号即可使用
      • 免去复杂的审核流程
    2. 极致用户体验

      • 无需注册账号
      • 无需设置密码
      • 5秒完成登录
    3. 高安全性

      • 验证码单次有效
      • 5分钟自动过期
      • 防暴力破解机制
    4. 低成本部署

      • 无需短信服务商
      • 服务器要求低
      • 维护简单

    部署指南

    环境要求

    • PHP 7.0+
    • MySQL 5.6+
    • 支持XML处理的Web服务器
    • 微信公众号(订阅号即可)

    配置步骤

    1. 公众号配置

      • 进入开发者中心
      • 配置服务器URL
      • 设置Token(与代码中一致)
    2. 数据库配置

      • 创建验证码表
      • 配置数据库连接
    3. 代码部署

      • 上传微信回调文件
      • 配置相关参数
      • 测试登录流程
    本文著作权归作者 [ HuanYing ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    读者留言4

    1. Tch Lv.2
      2026-01-08 13:23 回复

      在同一个设备的两个不同浏览器上,通过验证码登录,能确定是通过一个用户吗

      1. HuanYing 博主
        2026-01-08 14:11 回复
        @Tch

        验证码都是一次性的,就看谁先触发登录了,可以基于这个增加更多判断

        1. Tch Lv.2
          2026-01-08 16:32 回复
          @HuanYing

          微信扫码后通过openid来判断的是吧,明白了

          1. HuanYing 博主
            2026-01-08 17:52 回复
            @Tch

            是的,获取验证码的时候 和 openid绑定了

    加载更多评论
    加载中...
    — 已加载全部评论 —
    首页微语相册足迹邻居留言归档关于
    Copyright©2016-2026  All Rights Reserved.  Load:0.056 s
    鲁ICP备2022028556号-1
    Theme by OneBlog V3.6.5
    夜间模式

    本站已加入BLOGS·CN

    开源不易,请尊重作者版权,保留基本的版权信息。