100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > laravel5.6安装laravel-wechat 实现微信授权登录(公众号)

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

时间:2020-03-02 02:37:54

相关推荐

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

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

一.下载laravel-wechat

/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=申请的appidWECHAT_OFFICIAL_ACCOUNT_SECRET=申请的appsecretWECHAT_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: /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);}

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

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

实现用户授权登录

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

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

WeChatController.php<?php/*** Created by PhpStorm.* User: clj * Date: /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: /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: /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: /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: /4/10* Time: 下午5:42*/namespace App\Services;use App\Traits\getRepoTrait;class UserService{use getRepoTrait;/*** User: clj * Date: /4/10* Time: 下午5:50* @param $openid* @return mixed*/public function findUserService(string $openid){return $this->getUserRepo()->findUserTory($openid);}/*** User: clj * Date: /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: /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: /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: /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: /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: /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());}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。