让 Laravel 应用3分钟内快捷接入微信小程序的扩展
composer require xiaohuilam/laravel-wxapp-login -vvv
执行以下命令发布路由和 controller
php artisan vendor:publish --tag=wechat-login
根据 Issue#11 这条评论 ,请确保 overtrue/laravel-wechat
的 config/wechat.php
启用了小程序的配置
[
/* * 小程序 */
'mini_program' => [
'default' => [
'app_id' => env('WECHAT_MINI_PROGRAM_APPID', ''),
'secret' => env('WECHAT_MINI_PROGRAM_SECRET', ''),
'token' => env('WECHAT_MINI_PROGRAM_TOKEN', ''),
'aes_key' => env('WECHAT_MINI_PROGRAM_AES_KEY', ''),
],
],
],
laravel-wxapp-login 需要在 users
表中添加 openid
的字段,所以需要运行 database/migrations/2019_05_28_060312_users_add_openid.php
php artisan migrate
另外,需要在用户模型中,将 openid
加入到 $fillable
属性:
打开 app\User.php
(如果你修改过模型位置,请以自己项目实际位置为准)
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
//... 你原先的字段
'openid',
];
}
WECHAT_MINI_PROGRAM_APPID=#小程序的appid
WECHAT_MINI_PROGRAM_SECRET=#小程序的secret
在 routes/wechat.php
Route::group(['middleware' => ['guest']], function () {
Route::post('login', 'Auth\\WechatLoginController@login')->name('wechat.login');
//这里放未登录的api
});
Route::group(['middleware' => ['auth:wechat']], function () {
//这里放置你的需要登录的 api 路由,如用户资料API、修改资料API...
});
在 app/Http/Controllers/Auth/WechatLoginController.php
中修改
方法为:
protected function registerUser($credential)
完整的注册逻辑protected function userAttributes($credential)
用仅需修改用户属性时,只需覆盖此方法即可
Restful API
在
php artisan tinker
运行 route('wechat.login')
得到微信登录的 api 的 URL, 调用微信登录
let url = '上面获得的url'
wx.login({
success: (res) => {
wx.request({
url: url,
method: 'POST',
data: {
code: res.code
},
header: {
Authorization: null
},
success: (response) => {
// 这里拿到的token = response.data.token,给后面所有需要登录的api都带上 {headers: {Authorization: response.data.token}}
},
})
},
})
Websocket
小程序代码
import Echo from 'laravel-echo'
let io = require('weapp.socket.io')
const echo = new Echo({
client: io,
broadcaster: 'socket.io',
host: '??',
auth: {
headers: {
Authorization: 'Bearer ' + '上面取得的 token',
},
},
});
echo.private(`channel.${user_id}`)
.listen(`broadcastAs 后的名字`, (e) => {
console.log(e);
});
注册 channel.php
Broadcast::channel('channel.{id}', function ($user, $id) {
return $user->id == $id;
}, ['guards' => ['wechat',]]); //一定要指定 guards!
MIT
- Overtrue's laravel-easywechat