xiaohuilam / laravel-wxapp-login
A laravel plugin to create wechat mini-program login api.
Fund package maintenance!
www.paypal.me/laravel
Installs: 637
Dependents: 0
Suggesters: 0
Security: 0
Stars: 64
Watchers: 4
Forks: 11
Open Issues: 2
Requires
Requires (Dev)
- fzaninotto/faker: *
- laravel/browser-kit-testing: *
- laravel/laravel: >=5.2.0
- mockery/mockery: *
- phpunit/phpunit: *
- squizlabs/php_codesniffer: *
- xiaohuilam/laravel-test: >=v0.0.1
README
让 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)
用仅需修改用户属性时,只需覆盖此方法即可
在小程序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
鸣谢
- Overtrue's laravel-easywechat