安装easywechat
这里使用的是easywechat
composer require overtrue/wechat
微信配置
先去公众号后台基本配置/ 填写服务器配置
配置接口,需要是线上能正确收到微信推送消息的地址,关注如果有关注、扫码、收到消息等事件都会推送到该地址
创建二维码
首先创建一个临时二维码,ticket
保存下来
use EasyWeChat\Foundation\Application;
// 生成随机数
$unique = md5(password_hash(uniqid(true), PASSWORD_BCRYPT));
// 二维码有效期600秒
$expiry = 600;
$app = new Application($options);
$qrcode = $app->qrcode;
$data = $qrcode->temporary($unique, $expiry);
// 这个值保存下来,待会查询扫码状态可以用到
$ticket = $data->ticket;
// 二维码的地址
$url = $qrcode->url($ticket);
拿到如下格式的链接地址,直接打开就是一张二维码
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHA7zwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyNmZudTBoOUJldUQxYWhhYXhBY1gAAgQ5iApkAwRYAg11
服务端接口
此接口地址需要对应微信后台配置的服务器地址,下面示例只添加了关注
扫码
,更多方法参考微信官方文档
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值
$ticket = $message->Ticket;
// 关注用户的openid
$openoid = $message->FromUserName;
break;
//二维码被扫
case 'scan':
break;
// ...
}
break;
}
// ...
});
上面方法可以拿到生成二维码时候的的ticket
,和关注公众号用户的openid
。
前端
服务端需要返回二维码地址
、ticket
、过期时间
前端拿到二维码地址后,将二维码展示给页面,二维码过期需要刷新二维码或者提示已过期。
可以使用轮询
或者长连接
的方式通过ticket
刷新用户扫码状态,检测到已扫描刷新登录状态,用户成功和公众号关联。
获取用户信息
通过获取到的openid
就能获取到用户信息了
use EasyWeChat\Foundation\Application;
$app = new Application($options);
$userService = $app->user;
$openoid = '***';
$user = $userService->get($openoid);