700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Laravel + EasyWeChat 微信登陆功能

Laravel + EasyWeChat 微信登陆功能

时间:2019-04-03 13:59:59

相关推荐

Laravel + EasyWeChat 微信登陆功能

基于:Laravel 5.8.*,以下代码可能存在一些继承函数,详情可访问开源项目:Github、Gitee。

第一步:去微信公众号中设置和获取信息

注意:公众号必须已经认证,且必须拥有网页授权获取用户基本信息的权限。

开发-基本配置-公众号开发信息,获取 app_id 和 app_secret 这两个参数。

开发-基本配置-公众号开发信息,IP白名单中设置你的服务器公网IP。

设置-公众号设置-功能设置,业务域名中添加你的域名(主要用于防止微信中访问网页时进行转码和风险提示)。

设置-公众号设置-功能设置,网页授权域名中添加你的域名。

第二步:安装 EasyWeChat 的 Laravel 5 拓展包

安装前请切换到项目的根目录下。

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

注意:安装完成后 Laravel 默认已经把 EasyWeChat 做为服务嵌入到了框架中,所以在开发中使用的代码和 EasyWeChat 官方帮助文档中稍微有不同,当然如果你不使用 Laravel 的服务特性或是原生方式,可以直接按官网的来,更具体可以查看EasyWeChat和EasyWeChat Laravel 5 拓展包的使用文档。

第三步:创建配置文件

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

第四步:修改配置参数

这里使用的是微信中登陆功能,因此需要将 app_id 和 secret 修改为你的公众号参数,其他默认就好,可以在 /config/wechat.php 中修改,或者也可以在 .evn 中添加并赋值,两个方式选其一,具体区别请阅读官方文档。

在 /config/wechat.php 中的 official_account 节点中修改:

/** 公众号*/'official_account' => ['default' => ['app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID', 'your-app-id'), // AppID'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET', 'your-app-secret'), // AppSecret'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN', 'your-token'), // Token'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', ''), // EncodingAESKey/** OAuth 配置** scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login* callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)*/'oauth' => ['scopes' => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),],],],

在 .evn 中添加并赋值:

WECHAT_OFFICIAL_ACCOUNT_APPID = your-app-idWECHAT_OFFICIAL_ACCOUNT_SECRET = your-app-secret

第五步:注册中间件

/app/Http/Kernel.php 中的 protected $routeMiddleware 节点添加

'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,

第六步:创建测试路由,添加中间件

/routes/web.php 中添加:

Route::get('wechat/auth', function(){$wechat = session('wechat.oauth_user.default'); //拿到授权用户资料dd($wechat); //打印出授权用户资料})->middleware('auth.wechat');

第七步:访问测试路由

此时,打开微信,在微信中访 http://你的域名/wechat/auth 试试,点击同意授权后,就会打印出你当前微信的用户资料。

注意:必须在微信中访问,因为在浏览器中访问是需要微信开放平台的接口,不在此教程范围中。

第八步:创建正式路由,添加中间件

此时可以注释或者删除掉刚才创建的路由信息,并添加正式的路由:

Route::any('wechat/auth', 'Wechat@auth')->middleware(['auth.wechat']);

第九步:创建控制器

/app/Http/Controllers/Wechat.php

namespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Support\Facades\DB;use App\User;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Str;class Wechat extends Controller{public function auth(Request $request){//由于使用了easyWechat中 中间件的方法进行授权,因此一句话搞定直接获取授权用户的信息如下:$wechat = session('wechat.oauth_user.default');//查询用户$has = User::where('wechat_openid', $wechat->id)->first();//校验用户是否存在,不存在则创建新用户if(!$has){$result = User::create(['username' => $wechat->name,'password' => bcrypt(Str::random(60)),'wechat_openid' => $wechat->id,'logined_ip' => $request->getClientIp(),'logined' => time(),'created' => time(),'state' => 1,]);}else{$result = $has;}//认证登陆Auth::login($result, true);//获取跳转地址$redirect_url = $request->redirect_url;if($redirect_url == ''){//如果跳转地址不存在return redirect('/user');}else{return redirect($redirect_url);}}}

这个过程中存在的几个坑:

1. 查询用户需要用到默认的 User 类,如果使用 DB 类去查,例如:

Db::table('user')->where(['wechat_openid' => $wechat->id])->first();

返回的数据是无法通过 Auth:login 认证的,因此需要引用 use App\User,再通过 User::where 查询才可以。

2.User::create 新插入到数据库到的字段数据为空?

需要到 /app/Http/User.php 中查看下 protected $fillable 节点中是否包含 User::create 中插入的字段,如果没有则添加。例如:

protected $fillable = ['username', 'password', 'email', 'phone', 'avatar', 'wechat_openid', 'logined_ip', 'logined', 'created', 'state',];

3. 提示 create_at 或 update_at 字段不存在?

如果你的用户数据包字段包含 create_at 和 update_at,不会存在此提示,如果没有,就要在 User 类中关闭 Laravel 自带的时间字段,依然在 /app/Http/User.php 中添加

public $timestamps = false;

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