init(); } private function init(): self { $config = [ 'ClientID' => config('services.quickbooks.client_id'), 'ClientSecret' => config('services.quickbooks.client_secret'), 'auth_mode' => 'oauth2', 'scope' => "com.intuit.quickbooks.accounting", // 'RedirectURI' => 'https://developer.intuit.com/v2/OAuth2Playground/RedirectUrl', 'RedirectURI' => $this->testMode ? 'https://above-distinctly-teal.ngrok-free.app/quickbooks/authorized' : 'https://invoicing.co/quickbooks/authorized', 'baseUrl' => $this->testMode ? CoreConstants::SANDBOX_DEVELOPMENT : CoreConstants::QBO_BASEURL, ]; $merged = array_merge($config, $this->ninjaAccessToken()); $this->sdk = DataService::Configure($merged); $this->sdk->setLogLocation(storage_path("logs/quickbooks.log")); $this->sdk->enableLog(); $this->sdk->setMinorVersion("73"); $this->sdk->throwExceptionOnError(true); return $this; } private function ninjaAccessToken() { return isset($this->company->quickbooks->accessTokenKey) ? [ 'accessTokenKey' => $this->company->quickbooks->accessTokenKey, 'refreshTokenKey' => $this->company->quickbooks->refresh_token, 'QBORealmID' => $this->company->quickbooks->realmID, ] : []; } public function sdk(): SdkWrapper { return new SdkWrapper($this->sdk, $this->company); } /** * //@todo - refactor to a job * * @return void */ public function syncFromQb() { QuickbooksSync::dispatch($this->company); } }