laravel5.6安装laravel-wechat 实现微信授权登录

一.下载laravel-wechat

https://packagist.org/packages/overtrue/laravel-wechat

二. 使用composer安装laravel-wechat

composer require "overtrue/laravel-wechat:~4.0"

php>=7.2
laravel <5.8
如果php版本不高,可以升级php,参考我的另一篇博客
升级php版本步骤

三.配置

在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)

'providers' => [// ...Overtrue\LaravelWeChat\ServiceProvider::class,
],
'aliases' => [// ...'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
],

创建配置文件:

php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider

1.修改应用根目录下的 config/wechat.php 中对应的参数即可。

WECHAT_LOG_LEVEL=info  //日志级别 最好和laravel同级
WECHAT_LOG_FILE=/var/log/coupon/report.log  //日志保存文件 最好和laravel 统一
WECHAT_OFFICIAL_ACCOUNT_APPID=申请的appid
WECHAT_OFFICIAL_ACCOUNT_SECRET=申请的appsecret
WECHAT_OFFICIAL_ACCOUNT_TOKEN=
WECHAT_OFFICIAL_ACCOUNT_AES_KEY=

2.每个模块基本都支持多账号,默认为 default。

四.使用
在中间件 App\Http\Middleware\VerifyCsrfToken 排除微信相关的路由,如:

protected $except = [// ...'wechat',
];

下面以接收普通消息为例写一个例子:

假设您的域名为 overtrue.me 那么请登录微信公众平台 “开发者中心” 修改 “URL(服务器配置)” 为: http://overtrue.me/wechat。

路由:

Route::any('/wechat', 'WeChatController@serve');

注意:一定是 Route::any, 因为微信服务端认证的时候是 GET, 接收用户消息时是 POST !
然后创建控制器 WeChatController:

<?php
/*** Created by PhpStorm.* User: clj * Date: 2020/4/9* Time: 下午5:47*/
namespace App\Http\Controllers\Home;use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller as BaseController;class WeChatController extends BaseController
{public function serve(){Log::info('request arrived');$app = app('wechat.official_account');$app->server->push(function($message){return "欢迎关注 overtrue!";});return $app->server->serve();}}

上面例子里的 Log 是 Laravel 组件,所以它的日志不会写到 EasyWeChat 里的,建议把 wechat 的日志配置到 Laravel 同一个日志文件,便于调试。

我们有一下方式获取SDK的服务实例

1.使用外观
$officialAccount = \EasyWeChat::officialAccount();//公众号

1.定义路由
Route::get('/user','WeChatController@user');
2.在WeChatController控制器中添加user方法public function user(){$officialAccount = \EasyWeChat::officialAccount();var_dump($officialAccount);}

OAuth中间件
使用中间件的情况下 app/config/wechat.php中的auth.callback就随便填写吧(因为用不着了).
1.在app/Http/Kernel.php中添加路由中间件

protected $routeMiddleware = [//...'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,
]

2.在路由中添加中间件

routes/web.phpRoute::group(['middleware' => ['wechat.oauth']],function (){Route::get('/user','WeChatController@user');});WeChatController.phppublic function user(){$user = session('wechat.oauth_user.default');dd($user);}

登录微信公众平台,进行如下配置

打开微信,输入你的路由地址 xxx.cn/home/user

实现用户授权登录

1.判断用户是否在数据库中,如果不在写如数据库,并保存Session (一天)
2.用户在数据库中,判断用户是否在Session中,不在从数据库中取出来保存session (一天)

