微信公众号怎么登陆

优质文章,及时送达链接:segmentfault.com/a/1192序言常见方式平常大家见到过最多的扫码登录应该是开放平台网页登录大概形式就是:点击微信登录后会出现一个黑页面,页面中有一个二维码,扫

优质文章,及时送达

链接:segmentfault.com/a/1192

序言

常见方式

平常大家见到过最多的扫码登录应该是 开放平台网页登录 大概形式就是:点击微信登录后会出现一个黑页面,页面中有一个二维码,扫码后可以自动获取用户信息然后登录,但是这种方式需要申请开放平台比较麻烦。如图

利于推广方式

另外一种扫码登录方式只需要一个微信服务号就行,大概流程是:点击微信登录,网站自己弹出一个二维码、扫描二维码后弹出公众号的关注界面、只要一关注公众号网站自动登录、第二次扫描登录的时候网站直接登录,大家可以体验一下 「随便找的一个网站」,这种扫码登录的方式个人觉得非常利于推广公众号。

此外公众号 Java后端,还发布过很多扫描登陆、扫描支付等实战交教程,关注公众号 Java后端 ,回复 666 即可下载。

前期准备

服务号(或者微信测试账号)

EasyWeChat 扩展包

梳理

其实第二种扫码登录的原理很简单,核心就是依靠 微信带参二维码、EasyWeChat 二维码文档

;id=mp1443433542&t=0.376179226179156

简单的解释一下扫描这个带参二维码有什么不同:

扫描二维码,如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值(自定义值)关注事件推送给开发者。

看到这里相信你已经明白了,梳理一下:

登录微信公众号步骤如下:移动端:1、打开手机上的微信,点击右上角的放大镜图。2、在搜索框中输入“微信公众平台”,点击微信公众平台。3、点击进入公众号,点击“关注”,在对话框中输入“微信公众号登录”。4、点击链接进入。

生成二维码的时候你自定义一个参数到二维码中,顺便把这个参数传到前端页面中。

前端页面根据这个参数轮询用户登录状态(也可使用 socket)。

用户扫码关注后会推送一个关注事件到服务端,也会把自定义参数带入到事件中。

根据 openid 创建用户后,然后在 Redis 中存储 Key 为场景值(自定义参数) Value 为用户创建后的 id。

前端轮询方法中如果在 Redis 中获取到 Id 后,Auth 登陆,页面再重载一下,流程完毕。

实战

请求登录二维码

前端通过一个点击事件请求微信登录二维码

后端生成带参二维码逻辑,EasyWeChat 配置请自行查阅 文档

protected $app;

微信公众号怎么登陆

**

* Construct

*

* WeChatController constructor.

*

public function __construct {

$this->app = app('wechat.official_account');

}

**

* 获取二维码图片

*

* @param Request $request

*

* @return \Illuminate\Http\JsonResponse

* @throws \Exception

*

public function getWxPic(Request $request) {

/ 查询 cookie,如果没有就重新生成一次

if (!$weChatFlag = $request->cookie(WxUser::WECHAT_FLAG)) {

登录微信公众号步骤如下:移动端:1、打开手机上的微信,点击右上角的放大镜图。2、在搜索框中输入“微信公众平台”,点击微信公众平台。3、点击进入公众号,点击“关注”,在对话框中输入“微信公众号登录”。4、点击链接进入。

$weChatFlag = Uuid::uuid4->getHex;

}

/ 缓存微信带参二维码

微信公众号怎么登陆

if (!$url = Cache::get(WxUser::QR_URL . $weChatFlag)) {

/ 有效期 1 天的二维码

$qrCode = $this->app->qrcode;

$result = $qrCode->temporary($weChatFlag,3600 * 24);

$url = $qrCode->url($result["ticket"]);

申请成功就可以登陆,熟悉界面,功能还不能用,要等审核,审核通过很快,帮助文档里面说是7个工作日,事实上两三天就通过了。审核成功可以在右上角的邮件标志那看到。 问题八:手机怎么注册微信公众号 打开微信公众号网站,点击最右上角的“。

}

/ 自定义参数返回给前端,前端轮询

return $this->ajaxSuccess(compact('url','weChatFlag'))

登录微信公众号步骤如下:移动端:1、打开手机上的微信,点击右上角的放大镜图。2、在搜索框中输入“微信公众平台”,点击微信公众平台。3、点击进入公众号,点击“关注”,在对话框中输入“微信公众号登录”。4、点击链接进入。

微信公众号怎么登陆

}

用户扫描二维码后处理

