https://laravel-china.org/topics/2451/laravel51-implementation-of-the-third-party-login-authentication-tutorial-wechat-login

前言

近期开发了 PHPHub 的网站应用微信登录,因此编写此文记录开发的过程,希望能帮助到有同样需求的同学。

文章概览

  1. 准备工作;
  2. 集成 Package;
  3. 代码调用。

接下来是详细解说。

准备工作

首先到微信开放平台申请相关的 网站应用,用以获取接口所需的 AppID 和 AppSecret。

一般来说需要花费 3 - 5 个工作日。

集成 Package

我们使用 laravel/socialite 扩展包来进行 OAuth 认证,它提供了完整且上手毫无难度的 OAuth 解决方案。

在此基础上使用其 Driver 扩展 socialiteProviders/weixin 来完成微信的 OAuth 认证流程。

1. 安装 laravel/socialite

如果你已经安装过此 Package,则可以跳过此步骤。

1). 直接运行以下命令安装扩展包

composer require laravel/socialite

2). 在你的 config/app.php 文件中添加以下配置信息

'providers' => [
...
// 注意:下文中要集成 Socialite Driver 扩展,因此将会删除此行配置。
Laravel\Socialite\SocialiteServiceProvider::class,
], 'aliases' => [
...
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],

2. 安装 socialiteProviders/weixin

1). 直接运行以下命令安装扩展包

composer require socialiteproviders/weixin

2). 在你的 config/app.php 文件中添加以下配置信息

'providers' => [
...
# 注意:如果你之前已经安装了 laravel/socialite,则务必删除掉下面的配置
// 删除这行配置 Laravel\Socialite\SocialiteServiceProvider::class, # 新增配置
\SocialiteProviders\Manager\ServiceProvider::class,
],

3). 在你的 app/Providers/EventServiceProvider.php 文件中添加以下事件处理器

protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
'SocialiteProviders\Weixin\WeixinExtendSocialite@handle',
],
];

3. 添加配置

1). 在你的 .env 文件中添加以下配置

WEIXIN_KEY=你的AppID
WEIXIN_SECRET=你的AppSecret
WEIXIN_REDIRECT_URI=你的回调地址 # 例如
WEIXIN_KEY=wxba52fab0726b9023
WEIXIN_SECRET=xxxxxxxxxxxxxxxxxx
WEIXIN_REDIRECT_URI=https://laravel-china.org/auth/callback?driver=wechat

2). 在你的 config/services.php 文件中添加以下配置

'weixin' => [
'client_id' => env('WEIXIN_KEY'),
'client_secret' => env('WEIXIN_SECRET'),
'redirect' => env('WEIXIN_REDIRECT_URI'), # 这一行配置非常重要,必须要写成这个地址。
'auth_base_uri' => 'https://open.weixin.qq.com/connect/qrconnect',
],

至此,安装全部完成。

代码调用

准备工作都完成以后,现在就到了接口对接阶段。

1). 添加路由

# 用户点击登录按钮时请求的地址
Route::get('/auth/oauth', 'Auth\AuthController@oauth'); # 微信接口回调地址
Route::get('/auth/callback', 'Auth\AuthController@callback');

2). 在你的 app/Http/Controllers/Auth/AuthController.php 文件里添加以下方法

# 用户点击微信登录按钮后,调用此方法请求微信接口
public function oauth(Request $request)
{
return \Socialite::with('weixin')->redirect();
} # 微信的回调地址
public function callback(Request $request)
{
$oauthUser = \Socialite::with('weixin')->user(); // 在这里可以获取到用户在微信的资料
dd($oauthUser); // 接下来处理相关的业务逻辑 ... }

下图是打印 oauthUser 的结果,供大家参考

至此,已经能获取到用户的微信资料了,接下来你们就可以根据此数据处理自己的相关业务逻辑了。

在这里值得一提的是,我们通过微信的 unionid 来记录用户的信息,而不是 openid。因为针对一个微信开放平台帐号下的应用,同一用户的 unionid 是相同的,这样方便我们以后做多站点的用户数据统一。

附录

网站应用微信登录开发指南

Laravel5.1 实现第三方登录认证教程之 - 微信登录的更多相关文章

  1. cas-5.3.x接入REST登录认证,移动端登录解决方案

    一.部署cas-server及cas-sample-java-webapp 1.克隆cas-overlay-template项目并切换到5.3分支 git clone git@github.com:a ...

  2. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  3. 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取

    公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...

  4. 公众号第三方平台开发 教程六 代公众号使用JS SDK说明

    公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...

  5. php的laravel框架快速集成微信登录

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_provider,详细的介绍请往下阅读. 本文面向的是php语言laravel框架的用户,介绍的是 ...

  6. Asp.Net微信登录-电脑版扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  7. C#微信登录-电脑版扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  8. vue之微信登录

    参考文章https://www.cnblogs.com/examine/p/4634947.html 微信开放平台和公众平台的区别1.公众平台面向的是普通的用户,比如自媒体和媒体,企业官方微信公众账号 ...

  9. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

    第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...

随机推荐

  1. css 始终让图片占满自适应盒子(图片不失真)

    要去上班了,时间比较紧,先把代码粘出来,原理慢慢讲 我来了,今天是农历七月八日,昨天是七夕,不知道为什么,突然通知放假半天(嘎嘎),好吧,没什么!!!走到半路的我看到通知,立马撤了.正好回来把这个原理 ...

  2. fedora input problem...

    davelv最近很郁闷,因为他在Fedora 下用Eclipse写程序的时候,一旦有Eclipse实现了自动提示.代码补齐等功能后,键盘就失去相应,必须根据点右键或者切换窗口才能输入.就上网查,发现是 ...

  3. 凸优化 & 1概念

    ---恢复内容开始--- 放射集合 系数之和为1 相加仍然能在集合内,就是 纺射集合 子空间加一个常熟 就是纺射集合 , 例题2.1 一类特殊的线性方程组的解可以看作纺射 集合 纺射包 aff C 是 ...

  4. vagrant简介

    什么是vagrant? 简单理解,就是可以通过Vagrant这个工具管理虚拟机,比如说想创建一个centos环境的虚拟机,不需要安装系统这么麻烦,通过vagrant可以快速创建 官网地址:https: ...

  5. 轮播图js版&jQ版

    JS版轮播图 html部分和css部分自己任意定 主要构成: 1,一个固定的框 超出框的部分隐藏 2,几张图片float:left 3,下部下原点,点击切换,切换到不同的张都有红色显示 4,左右两个大 ...

  6. TYVJ2032 「Poetize9」升降梯上

    P2032 「Poetize9」升降梯上 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道, ...

  7. pip list报错:DEPRECATION: The default format will switch to columns in the future.

    一.现象: pip list 显示出以下错误:     DEPRECATION: The default format will switch to columns in the future. Yo ...

  8. Java IO:为什么InputStream只能读一次

    http://zhangbo-peipei-163-com.iteye.com/blog/2021879 InputStream的接口规范就是这么设计的. /** * Reads the next b ...

  9. 让Drewtech的J2534 ToolBox 软件支持任何J2534的设备

    更改windows注册表中的FunctionLibrary和ConfigApplication,将DLL和exe路径替换原来的,其他不要动. 或者 create second key in regis ...

  10. 初探 jQuery

    为什么要学习jQuery? 使用javascript开发过程中,有许多的缺点: 1. 查找元素的方法太少,麻烦. 2. 遍历伪数组很麻烦,通常要嵌套一大堆的for循环. 3. 有兼容性问题. 4. 想 ...