Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5.3中导入Quickbook库时出错_Php_Laravel_Quickbooks - Fatal编程技术网

Php 在Laravel 5.3中导入Quickbook库时出错

Php 在Laravel 5.3中导入Quickbook库时出错,php,laravel,quickbooks,Php,Laravel,Quickbooks,我正在将quickbooks与我的laravel应用程序集成。集成后我得到了这个错误 PHP警告:require_once(../QuickBooks.PHP):无法打开流: 中没有这样的文件或目录 /第2行的home/vipin/projects/development/Quickbook/config/app.php PHP致命错误:require_once():无法打开所需的“../QuickBooks.PHP” (包括路径='。:/usr/share/php:/home/ubuntu/p

我正在将quickbooks与我的laravel应用程序集成。集成后我得到了这个错误

PHP警告:require_once(../QuickBooks.PHP):无法打开流: 中没有这样的文件或目录 /第2行的home/vipin/projects/development/Quickbook/config/app.php PHP致命错误:require_once():无法打开所需的“../QuickBooks.PHP” (包括路径='。:/usr/share/php:/home/ubuntu/projects/development/Quickbook/vendor/consolibyte/quickbooks') 在/home/ubuntu/projects/development/Quickbook/config/app.php联机中 二,

这是我的控制器Quickbook.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
// require_once '../QuickBooks.php';

use App\Http\Requests;

class QuickBooksController extends Controller
{
private $IntuitAnywhere;
private $context;
private $realm;

public function __construct(){
  if (!\QuickBooks_Utilities::initialized(env('QBO_DSN'))) {
      // Initialize creates the neccessary database schema for queueing up requests and logging
      \QuickBooks_Utilities::initialize(env('QBO_DSN'));
  }
  $this->IntuitAnywhere = new \QuickBooks_IPP_IntuitAnywhere(env('QBO_DSN'), env('QBO_ENCRYPTION_KEY'), env('QBO_OAUTH_CONSUMER_KEY'), env('QBO_CONSUMER_SECRET'), env('QBO_OAUTH_URL'), env('QBO_SUCCESS_URL'));
}

public function  qboConnect(){
  if ($this->IntuitAnywhere->check(env('QBO_USERNAME'), env('QBO_TENANT')) && $this->IntuitAnywhere->test(env('QBO_USERNAME'), env('QBO_TENANT'))) {
      // Set up the IPP instance
      $IPP = new \QuickBooks_IPP(env('QBO_DSN'));
      // Get our OAuth credentials from the database
      $creds = $this->IntuitAnywhere->load(env('QBO_USERNAME'), env('QBO_TENANT'));
      // Tell the framework to load some data from the OAuth store
      $IPP->authMode(
          \QuickBooks_IPP::AUTHMODE_OAUTH,
          env('QBO_USERNAME'),
          $creds);

      if (env('QBO_SANDBOX')) {
          // Turn on sandbox mode/URLs
          $IPP->sandbox(true);
      }
      // This is our current realm
      $this->realm = $creds['qb_realm'];
      // Load the OAuth information from the database
      $this->context = $IPP->context();

      return true;
  } else {
      return false;
  }
}

public function qboOauth(){
  if ($this->IntuitAnywhere->handle(env('QBO_USERNAME'), env('QBO_TENANT')))
  {
      ; // The user has been connected, and will be redirected to QBO_SUCCESS_URL automatically.
  }
  else
  {
      // If this happens, something went wrong with the OAuth handshake
      die('Oh no, something bad happened: ' . $this->IntuitAnywhere->errorNumber() . ': ' . $this->IntuitAnywhere->errorMessage());
  }
}

public function qboSuccess(){
  return view('qbo_success');
}

public function qboDisconnect(){
  $this->IntuitAnywhere->disconnect(env('QBO_USERNAME'), env('QBO_TENANT'),true);
  return redirect()->intended("/yourpath");// afer disconnect redirect where you want

}

public function createCustomer(){

  $CustomerService = new \QuickBooks_IPP_Service_Customer();

  $Customer = new \QuickBooks_IPP_Object_Customer();
  $Customer->setTitle('Ms');
$Customer->setGivenName('Shannon');
$Customer->setMiddleName('B');
$Customer->setFamilyName('Palmer');
$Customer->setDisplayName('Shannon B Palmer ' . mt_rand(0, 1000));
  // Terms (e.g. Net 30, etc.)
  $Customer->setSalesTermRef(4);

  // Phone #
  $PrimaryPhone = new \QuickBooks_IPP_Object_PrimaryPhone();
  $PrimaryPhone->setFreeFormNumber('860-532-0089');
$Customer->setPrimaryPhone($PrimaryPhone);

  // Mobile #
  $Mobile = new \QuickBooks_IPP_Object_Mobile();
  $Mobile->setFreeFormNumber('860-532-0089');
$Customer->setMobile($Mobile);

  // Fax #
  $Fax = new \QuickBooks_IPP_Object_Fax();
  $Fax->setFreeFormNumber('860-532-0089');
$Customer->setFax($Fax);

  // Bill address
  $BillAddr = new \QuickBooks_IPP_Object_BillAddr();
  $BillAddr->setLine1('72 E Blue Grass Road');
$BillAddr->setLine2('Suite D');
$BillAddr->setCity('Mt Pleasant');
$BillAddr->setCountrySubDivisionCode('MI');
$BillAddr->setPostalCode('48858');
$Customer->setBillAddr($BillAddr);

  // Email
  $PrimaryEmailAddr = new \QuickBooks_IPP_Object_PrimaryEmailAddr();
  $PrimaryEmailAddr->setAddress('support@consolibyte.com');
  $Customer->setPrimaryEmailAddr($PrimaryEmailAddr);

  if ($resp = $CustomerService->add($this->context, $this->realm, $Customer))
  {
      //print('Our new customer ID is: [' . $resp . '] (name "' . $Customer->getDisplayName() . '")');
      //return $resp;
      //echo $resp;exit;
      //$resp = str_replace('{','',$resp);
      //$resp = str_replace('}','',$resp);
      //$resp = abs($resp);
      return $this->getId($resp);
  }
  else
  {
      //echo 'Not Added qbo';
      print($CustomerService->lastError($this->context));
  }
}

public function addItem(){
  $ItemService = new \QuickBooks_IPP_Service_Item();

  $Item = new \QuickBooks_IPP_Object_Item();

  $Item->setName('My Item');
$Item->setType('Inventory');
$Item->setIncomeAccountRef('53');

  if ($resp = $ItemService->add($this->context, $this->realm, $Item))
  {
      return $this->getId($resp);
  }
  else
  {
      print($ItemService->lastError($this->context));
  }
}

public function addInvoice($invoiceArray,$itemArray,$customerRef){

  $InvoiceService = new \QuickBooks_IPP_Service_Invoice();

  $Invoice = new \QuickBooks_IPP_Object_Invoice();

  $Invoice = new QuickBooks_IPP_Object_Invoice();

$Invoice->setDocNumber('WEB' . mt_rand(0, 10000));
$Invoice->setTxnDate('2013-10-11');

$Line = new QuickBooks_IPP_Object_Line();
$Line->setDetailType('SalesItemLineDetail');
$Line->setAmount(12.95 * 2);
$Line->setDescription('Test description goes here.');

$SalesItemLineDetail = new QuickBooks_IPP_Object_SalesItemLineDetail();
$SalesItemLineDetail->setItemRef('8');
$SalesItemLineDetail->setUnitPrice(12.95);
$SalesItemLineDetail->setQty(2);

$Line->addSalesItemLineDetail($SalesItemLineDetail);

$Invoice->addLine($Line);

$Invoice->setCustomerRef('67');


  if ($resp = $InvoiceService->add($this->context, $this->realm, $Invoice))
  {
      return $this->getId($resp);
  }
  else
  {
      print($InvoiceService->lastError());
  }
}

public function getId($resp){
  $resp = str_replace('{','',$resp);
  $resp = str_replace('}','',$resp);
  $resp = abs($resp);
  return $resp;
}

}
Config/app.php

<?php
require_once '../QuickBooks.php';

return [


    'qbo_token' => env('QUICKBOOK_TOKEN'),
    'qbo_consumer_key' => env('QBO_OAUTH_CONSUMER_KEY'),
    'qbo_consumer_secret' => env('QBO_CONSUMER_SECRET'),
    'qbo_sandbox' => env('QBO_SANDBOX'),
    'qbo_encryption_key' => env('QBO_ENCRYPTION_KEY'),
    'qbo_username' => env('QBO_USERNAME'),
    'qbo_tenant' => env('QBO_TENANT'),
    'qbo_auth_url' => 'http://app.localhost:8000/qbo/oauth',
    'qbo_success_url' => 'http://app.localhost:8000/qbo/success',
    'qbo_mysql_connection' => 'mysqli://'. env('DB_USERNAME') .':'. env('DB_PASSWORD') .'@'. env('DB_HOST') .'/'. env('DB_DATABASE'),

使用
require
而不是autoloader在现代框架中(通常在现代PHP中)是一种不好的做法。我强烈建议使用包管理器(例如composer)将模块正确地添加到项目中

例如,要使用composer将quickbooks库添加到项目中,只需运行一个命令:

composer require consolibyte/quickbooks

在现代框架中(通常在现代PHP中),使用
require
而不是autoloader是一种糟糕的做法。我强烈建议使用包管理器(例如composer)将模块正确地添加到项目中

例如,要使用composer将quickbooks库添加到项目中,只需运行一个命令:

composer require consolibyte/quickbooks

使用给定的代码和方法,这里有几个方面需要改进

  • 因此,您不应该直接要求任何quickbooks库文件。如果您已通过Composer加载此文件,则会自动加载这些文件,因为Composer自动加载程序将从供应商加载QuickBooks文件。这对于Laravel以及基于Composer的一般应用程序都是正确的-与Laravel的唯一区别在于没有为该SDK编写特定的Laravel包
    ServiceProvider
    ,但这并不重要
  • QuickBooks库尝试自动加载以“QuickBooks”开头的任何类,因此最好为控制器类创建一个
    QuickBooks
    文件夹。这更像是一个“抓到你了”的问题,而且已经被解决了
  • 出现
    Driver/.php
    错误的原因是您没有指定
    QBO\u DSN
    ,或者没有正确指定–您传递给初始化的这个DSN环境变量正在SDK代码中运行,出现
    false
    null
    并断开自动加载程序进行初始化。如果设置为正确的连接字符串(例如
    mysqli://username:password@主机:端口/数据库
    ,请注意,
    端口
    必须是一个数字,否则将被视为格式不正确),它将正确处理DSN并继续加载页面。请注意,初始化将尝试解析和获取主机的网络地址,因此您不能只在其中放入一个伪值,并期望它工作—这需要首先存在
  • 您混合了环境变量和应用程序配置,而没有正确使用它们。如果您希望在应用程序配置设置
    QBO\u-mysql\u-connection
    中以特定的方式构造DB连接字符串(也称为QBO\u-DSN
  • ),那么您应该在尝试初始化/加载/etc时这样做。而不是使用
    env('QBO\u-DSN')
    ,您应该使用
    config('app.QBO\u-mysql\u-connection'))
    从应用程序设置加载构造的版本。通常情况下,您根本不会将这么多的环境变量加载到一个控制器中——这些变量应该由应用程序处理,然后由控制器调用应用程序配置,因此不知道它们是如何定义的
  • 您也不需要
    从应用程序配置文件中要求
    任何内容-该文件仅用于设置配置变量
  • 由于QuickBooks SDK没有正确的名称空间(),因此没有一种好的PSR-4加载(和
    use
    -ing)类的方法,但是在文件顶部使用
    use
    子句仍然是一种很好的做法(例如
    使用QuickBooks\u实用程序;
    )因此,您可以使用这些类,而不用担心忘记前面的反斜杠(即不再使用
    \QuickBooks\u Utilities
    ,只使用
    QuickBooks\u Utilities
    )——给定代码中有几个实例忘记了这一点,并且将不起作用,因为Laravel应用程序具有名称空间,并且将在
    App\Http\Controllers
    名称空间中查找这些类(例如,“找不到类
    App\Http\Controllers\QuickBooks\u实用程序
    ”)
  • 缩进-选择一种样式(例如制表符、双空格、PSR-2等),然后坚持使用。在提交到存储库或发布之前,在所有代码上运行或使用其他清理工具,因此可读性非常重要
    使用给定的代码和方法,这里有几个方面需要改进

  • 因此,您不应该直接要求任何quickbooks库文件。如果您已通过Composer加载此文件,则会自动加载这些文件,因为Composer自动加载程序将从供应商加载QuickBooks文件。这对于Laravel以及基于Composer的一般应用程序都是正确的-与Laravel的唯一区别在于没有为该SDK编写特定的Laravel包
    ServiceProvider
    ,但这并不重要
  • QuickBooks库尝试自动加载以“QuickBooks”开头的任何类,因此最好为控制器类创建一个
    QuickBooks
    文件夹。这更像是一个“抓到你了”的问题,而且已经被解决了
  • 出现
    Driver/.php
    错误的原因是,您没有指定
    QBO\u DSN
    ,或者没有正确地指定,这是您正在使用的DSN环境变量