*** 微信消息接入(这里拆分函数处理)** @return \Symfony\Component\HttpFoundation\Response* @throws \EasyWeChat\Kernel\Exceptions\BadRequestException* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException* @throws \ReflectionException*public functionserve {$app = $this->app;$app->server->push(function ($message) {if ($message) {$method = camel_case('handle_' . $message['MsgType']);if (method_exists($this,$method)) {$this->openid = $message['FromUserName'];return call_user_func_array([$this,$method],[$message]);}Log::info('无此处理方法:' . $method);}});return $app->server->serve;}*** 事件引导处理方法(事件有许多,拆分处理)** @param $event** @return mixed*protected functionhandleEvent($event) {Log::info('事件参数:',[$event]);$method = camel_case('event_' . $event['Event']);Log::info('处理方法:' . $method);if (method_exists($this,$method)) {return call_user_func_array([$this,$method],[$event]);}Log::info('无此事件处理方法:' . $method);}*** 取消订阅** @param $event*protected functioneventUnsubscribe($event) {$wxUser = WxUser::whereOpenid($this->openid)->first;$wxUser->subscribe = 0;$wxUser->subscribe_time = ;$wxUser->save;}*** 扫描带参二维码事件** @param $event*public functioneventSCAN($event) {if ($wxUser = WxUser::whereOpenid($this->openid)->first) {/ 标记前端可登陆$this->markTheLogin($event,$wxUser->uid);return;}}*** 订阅** @param $event** @throws \Throwable*protected functioneventSubscribe($event) {$openId = $this->openid;if ($wxUser = WxUser::whereOpenid($openId)->first) {/ 标记前端可登陆$this->markTheLogin($event,$wxUser->uid);return;}/ 微信用户信息$wxUser = $this->app->user->get($openId);/ 注册$nickname = $this->filterEmoji($wxUser['nickname']);$result = DB::transaction(functionuse ($openId,$event,$nickname,$wxUser) {$uid = Uuid::uuid4->getHex;$time = time;/ 用户$user = User::create(['uid' => $uid,'created_at' => $time,]);/ 用户信息$user->user_info->create(['email' => $user->email,'nickname' => $nickname,'sex' => $wxUser['sex'],'address' => $wxUser['country'] . ' ' . $wxUser['province'] . ' ' . $wxUser['city'],'avatar' => $wxUser['headimgurl'],'code' => app(UserRegisterController::class)->inviteCode(10),'created_at' => $time,]);/ 用户账户$user->user_account->create(['gold' => 200,'created_at' => $time,]);$wxUserModel = $user->wx_user->create(['subscribe' => $wxUser['subscribe'],'subscribe_time' => $wxUser['subscribe_time'],'openid' => $wxUser['openid'],'created_at' => $time,]);Log::info('用户注册成功 openid:' . $openId);$this->markTheLogin($event,$wxUserModel->uid);});Log::debug('SQL 错误: ',[$result]);}*** 标记可登录** @param $event* @param $uid*public functionmarkTheLogin($event,$uid) {if (empty($event['EventKey'])) {return;}$eventKey = $event['EventKey'];/ 关注事件的场景值会带一个前缀需要去掉if ($event['Event'] == 'subscribe') {$eventKey = str_after($event['EventKey'],'qrscene_');}Log::info('EventKey:' . $eventKey,[$event['EventKey']]);/ 标记前端可登陆Cache::put(WxUser::LOGIN_WECHAT . $eventKey,$uid,now->addMinute(30));}

前端登录检查

*** 微信用户登录检查** @param Request $request** @return bool|\Illuminate\Http\JsonResponse*public functionloginCheck(Request $request) {/ 判断请求是否有微信登录标识if (!$flag = $request->wechat_flag) {return $this->ajaxSuccess(false);}/ 根据微信标识在缓存中获取需要登录用户的 UID$uid = Cache::get(WxUser::LOGIN_WECHAT . $flag);$user = User::whereUid($uid)->first;if (empty($user)) {return $this->ajaxSuccess(false);}/ 登录用户、并清空缓存auth('web')->login($user);Cache::forget(WxUser::LOGIN_WECHAT . $flag);Cache::forget(WxUser::QR_URL . $flag);return $this->ajaxSuccess(true);}

OK,很实用的一个功能吧,赶快加到你项目中吧!

-END-

如果看到这里,说明你喜欢这篇文章,请 。同时 标星(置顶)本公众号可以第一时间接受到博文推送。

最近整理一份资料《Java技术栈学习手册》,覆盖了Java技术、面试题精选、Spring全家桶、Nginx、SSM、微服务、数据库、数据结构、架构等等。

上一篇 2023年01月21 15:02
下一篇 2023年02月02 21:55