WeChatController.php
<?php
/*** Created by PhpStorm.* User: clj * Date: 2020/4/9* Time: 下午5:47*/
namespace App\Http\Controllers\Home;use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller as BaseController;
use Illuminate\Support\Arr;
use Overtrue\Socialite\User as SocialiteUser;
use  Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Traits\getServiceTrait;
use App\Tools\Response;class WeChatController extends BaseController
{use getServiceTrait;private $request;public function __construct(Request $request){$this->request = $request;}/*** 处理微信的请求消息* User: clj * Date: 2020/4/10* Time: 上午9:06* @return mixed*/public function serve(){Log::info('request arrived');$app = app('wechat.official_account');$app->server->push(function($message){return "success!";});return $app->server->serve();}/*** User: clj * Date: 2020/4/11* Time: 上午11:53* @return array*/public function user(){$result = [];$user = $this->request->session()->get('wechat.oauth_user.default')->original;if( !isset($user['openid']) ){$result['message'] = "未获取到openid,请稍后再试!";return Response::returnFalse($result);}$userInfoData = ['nickname' => $user['nickname'],'avatar' => $user['headimgurl'],'province' => $user['province'],'city' => $user['city'],];$userData = ['openid' => $user['openid'],'invited_code' => $this->getRandom(6),];$userInfo = $this->getUserService()->findUserService($user['openid']);if( true === empty($userInfo) ){$register = $this->getUserService()->insertUserInfoService($userInfoData,$userData);if( true === $register ){$result['message'] = '授权成功';return Response::returnSuccess($result);}else{$result['message'] = '授权失败';return Response::returnFalse($result);}}else{$userSession['user'] = $this->request->session()->get('user');$userSession['userInfo'] = $this->request->session()->get('userInfo');if( empty( $userSession['user'] ) && empty( $userSession['userInfo'] ) ){$resUser = $this->getUserService()->findUserService($user['openid']);$resUserInfo = $this->getUserService()->findUserIinfoService($user['nickname']);$this->request->session()->put('userInfo',$resUserInfo);$this->request->session()->put('user',$resUser);}$result['message'] = '授权成功';return Response::returnSuccess($result);}}/*** User: clj * Date: 2020/4/11* Time: 上午10:06* @param $length* @return string|null*/public function getRandom($param){$str="123456789ABCDEFGHJKLMNPQRSTUVWXYZ";$key = '';for($i=0;$i<$param;$i++){$key .= $str[mt_rand(0,32)];}return $key;}}UserService.php
<?php
/*** Created by PhpStorm.* User: clj * Date: 2020/4/10* Time: 下午5:42*/
namespace App\Services;use App\Traits\getRepoTrait;class UserService
{use getRepoTrait;/*** User: clj * Date: 2020/4/10* Time: 下午5:50* @param $openid* @return mixed*/public function findUserService(string $openid){return $this->getUserRepo()->findUserTory($openid);}/*** User: clj * Date: 2020/4/10* Time: 下午6:12* @param array $userData* @return mixed*/public function insertUserInfoService(array $userInfoData, array $userData){return $this->getUserRepo()->insertUserInfoDataTory($userInfoData,$userData);}/*** User: clj * Date: 2020/4/11* Time: 上午11:48* @param $nickname* @return mixed*/public function findUserIinfoService(string $nickname){return $this->getUserRepo()->findUserInfoTory($nickname);}}UserRepo.php
<?php
/*** Created by PhpStorm.* User: clj * Date: 2020/4/10* Time: 下午5:42*/
namespace App\Reposities;use App\Models\User;
use App\Models\UserInfo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;class UserRepo
{private $request;public function __construct(Request $request){$this->request = $request;}/*** User: clj * Date: 2020/4/10* Time: 下午5:49* @param $openid* @return mixed*/public function findUserTory(string $openid){if( !isset( $openid ) ){return false;}return User::where('openid',$openid)->get()->toArray();}/*** User: clj * Date: 2020/4/11* Time: 上午11:46* @param $nickname*/public function findUserInfoTory(string $nickname ){if( !isset( $nickname ) ){return false;}return UserInfo::where('nickname',$nickname)->get()->toArray();}/*** User: clj * Date: 2020/4/10* Time: 下午6:13* @param array $userData* @return mixed*/public function insertUserInfoDataTory(array $userInfoData, array $userData){if( empty( $userInfoData) && empty( $userData ) ) {return false;}DB::beginTransaction();try {//DB::connection()->enableQueryLog();$insertUserInfoResult = UserInfo::create($userInfoData);$insertUserResult = User::create($userData);//dd(DB::getQueryLog());exit();Log::info('用户注册详情信息--:'.json_encode($userInfoData,256));Log::info('用户注册信息--:'.json_encode($userData,256));DB::commit();if( empty( $insertUserInfoResult->toArray() ) || empty( $insertUserResult->toArray() )){return false;}else{$userInfo = UserInfo::where('nickname',$userInfoData['nickname'])->get()->toArray();$userData = User::where('openid',$userData['openid'])->get()->toArray();$this->request->session()->put('userInfo',$userInfo);$this->request->session()->put('user',$userData);return true;}} catch (\Exception $e){DB::rollback();Log::info('提示信息:'.$e->getMessage());Log::info('状态码:'.$e->getCode());}}
}

laravel5.6安装laravel-wechat 实现微信授权登录(公众号)相关推荐

  1. Php静默授权,【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)...

    一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...

  2. .net core identity集成微信授权登录

    最快的方式是直接nuget安装AspNetCore.Authentication.WeChat包. 想要知道是如何实现的,可以看下面github上面的源码. 源码在这里:https://github. ...

  3. thinkphp 微信授权登录 以及微信实现分享

    <?php namespace app\wechat\controller; use think\Controller; use think\Request; /** * 微信授权登录类 * U ...

  4. ios微信登录不上服务器,iOS微信授权登录

    首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录.支付等功能还涉及付费,具体申请流程就不再这里说了.到开放平台->管理中心->移动应用->查看应用,确认你 ...

  5. code换取微信openid_微信授权登录开发的两种方式

    本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...

  6. 五行代码搞定微信授权登录

    Authing 通过 SDK 为开发者提供了一种快速在微信网页中获取用户信息并完成登录的方法.如果用户在微信客户端中访问第三方网页.公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑 ...

  7. Java版本微信授权登录(测试版)

    这篇文章是对微信授权登录的一个测试版本,并不能直接在生产上使用,对于在生产上正式使用将会在下一篇中描述. 一,首先需要以下两个数据 appID和appsecret 如何获取这两个数据,请先登录微信公众 ...

  8. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)...

    场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...

  9. 关于微信授权登录的用户取消-2的问题

    之前在做微信授权登录的时候,遇到了用户取消:-2的问题,从网上查了一下,也没有找到什么解决方案,最后自己还是把它解决了,和大家分享一下,弄了半天,原来是自己申请错了,我给申请成了网站应用了,使用的网站 ...

最新文章

  1. zabbix 3.4 ubuntu 16 用腾讯企业邮箱作为告警邮箱
  2. red hat安装宝塔_如何在几分钟内安装Red Hat Container Development Kit(CDK)
  3. Linux zip命令:压缩文件或目录
  4. hibernate 高并发下遇到的大坑
  5. 2008r2无线服务器,2008r2云服务器
  6. 聊聊调度框架,K8S、Mesos、Swarm 一个都不能少
  7. 【window操作系统下Github版本的回滚问题】
  8. Pattern 模式器: Matcher 匹配器
  9. 接口测试--接口基础概念、HTTP协议、接口测试风格、接口测试流程
  10. select python interpreter什么意思_熟悉Python Interpreter解释器
  11. 电脑解锁后黑屏有鼠标_电脑开机黑屏就剩鼠标怎么回事?
  12. 计算机用word做贺卡,新年马上就要到了用WORD2000做贺卡 -电脑资料
  13. 《黑客狙击》--一部值得观看的国产高科技犯罪电影
  14. ThinkPad-T480-OpenCore0.7.5-黑苹果EFI
  15. dotnet OpenXML 文本 Kerning 字间距的作用
  16. [首发] 多方位玩转“地平线新发布AIoT开发板——旭日X3派(Sunrise x3 Pi)” 插电!开机!轻松秒杀!
  17. 蓝牙如何进行广播和扫描
  18. 金融风控指标:WOE, IV, KS,LIFT值和PSI
  19. MySQL中LAG()函数和LEAD()函数的使用
  20. 求是追梦--------一位计算机专业硕士毕业生的求职经历和感想

热门文章

  1. 创业三年,走通一条路
  2. MMORPG服务器-Basic Architecture
  3. Django request对象
  4. 生产力工具(120512)
  5. java计算机毕业设计HTML5“牧经校园疫情防控网站”设计与实现MyBatis+系统+LW文档+源码+调试部署
  6. 分享公众号预约怎么做_教你实现微信公众号预约制作步骤的方法
  7. Windows环境下搭建Shell环境
  8. 累计销售[静态局部变量的使用]
  9. Microsoft Jet 数据库引擎找不到对象'Sheet1$A:CV'
  10. Appstore App转让流程