Skip to content

xiaohuilam/laravel-wxapp-login

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel 快速接入微信小程序

让 Laravel 应用3分钟内快捷接入微信小程序的扩展

版本适配

  • php5.6+.svg
  • laravel5.2+.svg

单元测试

  • build.svg
  • build.svg
  • build.svg
  • build.svg
  • build.svg
  • build.svg
  • build.svg
  • build.svg
  • build.svg

安装

composer require xiaohuilam/laravel-wxapp-login -vvv

发布

执行以下命令发布路由和 controller

php artisan vendor:publish --tag=wechat-login

确保启用了小程序配置

根据 Issue#11 这条评论 ,请确保 overtrue/laravel-wechatconfig/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) 用仅需修改用户属性时,只需覆盖此方法即可

在小程序JS使用

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

鸣谢

About

Laravel 上微信小程序登录、接口 guard 快速配置骨架

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages