php微信公众号开发之扫码关注并登陆的实现方法

需求

使用微信扫码并且关注公众号后实现网站登录。

思路分析

1.使用公众号接口生成二维码。
2.系统接收微信推送过来的事件(关注/扫码)。
3.前端轮询二维码扫码状况
4.用户点击关注或者扫码二维码后台都会接收到推送通知,然后根据通知实现自己的业务就可以了。

准备工作

微信公众号一枚(服务号)必须是服务号,订阅号没有这个权限。

需要的接口

生成带参数的二维码:文档地址
接受事件推送:文档地址

生成带参数的二维码

代码:

function build_param_qrcode(){
    // 请求api地址
    $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$access_token}";
    // 生成位于的uuid
    $uuid = uniqid('WXQRCODE', false);
    // post请求
    $res = $this->http_post_json($url, json_encode([
        'expire_seconds' => 60 * 5, // 二维码过期时间
        'action_name' => 'QR_STR_SCENE', // 二维码类型
        'action_info' => [ // 二维码详细信息
            'scene' => [
                'scene_str' => $uuid //将生成的uuid放在二维码中,用户扫码后会收到该uuid
            ]
        ],
    ]));
    $res['uuid'] = $uuid;
    // 创建一个本地缓存,可以是保存到数据库中或者文件缓存
    cache($uuid, false, 5 * 60);
    return $res;
}

公众号后台配置服务器

具体教程请看文档:接入概述 | 微信开放文档

接受事件处理程序

wxEvent.php

/** 
 * 接受公众号事件
**/
$token = 'token'; //对应公众号后台token
//如果是get请求说明是公众号验证
if($_SERVER['REQUEST_METHOD'] == 'GET'){
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $echostr = $_GET["echostr"];

    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);
    if ($tmpStr == $signature) {
        echo $echostr;
    } else {
        echo '';
    }
    exit;
}
// 否则就是消息到来了 (post请求)
$xmlStr = file_get_contents('php://input'); // 这里只能用这种方式拿数据 post拿不到
if (empty($xmlStr)) {
    return '';
}
// 解析xml
$postObj = simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$openid = (string) $postObj->FromUserName;
$touser = (string) $postObj->ToUserName;
$type = (string) $postObj->MsgType;
$event = (string) $postObj->Event;
// 如果事件类型是扫码或者关注
if ($type == 'event' && ($event == 'SCAN' || $event == 'subscribe')) {
    // 替换多余字符qrscene_ 这里的key就是上面二维码生成的uuid
    $key = str_replace('qrscene_', '', (string) $postObj->EventKey);
    // 操作缓存 -- 没有缓存不管
    if (!cache('?' . $key)) return '';
    // 写入openid 
    cache($key, $openid);
}
// 并返回登录成功的消息 这里不要做格式化!!!
echo "<xml>
<ToUserName><![CDATA[{$openid}]]></ToUserName>
<FromUserName><![CDATA[{$touser}]]></FromUserName>
<CreateTime>".time()."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[登陆成功,欢迎回家!比心♥]]></Content>
</xml>";

前端轮询查询缓存

前端轮询查询cache缓存是否写入了openid的值,如果有的话就通过openid对用户登录。

总结

实现原理其实还是比较简单,前提是你得有一个已经认证过的服务号。
希望可以帮助到你哦~

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flask是一种轻量级的Python Web框架,能够方便地构建网页应用程序。要实现微信公众号扫码关注并登录网页功能,可以使用Flask结合微信开发接口进行实现。 首先,需要在微信公众平台上注册并创建一个公众号,并获取到相关的开发者ID和密钥。 接下来,搭建Flask应用程序,先安装Flask库,并导入相关的依赖库,如wechatpy和requests库等。 然后,创建一个Flask路由,用于接收微信服务器的验证请求和菜单跳转等请求。根据微信开发文档,编写逻辑代码,进行验证和处理微信服务器的各种请求。 在处理菜单跳转请求时,可以通过微信JS-SDK提供的扫一扫功能,生成一个特定的二维码,用于用户关注公众号。二维码中包含一个唯一的标识码,用于识别用户和公众号之间的关系。 当用户扫描二维码关注公众号后,微信服务器会向事先设置的回调URL发送消息通知。在Flask应用程序中,可以通过编写对应的路由来处理该通知,获取到用户的唯一标识码。然后,可以将该标识码与用户相关的信息存储到数据库中,以便后续使用。 最后,通过编写相关的路由和模板,实现用户登录网页功能。当用户点击网页中的登录按钮时,可以跳转到微信授权登录页面。用户授权后,微信会将用户的唯一标识码和相关信息返回到事先设置的回调URL。在Flask应用程序中,处理该回调URL的路由中,可以获取到用户的标识码,从数据库中获取用户信息,并进行登录操作。 综上所述,通过使用Flask框架结合微信开发接口,可以实现微信公众号扫码关注并登录网页功能。这样的实现方式能够方便地与微信公众号进行交互,并提供给用户一个方便、安全的登录方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值