在Laravel Drawmyattention中集成多个Xero组织

时间:2018-08-01 01:41:30

标签: php laravel xero-api

我一直在使用drawmyattention将laravel代码与xero集成在一起,我们从客户数据库中获取数据并将其添加到CRM中。 最近,我们有第二个也希望与Xero系统集成的客户端,我面临的问题是要更改客户端(组织),我需要在配置文件中更改以下内容

消费者密钥 消费者秘密 和 RSA加密

但是当我动态更改config / xero / config.php文件中的这些值时,由于drawmyattention供应商提供程序已加载,因此它们不会获得新值,而是坚持使用配置文件中的旧值。

我用过

config('xero.config.oauth', new array(values))

我可以记录日志并看到值已更改,但是当我进行连接调用时,它从客户端1获取数据,并且通过进一步的记录,我知道新的配置值不会传播到以前已加载的提供程序。

我尝试按照以下步骤创建自己的延期服务提供商

https://laravel.com/docs/5.2/providers

没有运气。

由于这种原因,卡住了,而其他一切正常,只是无法在运行时切换xero组织。

链接中的答案也谈到了相同的问题,但仍然无法解决 Laravel dynamic config settings

当我创建自己的

class XeroDefferedProvider extends ServiceProvider
{

    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
         $this->app->bind('DrawMyAttention\XeroLaravel\Facades\XeroPrivate', function()
         {
            return new XeroPrivate();

        });
    }


    public function provides()
    {
        return ['DrawMyAttention\XeroLaravel\Facades\XeroPrivate'];
    }
}

我收到XeroPrivate类不存在的错误。

我也对使用之间感到困惑 'DrawMyAttention \ XeroLaravel \ Facades \ XeroPrivate' 要么 'DrawMyAttention \ XeroLaravel \ Providers \ XeroServiceProvider'

因为后来它本身是提供者,所以我认为因为我需要声明对象,所以我需要使用facades,但是啊,我不是laravel的专家。

1 个答案:

答案 0 :(得分:0)

对于试图找出解决方案的任何人,有两个问题,以下是两个问题的解决方案

首先我写了错误的提供程序,如果您使用的第三方库也有提供程序,则需要遵循以下步骤

class XeroDefferedProvider extends ServiceProvider
{

    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->register(
            'DrawMyAttention\XeroLaravel\Providers\XeroServiceProvider'
        );

        $loader = \Illuminate\Foundation\AliasLoader::getInstance();
        $loader->alias('XeroPrivate', 'DrawMyAttention\XeroLaravel\Facades\XeroPrivate');
    }


    public function provides()
    {
        return ['DrawMyAttention\XeroLaravel\Facades\XeroPrivate'];
    }
}

第二次更改值,实际上使用了反射类功能来修改Xero private ..类对象内的变量,这实际上消除了在我的情况下编写提供程序的需要,但我同时编写了这两种方法,因此,如果有人需要任何解决方案,他们可以使用它。

            $config = $reflectionClass->getProperty('config');
            $config->setAccessible(true);
            $config->setValue( $objects , $this->_config_defaults);