相关推荐

  • 显示器亮度怎么调,台式电脑如何调亮度

    台式电脑如何调亮度,最近有小伙伴想知道aoc显示器应该要这样子进行调节,所以小编就花了一下时间来了解这个,已经给大家总结好写做教程啦。aoc显示器如何调节亮度。所以现在小编就来将调节aoc显示的详细方

    2023年01月16 289
  • 用键盘怎么关机,电脑按哪三个键可以关机

    电脑明明已经关机了,可是键盘鼠标的灯还亮怎么办呢?今天教你两个方法彻底关闭键盘鼠标的灯光。方法一:直接拔掉主机供电插头或者关闭插板开关,这样做最简单,而且还省电,电脑按哪三个键可以关机,毕竟关机后不拔

    2023年01月19 292
  • word对号怎么输入

    1、在说之前我们先输入如下大写字母:3、神奇的一幕出现了综上述,快速输入判断符号对勾号和错号的方法就是:1、把字体改为Wingdings2。2、如果输入对勾号就是输入大写的P,如果输入叉号就输入大写的

    2023年01月29 257
  • word怎么隐藏批注,让word不显示批注

    批注是作者或审阅者给文档添加的注释或注解,通过查看批注,可以更加详细地了解某些文字的背景。Word中插入批注的方法很简单,只要先选择要对其进行批注的文本,让word不显示批注,或单击文本的末尾处,然后

    2023年02月05 262
  • 微信怎样注销实名认证,怎么注销自己名下的微信实名

    社保卡是大家享有就业、社保等权益的凭证进入微信的支付页面点击钱包,打开身份信息,在身份信息页面点击更换实名,即可注销当前实名认证。具体步骤如下:操作工具:华为nova8操作系统:EMUI11操作软件:

    2023年01月06 202
  • 磁力链接怎么用,最佳磁力搜索引擎天堂

    近期有新手用户会来询问如何安装与使用磁力泵?安装磁力泵前先要检查磁力驱动泵的外观是否良好,有没有明显的缺陷,最佳磁力搜索引擎天堂,假如缺陷比较大将会影响磁力驱动泵的使用年限。磁力泵安装时可以将吸入口对

    2023年02月04 209
  • 录屏怎么录,电脑录屏怎么录屏

    日常生活中我们经常会使用到屏幕录制功能,比如说可以和别人分享打游戏的过程等等。但是还有一些小伙伴不知道手机录屏应该怎么操作,那今天小编就来详细给大家讲解一下录屏的过程。许多手机现在都有自带的录屏功能,

    2023年01月09 232
  • 怎样连别人家的wifi,怎样能解开别人家的加密wifi密码

    家里WiFi总是卡,不是被人蹭网了还能有什么原因呢?毕竟我们宽带少则一百兆,多则几百兆乃至上千兆,怎样能解开别人家的加密wifi密码,照理说不应该会出现卡顿的情况。如果你也是这样的宽带,仍出现了网络卡

    2023年01月05 249
  • 优酷怎么转码,新版优酷转码在哪

    读完需要分钟速读仅需3分钟今天这篇教程本该早就发出来的结果在做封面图的时候PS出问题了花了半天才解决这就是全部一个人做的心酸啊所以也就不废话了,就简单粗暴写点干货吧唠叨众所周知,国内三大视频平台为了保

    2023年02月04 214
  • 怎么恢复回收站删除的文件,注册表恢复回收站删除的文件

    生活中总会有很多意外,在使用电脑的过程中也不例外,相信大家都有过不小心删除过重要文件的情况。那么问题来了,如果不小心删除了文件该怎么恢复呢?一般来说,除了非常大的文件,不小心删除之后,文件将会移动到回

    2023年02月03 255
  • 罪恶都市怎么设置中文,罪恶都市怎么设置中文电脑

    罪恶都市怎么设置中文电脑,gtavc手机版又名罪恶都市,这是一款超级受欢迎的大型都市冒险模拟游戏,玩家们可以在庞大的城市之中自由的穿梭,感受刺激的冒险激情,且游戏中由3D引擎打造的高清城市街景,可以让

    2023年01月30 204
  • linux怎么安装,电脑可以直接装linux系统吗

    操作系统的安装看似神秘,但其实很简单。以下是成功安装Linux的步骤。在2021年,有更多让人们喜欢Linux的理由。在这个系列中,我将分享21种使用Linux的不同理由。下面是如何安装Linux。1

    2023年02月04 277
  • 怎样登录淘宝账户和密码

    当我们在使用淘宝来进行购物的时候,可能也会遇到一些突然忘记了淘宝账号密码的情况,而遇到了这样的一种情况我们又该如何来进行解决呢?下面就让我们一起来了解一下吧。其实如果想要找回淘宝账号的密码也非常的简单

    2023年01月06 234
关注微信