bztang-admin/vendor/overtrue/laravel-wechat/src/ServiceProvider.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;
}
}