118 lines
3.6 KiB
PHP
118 lines
3.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the overtrue/laravel-wechat.
|
|
*
|
|
* (c) overtrue <i@overtrue.me>
|
|
*
|
|
* This source file is subject to the MIT license that is bundled
|
|
* with this source code in the file LICENSE.
|
|
*/
|
|
|
|
namespace Overtrue\LaravelWeChat;
|
|
|
|
use EasyWeChat\MiniProgram\Application as MiniProgram;
|
|
use EasyWeChat\OfficialAccount\Application as OfficialAccount;
|
|
use EasyWeChat\OpenPlatform\Application as OpenPlatform;
|
|
use EasyWeChat\OpenWork\Application as OpenWork;
|
|
use EasyWeChat\Payment\Application as Payment;
|
|
use EasyWeChat\Work\Application as Work;
|
|
use Illuminate\Foundation\Application as LaravelApplication;
|
|
use Illuminate\Support\ServiceProvider as LaravelServiceProvider;
|
|
use Laravel\Lumen\Application as LumenApplication;
|
|
|
|
/**
|
|
* Class ServiceProvider.
|
|
*
|
|
* @author overtrue <i@overtrue.me>
|
|
*/
|
|
class ServiceProvider extends LaravelServiceProvider
|
|
{
|
|
/**
|
|
* Boot the provider.
|
|
*/
|
|
public function boot()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Setup the config.
|
|
*/
|
|
protected function setupConfig()
|
|
{
|
|
$source = realpath(__DIR__.'/config.php');
|
|
|
|
if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
|
|
$this->publishes([$source => config_path('wechat.php')], 'laravel-wechat');
|
|
} elseif ($this->app instanceof LumenApplication) {
|
|
$this->app->configure('wechat');
|
|
}
|
|
|
|
$this->mergeConfigFrom($source, 'wechat');
|
|
}
|
|
|
|
/**
|
|
* Register the provider.
|
|
*/
|
|
public function register()
|
|
{
|
|
$this->setupConfig();
|
|
|
|
$apps = [
|
|
'official_account' => OfficialAccount::class,
|
|
'work' => Work::class,
|
|
'mini_program' => MiniProgram::class,
|
|
'payment' => Payment::class,
|
|
'open_platform' => OpenPlatform::class,
|
|
'open_work' => OpenWork::class,
|
|
];
|
|
|
|
foreach ($apps as $name => $class) {
|
|
if (empty(config('wechat.'.$name))) {
|
|
continue;
|
|
}
|
|
|
|
if ($config = config('wechat.route.'.$name)) {
|
|
$this->getRouter()->group($config['attributes'], function ($router) use ($config) {
|
|
$router->post($config['uri'], $config['action']);
|
|
});
|
|
}
|
|
|
|
if (!empty(config('wechat.'.$name.'.app_id')) || !empty(config('wechat.'.$name.'.corp_id'))) {
|
|
$accounts = [
|
|
'default' => config('wechat.'.$name),
|
|
];
|
|
config(['wechat.'.$name.'.default' => $accounts['default']]);
|
|
} else {
|
|
$accounts = config('wechat.'.$name);
|
|
}
|
|
|
|
foreach ($accounts as $account => $config) {
|
|
$this->app->singleton("wechat.{$name}.{$account}", function ($laravelApp) use ($name, $account, $config, $class) {
|
|
$app = new $class(array_merge(config('wechat.defaults', []), $config));
|
|
if (config('wechat.defaults.use_laravel_cache')) {
|
|
$app['cache'] = $laravelApp['cache.store'];
|
|
}
|
|
$app['request'] = $laravelApp['request'];
|
|
|
|
return $app;
|
|
});
|
|
}
|
|
$this->app->alias("wechat.{$name}.default", 'wechat.'.$name);
|
|
$this->app->alias("wechat.{$name}.default", 'easywechat.'.$name);
|
|
|
|
$this->app->alias('wechat.'.$name, $class);
|
|
$this->app->alias('easywechat.'.$name, $class);
|
|
}
|
|
}
|
|
|
|
protected function getRouter()
|
|
{
|
|
if ($this->app instanceof LumenApplication && !class_exists('Laravel\Lumen\Routing\Router')) {
|
|
return $this->app;
|
|
}
|
|
|
|
return $this->app->router;
|
|
}
|
|
}
|