「代码分享」通过PHP微信扫描关注公众号插图

安装easywechat库:简化微信开发流程

在项目中使用composer命令安装easywechat库:

composer require overtrue/wechat

微信配置:设置服务器接口地址

进入微信公众号后台的基本配置,填写服务器配置中的接口地址,确保该地址是能正确接收微信推送消息的线上地址。关注、扫码、收到消息等事件都会推送到该地址。

「代码分享」通过PHP微信扫描关注公众号插图1

创建二维码:实现扫码登录功能

首先生成一个临时二维码,并保存下来生成的ticket值。代码示例:

use EasyWeChat\Foundation\Application;

$unique = md5(password_hash(uniqid(true), PASSWORD_BCRYPT));
$expiry = 600;
$app = new Application($options);
$qrcode = $app->qrcode;
$data = $qrcode->temporary($unique, $expiry);

$ticket = $data->ticket;
$url = $qrcode->url($ticket);

通过以上代码生成的链接地址直接打开即可显示二维码。

服务端接口:处理关注和扫码事件

服务端的接口地址需要与微信后台配置的服务器地址对应。以下示例只添加了关注和扫码事件的处理,更多方法可参考微信官方文档。

use EasyWeChat\Foundation\Application;

$app = new Application($options);
$server = $app->server;

$server->setMessageHandler(function ($message) {
    switch ($message->MsgType) {
        case 'event':
            switch (strtolower($message->Event)) {
                case 'subscribe':
                    $ticket = $message->Ticket;
                    $openid = $message->FromUserName;
                    break;
                case 'scan':
                    break;
            }
        break;
    }
});

以上代码能够获取生成二维码时的ticket值和关注公众号用户的openid。

前端:展示二维码并刷新扫码状态

服务端需要返回二维码地址、ticket和过期时间给前端。前端拿到二维码地址后,可以展示在页面上,当二维码过期时需刷新二维码或提示已过期。可以通过轮询或长连接的方式使用ticket来刷新用户扫码状态,一旦检测到已扫描,即可刷新登录状态,实现用户与公众号的关联。

获取用户信息:根据openid获取用户详细信息

通过获取到的openid,可以获取用户的详细信息:

use EasyWeChat\Foundation\Application;

$app = new Application($options);
$userService = $app->user;
$openid = '***';
$user = $userService->get($openid);